Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 BTCBY
Holders
43
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
0.163965909 BTCBYValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
BITCOINBUNNIES
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-20 */ /** ╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═ ╩═╦═╩═╦═╩═╦▄████▄═╦▄████▄═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═ ╦═╩═╦═╩═╦═╩██▀▀██═╩██▀▀██═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═ ╩═╦═╩═╦═╩═╦██──██═╦██──██═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═ ╦═╩═╦═╩═╦═╩██──██═╩██──██═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═ ╩═╦═╩═╦═╩═╦██──██═╦██──██═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═ ╦═╩═╦═╩═╦═╩██──██═╩██──██═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═ ╩═╦═╩═╦═╩═▄██──██████──██▄╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═ ╦═╩═╦═╩═▄███▀──────────▀███▄╦═╩═╦═╩═╦═╩═╦═╩═╦═ ╩═╦═╩═╦██▀────────────────▀██═╦═╩═╦═╩═╦═╩═╦═╩═ ╦═╩═╦═███─────██─────██────███╩═╦═╩═╦═╩═╦═╩═╦═ ╩═╦═╩═██──────██─────██─────██╦═╩═╦═╩═╦═╩═╦═╩═ ╦═╩═╦═██─██▄██▄─────────────██╩▄▄▄╩═█▄╩═▄▄▄═╦═ ╩═╦═╩═██─██████─────────────██╦═▀▀▀▄██▄▀▀▀╦═╩═ ╦═╩═╦▄███████▀───▒▒▒────────██╩═╦═█▒▒▒▒█╦═╩═╦═ ╩═╦▄█████▀─────────────────▄██╦═╩███████╩═╦═╩═ ╦═▐█████▄▄───────────────▄▄██═╩═▄███▒▒▒█╦═╩═╦═ ╩═▐████▀▀█████▄▄▄▄▄▄▄█████▀▀╩═╦▄████▒▒██╩═╦═╩═ ╦═▐█████▄▄▄██▀▀▀▀▀▀▀▀▀██▄▄▄▄████████▒▒██╦═╩═╦═ ╩═╦▀████████████▄▄▄██████████████▀╦█▒▒▒█╩═╦═╩═ ╦═╩═╦▀████████████████████████▀═╦═╩█▒▒▒█╦═╩═╦═ ███████████████████████████████████████████████████████████████████████████████████████ █▄─▄─▀█▄─▄█─▄─▄─█─▄▄▄─█─▄▄─█▄─▄█▄─▀█▄─▄███▄─▄─▀█▄─██─▄█▄─▀█▄─▄█▄─▀█▄─▄█▄─▄█▄─▄▄─█─▄▄▄▄█ ██─▄─▀██─████─███─███▀█─██─██─███─█▄▀─█████─▄─▀██─██─███─█▄▀─███─█▄▀─███─███─▄█▀█▄▄▄▄─█ ▀▄▄▄▄▀▀▄▄▄▀▀▄▄▄▀▀▄▄▄▄▄▀▄▄▄▄▀▄▄▄▀▄▄▄▀▀▄▄▀▀▀▄▄▄▄▀▀▀▄▄▄▄▀▀▄▄▄▀▀▄▄▀▄▄▄▀▀▄▄▀▄▄▄▀▄▄▄▄▄▀▄▄▄▄▄▀ https://medium.com/@bitcoinbunnieserc https://twitter.com/BtcBunnies_ERC https://t.me/BitcoinBunniesERC */ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;} function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;} function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;} function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;} function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;} function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}} function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked {if(b > a) return(false, 0); return(true, a - b);}} function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked {if (a == 0) return(true, 0); uint256 c = a * b; if(c / a != b) return(false, 0); return(true, c);}} function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked {if(b == 0) return(false, 0); return(true, a / b);}} function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked {if(b == 0) return(false, 0); return(true, a % b);}} function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked{require(b <= a, errorMessage); return a - b;}} function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked{require(b > 0, errorMessage); return a / b;}} function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked{require(b > 0, errorMessage); return a % b;}}} interface IERC20 { function totalSupply() external view returns (uint256); function circulatingSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); 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);} abstract contract Ownable { address internal owner; constructor(address _owner) {owner = _owner;} modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;} function isOwner(address account) public view returns (bool) {return account == owner;} function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);} event OwnershipTransferred(address owner); } interface stakeIntegration { function stakingWithdraw(address depositor, uint256 _amount) external; function stakingDeposit(address depositor, uint256 _amount) external; function stakingClaimToCompound(address sender, address recipient) external; } interface tokenStaking { function deposit(uint256 amount) external; function withdraw(uint256 amount) external; function compound() external; } interface IFactory{ function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external; } contract BITCOINBUNNIES is tokenStaking, IERC20, Ownable { using SafeMath for uint256; string private constant _name = 'Bitcoin Bunnies'; string private constant _symbol = 'BTCBY'; uint8 private constant _decimals = 9; uint256 private _totalSupply = 1000000000 * (10 ** _decimals); uint256 public _maxTxAmount = ( _totalSupply * 150 ) / 10000; uint256 public _maxSellAmount = ( _totalSupply * 150 ) / 10000; uint256 public _maxWalletToken = ( _totalSupply * 300 ) / 10000; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) public isFeeExempt; mapping (address => bool) public isDividendExempt; mapping (address => bool) private isBot; IRouter router; address public pair; bool private tradingAllowed = false; uint256 private liquidityFee = 0; uint256 private marketingFee = 300; uint256 private rewardsFee = 400; uint256 private developmentFee = 300; uint256 private stakingFee = 0; uint256 private tokenFee = 0; uint256 private totalFee = 2000; uint256 private sellFee = 7500; uint256 private transferFee = 2000; uint256 private denominator = 10000; bool private swapEnabled = true; uint256 private swapTimes; uint256 private swapAmount = 2; bool private swapping; bool private liquidityAdd; modifier liquidityCreation {liquidityAdd = true; _; liquidityAdd = false;} uint256 private swapThreshold = ( _totalSupply * 500 ) / 100000; uint256 private minTokenAmount = ( _totalSupply * 10 ) / 100000; modifier lockTheSwap {swapping = true; _; swapping = false;} mapping(address => uint256) private lastTransferTimestamp; bool public transferDelayEnabled = true; mapping(address => uint256) public amountStaked; uint256 public totalStaked; address internal token_receiver; stakeIntegration internal stakingContract; uint256 public totalShares; uint256 public totalDividends; uint256 public totalDistributed; uint256 public currentDividends; uint256 public excessDividends; uint256 internal dividendsPerShare; uint256 internal dividendsPerShareAccuracyFactor = 10 ** 36; address[] shareholders; mapping (address => uint256) shareholderIndexes; mapping (address => uint256) shareholderClaims; struct Share {uint256 amount; uint256 totalExcluded; uint256 totalRealised; } mapping (address => Share) public shares; uint256 internal currentIndex; uint256 public minPeriod = 15 minutes; uint256 public minDistribution = 1 * (10 ** 9); uint256 public distributorGas = 1; address public reward = 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599; address internal constant DEAD = 0x000000000000000000000000000000000000dEaD; address internal development_receiver = 0xDCC0d2233Baaf1fa983cc83FE705F9D110D197F9; address internal marketing_receiver = 0x7c7279B16F7886E9f5D4bF588C777A27a36b5639; address internal liquidity_receiver = 0x7c7279B16F7886E9f5D4bF588C777A27a36b5639; address internal staking_receiver = 0x7c7279B16F7886E9f5D4bF588C777A27a36b5639; event Deposit(address indexed account, uint256 indexed amount, uint256 indexed timestamp); event Withdraw(address indexed account, uint256 indexed amount, uint256 indexed timestamp); event Compound(address indexed account, uint256 ethAmount, uint256 indexed timestamp); event SetStakingAddress(address indexed stakingAddress, uint256 indexed timestamp); event SetisBot(address indexed account, bool indexed isBot, uint256 indexed timestamp); event ExcludeFromFees(address indexed account, bool indexed isExcluded, uint256 indexed timestamp); event SetDividendExempt(address indexed account, bool indexed isExempt, uint256 indexed timestamp); event SetInternalAddresses(address indexed marketing, address indexed liquidity, address indexed development, uint256 timestamp); event SetDistributionCriteria(uint256 indexed minPeriod, uint256 indexed minDistribution, uint256 indexed distributorGas, uint256 timestamp); event SetParameters(uint256 indexed maxTxAmount, uint256 indexed maxWalletToken, uint256 indexed maxTransfer, uint256 timestamp); event SetSwapBackSettings(uint256 indexed swapAmount, uint256 indexed swapThreshold, uint256 indexed swapMinAmount, uint256 timestamp); event SetStructure(uint256 indexed total, uint256 indexed sell, uint256 transfer, uint256 indexed timestamp); event CreateLiquidity(uint256 indexed tokenAmount, uint256 indexed ETHAmount, address indexed wallet, uint256 timestamp); constructor() Ownable(msg.sender) { IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH()); router = _router; pair = _pair; token_receiver = address(this); isFeeExempt[address(this)] = true; isFeeExempt[liquidity_receiver] = true; isFeeExempt[marketing_receiver] = true; isFeeExempt[msg.sender] = true; isDividendExempt[address(pair)] = true; isDividendExempt[address(msg.sender)] = false; isDividendExempt[address(this)] = true; isDividendExempt[address(DEAD)] = true; isDividendExempt[address(0)] = true; _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } receive() external payable {} function name() public pure returns (string memory) {return _name;} function symbol() public pure returns (string memory) {return _symbol;} function decimals() public pure returns (uint8) {return _decimals;} function startTrading() external onlyOwner {tradingAllowed = true;} function getOwner() external view override returns (address) { return owner; } function totalSupply() public view override returns (uint256) {return _totalSupply;} function balanceOf(address account) public view override returns (uint256) {return _balances[account];} function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;} function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];} function isCont(address addr) internal view returns (bool) {uint size; assembly { size := extcodesize(addr) } return size > 0; } function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;} function availableBalance(address wallet) public view returns (uint256) {return _balances[wallet].sub(amountStaked[wallet]);} function circulatingSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));} function preTxCheck(address sender, address recipient, uint256 amount) internal view { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount <= balanceOf(sender),"You are trying to transfer more than your balance"); } function _transfer(address sender, address recipient, uint256 amount) private { preTxCheck(sender, recipient, amount); checkTradingAllowed(sender, recipient); checkMaxWallet(sender, recipient, amount); checkTxLimit(sender, recipient, amount); checkTradeDelay(sender, recipient); swapbackCounters(sender, recipient); swapBack(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount); uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount; _balances[recipient] = _balances[recipient].add(amountReceived); emit Transfer(sender, recipient, amountReceived); processRewards(sender, recipient); } function internalDeposit(address sender, uint256 amount) internal { require(amount <= _balances[sender].sub(amountStaked[sender]), "ERC20: Cannot stake more than available balance"); stakingContract.stakingDeposit(sender, amount); amountStaked[sender] = amountStaked[sender].add(amount); totalStaked = totalStaked.add(amount); emit Deposit(sender, amount, block.timestamp); } function deposit(uint256 amount) override external { internalDeposit(msg.sender, amount); } function withdraw(uint256 amount) override external { require(amount <= amountStaked[msg.sender], "ERC20: Cannot unstake more than amount staked"); stakingContract.stakingWithdraw(msg.sender, amount); amountStaked[msg.sender] = amountStaked[msg.sender].sub(amount); totalStaked = totalStaked.sub(amount); emit Withdraw(msg.sender, amount, block.timestamp); } function compound() override external { uint256 initialBalance = address(this).balance; uint256 initialToken = balanceOf(msg.sender); stakingContract.stakingClaimToCompound(msg.sender, address(this)); uint256 afterBalance = address(this).balance.sub(initialBalance); swapETHForTokens(afterBalance, address(this), msg.sender); uint256 afterToken = balanceOf(msg.sender).sub(initialToken); internalDeposit(msg.sender, afterToken); emit Compound(msg.sender, afterBalance, block.timestamp); } function setStakingAddress(address _staking) external onlyOwner { stakingContract = stakeIntegration(_staking); isFeeExempt[_staking] = true; emit SetStakingAddress(_staking, block.timestamp); } function setStructure(uint256 _liquidity, uint256 _marketing, uint256 _token, uint256 _rewards, uint256 _staking, uint256 _development, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner { liquidityFee = _liquidity; marketingFee = _marketing; tokenFee = _token; rewardsFee = _rewards; stakingFee = _staking; developmentFee = _development; totalFee = _total; sellFee = _sell; transferFee = _trans; require(totalFee <= denominator.div(5) && sellFee <= denominator.div(5) && tokenFee <= denominator.div(5) && transferFee <= denominator.div(5), "totalFee and sellFee cannot be more than 20%"); emit SetStructure(_total, _sell, _trans, block.timestamp); } function setisBot(address _address, bool _enabled) external onlyOwner { require(_address != address(pair) && _address != address(router) && _address != address(this) && _address != address(DEAD) && _address != address(token_receiver), "Ineligible Address"); isBot[_address] = _enabled; emit SetisBot(_address, _enabled, block.timestamp); } function setParameters(uint256 _buy, uint256 _trans, uint256 _wallet) external onlyOwner { uint256 newTx = (totalSupply() * _buy) / 10000; uint256 newTransfer = (totalSupply() * _trans) / 10000; uint256 newWallet = (totalSupply() * _wallet) / 10000; uint256 limit = totalSupply().mul(5).div(1000); require(newTx >= limit && newTransfer >= limit && newWallet >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%"); _maxTxAmount = newTx; _maxSellAmount = newTransfer; _maxWalletToken = newWallet; emit SetParameters(newTx, newWallet, newTransfer, block.timestamp); } function checkTradingAllowed(address sender, address recipient) internal view { if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "tradingAllowed");} } function checkMaxWallet(address sender, address recipient, uint256 amount) internal view { if(!isFeeExempt[sender] && !isFeeExempt[recipient] && recipient != address(pair) && recipient != address(DEAD)){ require((_balances[recipient].add(amount)) <= _maxWalletToken, "Exceeds maximum wallet amount.");} } function swapbackCounters(address sender, address recipient) internal { if(recipient == pair && !isFeeExempt[sender] && !liquidityAdd){swapTimes += uint256(1);} } function checkTxLimit(address sender, address recipient, uint256 amount) internal view { if(amountStaked[sender] > uint256(0)){require((amount.add(amountStaked[sender])) <= _balances[sender], "ERC20: Exceeds maximum allowed not currently staked.");} if(sender != pair){require(amount <= _maxSellAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");} require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded"); } function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 _minTokenAmount) external onlyOwner { swapAmount = _swapAmount; swapThreshold = _swapThreshold; minTokenAmount = _minTokenAmount; emit SetSwapBackSettings(_swapAmount, _swapThreshold, _minTokenAmount, block.timestamp); } function setInternalAddresses(address _marketing, address _liquidity, address _development, address _staking, address _token) external onlyOwner { marketing_receiver = _marketing; liquidity_receiver = _liquidity; development_receiver = _development; staking_receiver = _staking; token_receiver = _token; isFeeExempt[_marketing] = true; isFeeExempt[_liquidity] = true; isFeeExempt[_development] = true; isFeeExempt[_staking] = true; isFeeExempt[_token] = true; emit SetInternalAddresses(_marketing, _liquidity, _development, block.timestamp); } function checkTradeDelay(address sender, address recipient) internal { if(transferDelayEnabled && !isFeeExempt[sender] && !isFeeExempt[recipient] && recipient != address(pair) && recipient != address(DEAD) && recipient != address(router)){ require(lastTransferTimestamp[tx.origin] < block.number, "ERC20: Transfer Delay enabled. Only one purchase per block allowed."); lastTransferTimestamp[tx.origin] = block.number;} } function setTransferDelay(bool enabled) external onlyOwner { transferDelayEnabled = enabled; } function setisExempt(address _address, bool _enabled) external onlyOwner { isFeeExempt[_address] = _enabled; emit ExcludeFromFees(_address, _enabled, block.timestamp); } function swapAndLiquify(uint256 tokens) private lockTheSwap { uint256 _denominator = (liquidityFee.add(1).add(marketingFee).add(developmentFee).add(rewardsFee).add(stakingFee)).mul(2); uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator); uint256 toSwap = tokens.sub(tokensToAddLiquidityWith); uint256 initialBalance = address(this).balance; swapTokensForETH(toSwap); uint256 deltaBalance = address(this).balance.sub(initialBalance); uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee)); uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee); if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith, liquidity_receiver); } uint256 marketingAmount = unitBalance.mul(2).mul(marketingFee); if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount);} uint256 rewardsAmount = unitBalance.mul(2).mul(rewardsFee); if(rewardsAmount > 0){depositRewards(rewardsAmount);} uint256 stakingAmount = unitBalance.mul(2).mul(stakingFee); if(stakingAmount > 0){payable(staking_receiver).transfer(stakingAmount);} uint256 excessAmount = address(this).balance; if(excessAmount > uint256(0)){payable(development_receiver).transfer(excessAmount);} } function addLiquidity(uint256 tokenAmount, uint256 ETHAmount, address receiver) private { _approve(address(this), address(router), tokenAmount); router.addLiquidityETH{value: ETHAmount}( address(this), tokenAmount, 0, 0, address(receiver), block.timestamp); } function swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tokenAmount); router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp); } function swapETHForTokens(uint256 amountETH, address token, address recipient) internal { address[] memory path = new address[](2); path[0] = router.WETH(); path[1] = address(token); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountETH}( 0, path, address(recipient), block.timestamp); } function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) { bool aboveMin = amount >= minTokenAmount; bool aboveThreshold = balanceOf(address(this)) >= swapThreshold; return !swapping && swapEnabled && tradingAllowed && aboveMin && !isFeeExempt[sender] && recipient == pair && swapTimes >= swapAmount && aboveThreshold && !liquidityAdd; } function swapBack(address sender, address recipient, uint256 amount) internal { if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = uint256(0);} } function shouldTakeFee(address sender, address recipient) internal view returns (bool) { return !isFeeExempt[sender] && !isFeeExempt[recipient]; } function getTotalFee(address sender, address recipient) internal view returns (uint256) { if(isBot[sender] || isBot[recipient]){return denominator.sub(uint256(100));} if(recipient == pair && sellFee > uint256(0)){return sellFee.add(tokenFee);} if(sender == pair && totalFee > uint256(0)){return totalFee.add(tokenFee);} return transferFee; } function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) { if(getTotalFee(sender, recipient) > 0 && !liquidityAdd){ uint256 feeAmount = amount.div(denominator).mul(getTotalFee(sender, recipient)); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); if(tokenFee > uint256(0)){_transfer(address(this), address(token_receiver), amount.div(denominator).mul(tokenFee));} return amount.sub(feeAmount);} return amount; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function _approve(address owner, address spender, uint256 amount) private { 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 setisDividendExempt(address holder, bool exempt) external onlyOwner { isDividendExempt[holder] = exempt; if(exempt){setShare(holder, 0);} else{setShare(holder, balanceOf(holder));} emit SetDividendExempt(holder, exempt, block.timestamp); } function processRewards(address sender, address recipient) internal { if(shares[recipient].amount > 0){distributeDividend(recipient, recipient);} if(recipient == pair && shares[sender].amount > 0){excessDividends = excessDividends.add(getUnpaidEarnings(sender));} if(!isDividendExempt[sender]){setShare(sender, balanceOf(sender));} if(!isDividendExempt[recipient]){setShare(recipient, balanceOf(recipient));} processAuto(distributorGas); } function setShare(address shareholder, uint256 amount) internal { if(amount > 0 && shares[shareholder].amount == 0){addShareholder(shareholder);} else if(amount == 0 && shares[shareholder].amount > 0){removeShareholder(shareholder); } totalShares = totalShares.sub(shares[shareholder].amount).add(amount); shares[shareholder].amount = amount; shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } function depositRewards(uint256 amountETH) internal { uint256 balanceBefore = IERC20(reward).balanceOf(address(this)); swapETHForTokens(amountETH, reward, address(this)); uint256 amount = IERC20(reward).balanceOf(address(this)).sub(balanceBefore); totalDividends = totalDividends.add(amount); currentDividends = currentDividends.add(amount); dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)); } function processAuto(uint256 gas) internal { uint256 shareholderCount = shareholders.length; if(shareholderCount == 0) { return; } uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; while(gasUsed < gas && iterations < shareholderCount) { if(currentIndex >= shareholderCount){currentIndex = 0;} address current = shareholders[currentIndex]; if(shouldDistribute(current)){ distributeDividend(current, current);} gasUsed = gasUsed.add(gasLeft.sub(gasleft())); gasLeft = gasleft(); currentIndex++; iterations++; } } function transferERC20(address _address, uint256 _amount) external { IERC20(_address).transfer(development_receiver, _amount); } function transferBalance(uint256 _amount) external { payable(development_receiver).transfer(_amount); } function setExcess() external { IERC20(reward).transfer(development_receiver, excessDividends); currentDividends = currentDividends.sub(excessDividends); excessDividends = uint256(0); } function setTokenAddress(address _address) external onlyOwner { token_receiver = _address; } function setRewardAddress(address _address) external onlyOwner { reward = _address; } function shouldDistribute(address shareholder) internal view returns (bool) { return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution; } function totalRewardsDistributed(address _wallet) external view returns (uint256) { address shareholder = _wallet; return uint256(shares[shareholder].totalRealised); } function _claimDividend() external { if(shouldDistribute(msg.sender)){distributeDividend(msg.sender, msg.sender);} } function distributeDividend(address shareholder, address recipient) internal { if(shares[shareholder].amount == 0){ return; } uint256 amount = getUnpaidEarnings(shareholder); if(amount > 0){ totalDistributed = totalDistributed.add(amount); IERC20(reward).transfer(recipient, amount); currentDividends = currentDividends.sub(amount); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount); shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);} } function getUnpaidEarnings(address shareholder) public view returns (uint256) { if(shares[shareholder].amount == 0){ return 0; } uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount); uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded; if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; } return shareholderTotalDividends.sub(shareholderTotalExcluded); } function getCumulativeDividends(uint256 share) internal view returns (uint256) { return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor); } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); } function removeShareholder(address shareholder) internal { shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1]; shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder]; shareholders.pop(); } function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _distributorGas) external onlyOwner { minPeriod = _minPeriod; minDistribution = _minDistribution; distributorGas = _distributorGas; emit SetDistributionCriteria(_minPeriod, _minDistribution, _distributorGas, block.timestamp); } function createLiquidity(uint256 tokenAmount) payable public liquidityCreation { _approve(msg.sender, address(this), tokenAmount); _approve(msg.sender, address(router), tokenAmount); _transfer(msg.sender, address(this), tokenAmount); _approve(address(this), address(router), tokenAmount); addLiquidity(tokenAmount, msg.value, msg.sender); emit CreateLiquidity(tokenAmount, msg.value, msg.sender, block.timestamp); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Compound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"ETHAmount","type":"uint256"},{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"CreateLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExcluded","type":"bool"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"minPeriod","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"minDistribution","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"distributorGas","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetDistributionCriteria","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExempt","type":"bool"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetDividendExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketing","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"development","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetInternalAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"maxWalletToken","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"maxTransfer","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetParameters","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stakingAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetStakingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transfer","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetStructure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"swapAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"swapThreshold","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"swapMinAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetSwapBackSettings","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isBot","type":"bool"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetisBot","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":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"_claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"amountStaked","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":"wallet","type":"address"}],"name":"availableBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"createLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"currentDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"excessDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setExcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_development","type":"address"},{"internalType":"address","name":"_staking","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"setInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setRewardAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_token","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_staking","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"_minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052620000126009600a620005d1565b6200002290633b9aca00620005e9565b6001556127106001546096620000399190620005e9565b62000045919062000603565b60025561271060015460966200005c9190620005e9565b62000068919062000603565b60035561271060015461012c620000809190620005e9565b6200008c919062000603565b600455600b805460ff60a01b191690556000600c81905561012c600d819055610190600e55600f5560108190556011556107d06012819055611d4c6013556014556127106015556016805460ff19166001908117909155600260185554620186a090620000fc906101f4620005e9565b62000108919062000603565b601a55620186a0600154600a620001209190620005e9565b6200012c919062000603565b601b55601d805460ff191660019081179091556ec097ce7bc90715b34b9f1000000000602855610384602e55633b9aca00602f55603055603180546001600160a01b0319908116732260fac5e5542a773aa44fbcfedf7c193bc2c5991790915560328054821673dcc0d2233baaf1fa983cc83fe705f9d110d197f9179055603380548216737c7279b16f7886e9f5d4bf588c777a27a36b56399081179091556034805483168217905560358054909216179055348015620001ec57600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa15801562000254573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027a919062000626565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ee919062000626565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200033c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000362919062000626565b600a80546001600160a01b038581166001600160a01b031992831617909255600b8054848416908316178155602080549092163090811783556000818152600784526040808220805460ff1990811660019081179092556034548816845282842080548216831790556033548816845282842080548216831790553380855283852080548316841790559554909716835260088652818320805488168217905584835281832080548816905592825280822080548716841790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548716841790557f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c780549096168317909555905482825260058452848220819055935193845293945092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000651565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000513578160001904821115620004f757620004f7620004bc565b808516156200050557918102915b93841c9390800290620004d7565b509250929050565b6000826200052c57506001620005cb565b816200053b57506000620005cb565b81600181146200055457600281146200055f576200057f565b6001915050620005cb565b60ff841115620005735762000573620004bc565b50506001821b620005cb565b5060208310610133831016604e8410600b8410161715620005a4575081810a620005cb565b620005b08383620004d2565b8060001904821115620005c757620005c7620004bc565b0290505b92915050565b6000620005e260ff8416836200051b565b9392505050565b8082028115828204841417620005cb57620005cb620004bc565b6000826200062157634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200063957600080fd5b81516001600160a01b0381168114620005e257600080fd5b61393680620006616000396000f3fe60806040526004361061036f5760003560e01c80637d1db4a5116101c6578063c876d0b9116100f7578063ef43b02b11610095578063f4e0d9ac1161006f578063f4e0d9ac14610a5f578063f69e204614610a7f578063f7448a3114610a94578063ffd49c8414610ab457600080fd5b8063ef43b02b14610a09578063efca2eed14610a29578063f2fde38b14610a3f57600080fd5b8063ce7c2ac2116100d1578063ce7c2ac21461091f578063dd62ed3e14610976578063e94dd17c146109bc578063ef40a670146109dc57600080fd5b8063c876d0b9146108b7578063c942435d146108d1578063ca89b899146108e657600080fd5b8063997664d711610164578063a8aa1b311161013e578063a8aa1b3114610841578063a9059cbb14610861578063b6b55f2514610881578063c0c49394146108a157600080fd5b8063997664d7146107eb5780639fb05d3714610801578063a0821be31461082157600080fd5b80638a60c4c1116101a05780638a60c4c1146107685780638c41180e146107885780639358928b146107a857806395d89b41146107bd57600080fd5b80637d1db4a51461071e578063817b1cd214610734578063893d20e81461074a57600080fd5b806334c5d2ce116102a05780635e00e6791161023e57806377c325d61161021857806377c325d6146106bf57806378026a22146106df57806378109e54146106f25780637cca52fe1461070857600080fd5b80635e00e6791461066957806360e719621461068957806370a082311461069f57600080fd5b80633f4218e01161027a5780633f4218e0146105d35780634355855a1461060357806348ff2b8b146106335780634fab0ae81461065357600080fd5b806334c5d2ce146105885780633773eafb146105a85780633a98ef39146105bd57600080fd5b806326a4e8d21161030d5780632e1a7d4d116102e75780632e1a7d4d146104fd5780632f54bf6e1461051d578063313ce5671461054c57806334bbb3fd1461056857600080fd5b806326a4e8d2146104a857806328fd3198146104c8578063293230b8146104e857600080fd5b80630ca61cb1116103495780630ca61cb11461041957806318160ddd1461043b578063228cb7331461045057806323b872dd1461048857600080fd5b806306fdde031461037b57806308e20e1f146103c5578063095ea7b3146103e957600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5060408051808201909152600f81526e426974636f696e2042756e6e69657360881b60208201525b6040516103bc9190613434565b60405180910390f35b3480156103d157600080fd5b506103db60255481565b6040519081526020016103bc565b3480156103f557600080fd5b50610409610404366004613497565b610aca565b60405190151581526020016103bc565b34801561042557600080fd5b506104396104343660046134c3565b610ae1565b005b34801561044757600080fd5b506001546103db565b34801561045c57600080fd5b50603154610470906001600160a01b031681565b6040516001600160a01b0390911681526020016103bc565b34801561049457600080fd5b506104096104a33660046134ef565b610b62565b3480156104b457600080fd5b506104396104c3366004613530565b610bcc565b3480156104d457600080fd5b506103db6104e3366004613530565b610c18565b3480156104f457600080fd5b50610439610ca3565b34801561050957600080fd5b5061043961051836600461354d565b610ce2565b34801561052957600080fd5b50610409610538366004613530565b6000546001600160a01b0391821691161490565b34801561055857600080fd5b50604051600981526020016103bc565b34801561057457600080fd5b50610439610583366004613566565b610e28565b34801561059457600080fd5b506104396105a33660046134c3565b610f8b565b3480156105b457600080fd5b5061043961111f565b3480156105c957600080fd5b506103db60225481565b3480156105df57600080fd5b506104096105ee366004613530565b60076020526000908152604090205460ff1681565b34801561060f57600080fd5b5061040961061e366004613530565b60086020526000908152604090205460ff1681565b34801561063f57600080fd5b5061043961064e3660046135d3565b6111b6565b34801561065f57600080fd5b506103db602f5481565b34801561067557600080fd5b50610439610684366004613530565b611235565b34801561069557600080fd5b506103db60305481565b3480156106ab57600080fd5b506103db6106ba366004613530565b611281565b3480156106cb57600080fd5b506104396106da36600461360c565b61129c565b6104396106ed36600461354d565b6112d9565b3480156106fe57600080fd5b506103db60045481565b34801561071457600080fd5b506103db60035481565b34801561072a57600080fd5b506103db60025481565b34801561074057600080fd5b506103db601f5481565b34801561075657600080fd5b506000546001600160a01b0316610470565b34801561077457600080fd5b5061043961078336600461354d565b61138c565b34801561079457600080fd5b506104396107a33660046135d3565b6113ca565b3480156107b457600080fd5b506103db6114fc565b3480156107c957600080fd5b50604080518082019091526005815264425443425960d81b60208201526103af565b3480156107f757600080fd5b506103db60235481565b34801561080d57600080fd5b5061043961081c366004613629565b61152d565b34801561082d57600080fd5b506103db61083c366004613530565b611646565b34801561084d57600080fd5b50600b54610470906001600160a01b031681565b34801561086d57600080fd5b5061040961087c366004613497565b611673565b34801561088d57600080fd5b5061043961089c36600461354d565b611680565b3480156108ad57600080fd5b506103db60265481565b3480156108c357600080fd5b50601d546104099060ff1681565b3480156108dd57600080fd5b5061043961168d565b3480156108f257600080fd5b506103db610901366004613530565b6001600160a01b03166000908152602c602052604090206002015490565b34801561092b57600080fd5b5061095b61093a366004613530565b602c6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103bc565b34801561098257600080fd5b506103db61099136600461369a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156109c857600080fd5b506104396109d73660046134c3565b6116a7565b3480156109e857600080fd5b506103db6109f7366004613530565b601e6020526000908152604090205481565b348015610a1557600080fd5b50610439610a243660046135d3565b611716565b348015610a3557600080fd5b506103db60245481565b348015610a4b57600080fd5b50610439610a5a366004613530565b6117cd565b348015610a6b57600080fd5b50610439610a7a366004613530565b61184b565b348015610a8b57600080fd5b506104396118d7565b348015610aa057600080fd5b50610439610aaf366004613497565b6119c1565b348015610ac057600080fd5b506103db602e5481565b6000610ad7338484611a3d565b5060015b92915050565b6000546001600160a01b03163314610b145760405162461bcd60e51b8152600401610b0b906136c8565b60405180910390fd5b602e839055602f82905560308190556040514281528190839085907fd765fdc0257a3e4df80d9f57c58a38a260ed3938c092fc6ce8b3be01b402a23c906020015b60405180910390a4505050565b6000610b6f848484611b61565b610bc18433610bbc856040518060600160405280602881526020016138d9602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611c9b565b611a3d565b5060015b9392505050565b6000546001600160a01b03163314610bf65760405162461bcd60e51b8152600401610b0b906136c8565b602080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152602c60205260408120548103610c3f57506000919050565b6001600160a01b0382166000908152602c6020526040812054610c6190611cc7565b6001600160a01b0384166000908152602c6020526040902060010154909150808211610c91575060009392505050565b610c9b8282611ce4565b949350505050565b6000546001600160a01b03163314610ccd5760405162461bcd60e51b8152600401610b0b906136c8565b600b805460ff60a01b1916600160a01b179055565b336000908152601e6020526040902054811115610d575760405162461bcd60e51b815260206004820152602d60248201527f45524332303a2043616e6e6f7420756e7374616b65206d6f7265207468616e2060448201526c185b5bdd5b9d081cdd185ad959609a1b6064820152608401610b0b565b60215460405163d8a9bf2960e01b8152336004820152602481018390526001600160a01b039091169063d8a9bf2990604401600060405180830381600087803b158015610da357600080fd5b505af1158015610db7573d6000803e3d6000fd5b5050336000908152601e6020526040902054610dd69250905082611ce4565b336000908152601e6020526040902055601f54610df39082611ce4565b601f556040514290829033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56890600090a450565b6000546001600160a01b03163314610e525760405162461bcd60e51b8152600401610b0b906136c8565b600c899055600d8890556011879055600e8690556010859055600f849055601283905560138290556014819055601554610e8d906005611cf0565b60125411158015610ead5750601554610ea7906005611cf0565b60135411155b8015610ec85750601554610ec2906005611cf0565b60115411155b8015610ee35750601554610edd906005611cf0565b60145411155b610f445760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b6064820152608401610b0b565b4282847fdddb43af0ad29e5d9d3cb393fd94e8f11ac2c069da19545bac6ee6baf3ddc98984604051610f7891815260200190565b60405180910390a4505050505050505050565b6000546001600160a01b03163314610fb55760405162461bcd60e51b8152600401610b0b906136c8565b600061271084610fc460015490565b610fce91906136fe565b610fd89190613715565b9050600061271084610fe960015490565b610ff391906136fe565b610ffd9190613715565b905060006127108461100e60015490565b61101891906136fe565b6110229190613715565b905060006110466103e8611040600561103a60015490565b90611cfc565b90611cf0565b90508084101580156110585750808310155b80156110645750808210155b6110ce5760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610b0b565b6002849055600383905560048290556040514281528390839086907fbd5acdd9cd7346c04cee822893f228a65a948bc41357408255ab8f36c446349f9060200160405180910390a450505050505050565b60315460325460265460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015611178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119c9190613737565b506026546025546111ac91611ce4565b6025556000602655565b6000546001600160a01b031633146111e05760405162461bcd60e51b8152600401610b0b906136c8565b6001600160a01b038216600081815260076020526040808220805460ff19168515159081179091559051429391927ff61420caae4661cdd9554a2c8b6c89fc9f30f94abccb1da76abb2ec99783821191a45050565b6000546001600160a01b0316331461125f5760405162461bcd60e51b8152600401610b0b906136c8565b603180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526005602052604090205490565b6000546001600160a01b031633146112c65760405162461bcd60e51b8152600401610b0b906136c8565b601d805460ff1916911515919091179055565b6019805461ff0019166101001790556112f3333083611a3d565b600a5461130b9033906001600160a01b031683611a3d565b611316333083611b61565b600a5461132e9030906001600160a01b031683611a3d565b611339813433611d08565b336001600160a01b031634827f89d4d2ecc95200a080f69cea2131862ff53c70739a5db9ab0373fcdd09da746d4260405161137691815260200190565b60405180910390a4506019805461ff0019169055565b6032546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156113c6573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146113f45760405162461bcd60e51b8152600401610b0b906136c8565b600b546001600160a01b038381169116148015906114205750600a546001600160a01b03838116911614155b801561143557506001600160a01b0382163014155b801561144c57506001600160a01b03821661dead14155b801561146657506020546001600160a01b03838116911614155b6114a75760405162461bcd60e51b8152602060048201526012602482015271496e656c696769626c65204164647265737360701b6044820152606401610b0b565b6001600160a01b038216600081815260096020526040808220805460ff19168515159081179091559051429391927fd1c5980b68c66e201f3a2b571fb898fa61a65a2c74c60690855730f86165d00d91a45050565b600061152861150b6000611281565b61152261151961dead611281565b60015490611ce4565b90611ce4565b905090565b6000546001600160a01b031633146115575760405162461bcd60e51b8152600401610b0b906136c8565b603380546001600160a01b03199081166001600160a01b038881169182179093556034805483168885169081179091556032805484168886169081179091556035805485168887169081179091556020805490951695871695861785556000848152600786526040808220805460ff1990811660019081179092558684528284208054821683179055858452828420805482168317905593835281832080548516821790559782529081902080549092169096179055935142815290927f358f3926f41536f5fa6926b5b6945502e5fdfb85b1876c473d06606ed0fae9ca910160405180910390a45050505050565b6001600160a01b0381166000908152601e60209081526040808320546005909252822054610adb91611ce4565b6000610ad7338484611b61565b61168a3382611dbb565b50565b61169633611f3e565b156116a5576116a53333611f83565b565b6000546001600160a01b031633146116d15760405162461bcd60e51b8152600401610b0b906136c8565b6018839055601a829055601b8190556040514281528190839085907f3af591b474e55c209cfbc3da369b6762366e3015997314ac10bd5c3198d26fb390602001610b55565b6000546001600160a01b031633146117405760405162461bcd60e51b8152600401610b0b906136c8565b6001600160a01b0382166000908152600860205260409020805460ff1916821580159190911790915561177d576117788260006120cf565b61178f565b61178f8261178a84611281565b6120cf565b42811515836001600160a01b03167f9d5aa14a9b3912640cacc1223833fffedd9010feefa1a219300eb732a86ce8ba60405160405180910390a45050565b6000546001600160a01b031633146117f75760405162461bcd60e51b8152600401610b0b906136c8565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b031633146118755760405162461bcd60e51b8152600401610b0b906136c8565b602180546001600160a01b0319166001600160a01b038316908117909155600081815260076020526040808220805460ff19166001179055514292917f23481943b6ef3dff645af874fbb24781bf224a02312f9cb308880e03e0a9ddee91a350565b4760006118e333611281565b6021546040516334c5cbab60e11b81523360048201523060248201529192506001600160a01b03169063698b975690604401600060405180830381600087803b15801561192f57600080fd5b505af1158015611943573d6000803e3d6000fd5b50505050600061195c8347611ce490919063ffffffff16565b9050611969813033612209565b60006119788361152233611281565b90506119843382611dbb565b604051828152429033907f0e311a2c6dbfb0153ec3a8a5bdca09070b3e5f60768fdc10a20453f38d1868739060200160405180910390a350505050565b60325460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af1158015611a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a389190613737565b505050565b6001600160a01b038316611a9f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b0b565b6001600160a01b038216611b005760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b0b565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611b6c83838361235c565b611b768383612494565b611b81838383612525565b611b8c838383612611565b611b9683836127f7565b611ba0838361293d565b611bab8383836129a8565b6001600160a01b038316600090815260056020526040902054611bce9082611ce4565b6001600160a01b038416600090815260056020526040812091909155611bf484846129cd565b611bfe5781611c09565b611c09848484612a13565b6001600160a01b038416600090815260056020526040902054909150611c2f9082612b1e565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c839085815260200190565b60405180910390a3611c958484612b2a565b50505050565b60008184841115611cbf5760405162461bcd60e51b8152600401610b0b9190613434565b505050900390565b6000610adb60285461104060275485611cfc90919063ffffffff16565b6000610bc58284613754565b6000610bc58284613715565b6000610bc582846136fe565b600a54611d209030906001600160a01b031685611a3d565b600a5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0383811660848301524260a48301529091169063f305d71990849060c40160606040518083038185885af1158015611d8e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611db39190613767565b505050505050565b6001600160a01b0382166000908152601e6020908152604080832054600590925290912054611de991611ce4565b811115611e505760405162461bcd60e51b815260206004820152602f60248201527f45524332303a2043616e6e6f74207374616b65206d6f7265207468616e20617660448201526e61696c61626c652062616c616e636560881b6064820152608401610b0b565b60215460405163773a0f0960e01b81526001600160a01b038481166004830152602482018490529091169063773a0f0990604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b5050506001600160a01b0383166000908152601e6020526040902054611ed9915082612b1e565b6001600160a01b0383166000908152601e6020526040902055601f54611eff9082612b1e565b601f55604051429082906001600160a01b038516907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1590600090a45050565b602e546001600160a01b0382166000908152602b602052604081205490914291611f689190613795565b108015610adb5750602f54611f7c83610c18565b1192915050565b6001600160a01b0382166000908152602c60205260408120549003611fa6575050565b6000611fb183610c18565b90508015611a3857602454611fc69082612b1e565b602490815560315460405163a9059cbb60e01b81526001600160a01b03858116600483015292810184905291169063a9059cbb906044016020604051808303816000875af115801561201c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120409190613737565b5060255461204e9082611ce4565b6025556001600160a01b0383166000908152602b60209081526040808320429055602c9091529020600201546120849082612b1e565b6001600160a01b0384166000908152602c602052604090206002810191909155546120ae90611cc7565b6001600160a01b0384166000908152602c6020526040902060010155505050565b6000811180156120f557506001600160a01b0382166000908152602c6020526040902054155b1561215b57602980546001600160a01b0384166000818152602a60205260408120839055600183018455929092527fcb7c14ce178f56e2e8d86ab33ebc0ae081ba8556a00cd122038841867181caac0180546001600160a01b031916909117905561218e565b8015801561218057506001600160a01b0382166000908152602c602052604090205415155b1561218e5761218e82612c09565b6001600160a01b0382166000908152602c60205260409020546022546121bf9183916121b991611ce4565b90612b1e565b6022556001600160a01b0382166000908152602c602052604090208190556121e681611cc7565b6001600160a01b039092166000908152602c602052604090206001019190915550565b6040805160028082526060820183526000926020830190803683375050600a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612273573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229791906137a8565b816000815181106122aa576122aa6137c5565b60200260200101906001600160a01b031690816001600160a01b03168152505082816001815181106122de576122de6137c5565b6001600160a01b039283166020918202929092010152600a5460405163b6f9de9560e01b815291169063b6f9de959086906123249060009086908890429060040161381f565b6000604051808303818588803b15801561233d57600080fd5b505af1158015612351573d6000803e3d6000fd5b505050505050505050565b6001600160a01b0383166123c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b0b565b6001600160a01b0382166124225760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b0b565b61242b83611281565b811115611a385760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b0b565b6001600160a01b03821660009081526007602052604090205460ff161580156124d657506001600160a01b03811660009081526007602052604090205460ff16155b156113c657600b54600160a01b900460ff166113c65760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b6044820152606401610b0b565b6001600160a01b03831660009081526007602052604090205460ff1615801561256757506001600160a01b03821660009081526007602052604090205460ff16155b80156125815750600b546001600160a01b03838116911614155b801561259857506001600160a01b03821661dead14155b15611a38576004546001600160a01b0383166000908152600560205260409020546125c39083612b1e565b1115611a385760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610b0b565b6001600160a01b0383166000908152601e6020526040902054156126ca576001600160a01b038316600090815260056020908152604080832054601e9092529091205461265f908390612b1e565b11156126ca5760405162461bcd60e51b815260206004820152603460248201527f45524332303a2045786365656473206d6178696d756d20616c6c6f776564206e60448201527337ba1031bab93932b73a363c9039ba30b5b2b21760611b6064820152608401610b0b565b600b546001600160a01b0384811691161461276b576003548111158061270857506001600160a01b03831660009081526007602052604090205460ff165b8061272b57506001600160a01b03821660009081526007602052604090205460ff165b61276b5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b0b565b6002548111158061279457506001600160a01b03831660009081526007602052604090205460ff165b806127b757506001600160a01b03821660009081526007602052604090205460ff165b611a385760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b0b565b601d5460ff16801561282257506001600160a01b03821660009081526007602052604090205460ff16155b801561284757506001600160a01b03811660009081526007602052604090205460ff16155b80156128615750600b546001600160a01b03828116911614155b801561287857506001600160a01b03811661dead14155b80156128925750600a546001600160a01b03828116911614155b156113c657326000908152601c602052604090205443116129275760405162461bcd60e51b815260206004820152604360248201527f45524332303a205472616e736665722044656c617920656e61626c65642e204f60448201527f6e6c79206f6e652070757263686173652070657220626c6f636b20616c6c6f7760648201526232b21760e91b608482015260a401610b0b565b326000908152601c602052604090204390555050565b600b546001600160a01b03828116911614801561297357506001600160a01b03821660009081526007602052604090205460ff16155b80156129875750601954610100900460ff16155b156113c65760016017600082825461299f9190613795565b90915550505050565b6129b3838383612d1e565b15611a38576129c3601a54612de4565b6000601755505050565b6001600160a01b03821660009081526007602052604081205460ff16158015610bc55750506001600160a01b031660009081526007602052604090205460ff1615919050565b600080612a208585613007565b118015612a355750601954610100900460ff16155b15612b17576000612a57612a498686613007565b60155461103a908690611cf0565b30600090815260056020526040902054909150612a749082612b1e565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612ac59085815260200190565b60405180910390a360115415612b0557602054601154601554612b059230926001600160a01b0390911691612b00919061103a908990611cf0565b611b61565b612b0f8382611ce4565b915050610bc5565b5092915050565b6000610bc58284613795565b6001600160a01b0381166000908152602c602052604090205415612b5257612b528182611f83565b600b546001600160a01b038281169116148015612b8657506001600160a01b0382166000908152602c602052604090205415155b15612ba457612ba0612b9783610c18565b60265490612b1e565b6026555b6001600160a01b03821660009081526008602052604090205460ff16612bd157612bd18261178a84611281565b6001600160a01b03811660009081526008602052604090205460ff16612bfe57612bfe8161178a83611281565b6113c66030546130d0565b60298054612c1990600190613754565b81548110612c2957612c296137c5565b60009182526020808320909101546001600160a01b038481168452602a909252604090922054602980549290931692918110612c6757612c676137c5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152602a9182905260408120546029805491939291612cb390600190613754565b81548110612cc357612cc36137c5565b60009182526020808320909101546001600160a01b031683528201929092526040019020556029805480612cf957612cf9613854565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600080601b5483101590506000601a54612d3730611281565b601954911115915060ff16158015612d51575060165460ff165b8015612d665750600b54600160a01b900460ff165b8015612d6f5750815b8015612d9457506001600160a01b03861660009081526007602052604090205460ff16155b8015612dad5750600b546001600160a01b038681169116145b8015612dbd575060185460175410155b8015612dc65750805b8015612dda5750601954610100900460ff16155b9695505050505050565b6001601960006101000a81548160ff0219169083151502179055506000612e34600261103a6010546121b9600e546121b9600f546121b9600d546121b96001600c54612b1e90919063ffffffff16565b90506000612e5182611040600c5486611cfc90919063ffffffff16565b90506000612e5f8483611ce4565b905047612e6b8261319b565b6000612e774783611ce4565b90506000612e9a612e93600c5488611ce490919063ffffffff16565b8390611cf0565b90506000612eb3600c5483611cfc90919063ffffffff16565b90508015612ed457603454612ed490879083906001600160a01b0316611d08565b600d54600090612ee99061103a856002611cfc565b90508015612f2d576033546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612f2b573d6000803e3d6000fd5b505b600e54600090612f429061103a866002611cfc565b90508015612f5357612f53816132ed565b601054600090612f689061103a876002611cfc565b90508015612fac576035546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612faa573d6000803e3d6000fd5b505b478015612fef576032546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612fed573d6000803e3d6000fd5b505b50506019805460ff1916905550505050505050505050565b6001600160a01b03821660009081526009602052604081205460ff168061304657506001600160a01b03821660009081526009602052604090205460ff165b1561306057601554613059906064611ce4565b9050610adb565b600b546001600160a01b03838116911614801561307f57506000601354115b156130935760115460135461305991612b1e565b600b546001600160a01b0384811691161480156130b257506000601254115b156130c65760115460125461305991612b1e565b5060145492915050565b60295460008190036130e0575050565b6000805a905060005b84831080156130f757508381105b156131945783602d541061310b576000602d555b60006029602d5481548110613122576131226137c5565b6000918252602090912001546001600160a01b0316905061314281611f3e565b15613151576131518182611f83565b61316661315f5a8590611ce4565b8590612b1e565b93505a602d8054919450600061317b8361386a565b9190505550818061318b9061386a565b925050506130e9565b5050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131d0576131d06137c5565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061324d91906137a8565b81600181518110613260576132606137c5565b6001600160a01b039283166020918202929092010152600a546132869130911684611a3d565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac947906132bf908590600090869030904290600401613883565b600060405180830381600087803b1580156132d957600080fd5b505af1158015611db3573d6000803e3d6000fd5b6031546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015613336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335a91906138bf565b6031549091506133759083906001600160a01b031630612209565b6031546040516370a0823160e01b81523060048201526000916133e89184916001600160a01b0316906370a0823190602401602060405180830381865afa1580156133c4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152291906138bf565b6023549091506133f89082612b1e565b6023556025546134089082612b1e565b60255560225460285461342c91613423916110409085611cfc565b60275490612b1e565b602755505050565b600060208083528351808285015260005b8181101561346157858101830151858201604001528201613445565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461168a57600080fd5b600080604083850312156134aa57600080fd5b82356134b581613482565b946020939093013593505050565b6000806000606084860312156134d857600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561350457600080fd5b833561350f81613482565b9250602084013561351f81613482565b929592945050506040919091013590565b60006020828403121561354257600080fd5b8135610bc581613482565b60006020828403121561355f57600080fd5b5035919050565b60008060008060008060008060006101208a8c03121561358557600080fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b801515811461168a57600080fd5b600080604083850312156135e657600080fd5b82356135f181613482565b91506020830135613601816135c5565b809150509250929050565b60006020828403121561361e57600080fd5b8135610bc5816135c5565b600080600080600060a0868803121561364157600080fd5b853561364c81613482565b9450602086013561365c81613482565b9350604086013561366c81613482565b9250606086013561367c81613482565b9150608086013561368c81613482565b809150509295509295909350565b600080604083850312156136ad57600080fd5b82356136b881613482565b9150602083013561360181613482565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610adb57610adb6136e8565b60008261373257634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561374957600080fd5b8151610bc5816135c5565b81810381811115610adb57610adb6136e8565b60008060006060848603121561377c57600080fd5b8351925060208401519150604084015190509250925092565b80820180821115610adb57610adb6136e8565b6000602082840312156137ba57600080fd5b8151610bc581613482565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156138145781516001600160a01b0316875295820195908201906001016137ef565b509495945050505050565b84815260806020820152600061383860808301866137db565b6001600160a01b03949094166040830152506060015292915050565b634e487b7160e01b600052603160045260246000fd5b60006001820161387c5761387c6136e8565b5060010190565b85815284602082015260a0604082015260006138a260a08301866137db565b6001600160a01b0394909416606083015250608001529392505050565b6000602082840312156138d157600080fd5b505191905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212201d0facecc6318549f6cc2cee00223a1d6a86f6ff82278a2dfb48e5b8b362659764736f6c63430008120033
Deployed Bytecode
0x60806040526004361061036f5760003560e01c80637d1db4a5116101c6578063c876d0b9116100f7578063ef43b02b11610095578063f4e0d9ac1161006f578063f4e0d9ac14610a5f578063f69e204614610a7f578063f7448a3114610a94578063ffd49c8414610ab457600080fd5b8063ef43b02b14610a09578063efca2eed14610a29578063f2fde38b14610a3f57600080fd5b8063ce7c2ac2116100d1578063ce7c2ac21461091f578063dd62ed3e14610976578063e94dd17c146109bc578063ef40a670146109dc57600080fd5b8063c876d0b9146108b7578063c942435d146108d1578063ca89b899146108e657600080fd5b8063997664d711610164578063a8aa1b311161013e578063a8aa1b3114610841578063a9059cbb14610861578063b6b55f2514610881578063c0c49394146108a157600080fd5b8063997664d7146107eb5780639fb05d3714610801578063a0821be31461082157600080fd5b80638a60c4c1116101a05780638a60c4c1146107685780638c41180e146107885780639358928b146107a857806395d89b41146107bd57600080fd5b80637d1db4a51461071e578063817b1cd214610734578063893d20e81461074a57600080fd5b806334c5d2ce116102a05780635e00e6791161023e57806377c325d61161021857806377c325d6146106bf57806378026a22146106df57806378109e54146106f25780637cca52fe1461070857600080fd5b80635e00e6791461066957806360e719621461068957806370a082311461069f57600080fd5b80633f4218e01161027a5780633f4218e0146105d35780634355855a1461060357806348ff2b8b146106335780634fab0ae81461065357600080fd5b806334c5d2ce146105885780633773eafb146105a85780633a98ef39146105bd57600080fd5b806326a4e8d21161030d5780632e1a7d4d116102e75780632e1a7d4d146104fd5780632f54bf6e1461051d578063313ce5671461054c57806334bbb3fd1461056857600080fd5b806326a4e8d2146104a857806328fd3198146104c8578063293230b8146104e857600080fd5b80630ca61cb1116103495780630ca61cb11461041957806318160ddd1461043b578063228cb7331461045057806323b872dd1461048857600080fd5b806306fdde031461037b57806308e20e1f146103c5578063095ea7b3146103e957600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5060408051808201909152600f81526e426974636f696e2042756e6e69657360881b60208201525b6040516103bc9190613434565b60405180910390f35b3480156103d157600080fd5b506103db60255481565b6040519081526020016103bc565b3480156103f557600080fd5b50610409610404366004613497565b610aca565b60405190151581526020016103bc565b34801561042557600080fd5b506104396104343660046134c3565b610ae1565b005b34801561044757600080fd5b506001546103db565b34801561045c57600080fd5b50603154610470906001600160a01b031681565b6040516001600160a01b0390911681526020016103bc565b34801561049457600080fd5b506104096104a33660046134ef565b610b62565b3480156104b457600080fd5b506104396104c3366004613530565b610bcc565b3480156104d457600080fd5b506103db6104e3366004613530565b610c18565b3480156104f457600080fd5b50610439610ca3565b34801561050957600080fd5b5061043961051836600461354d565b610ce2565b34801561052957600080fd5b50610409610538366004613530565b6000546001600160a01b0391821691161490565b34801561055857600080fd5b50604051600981526020016103bc565b34801561057457600080fd5b50610439610583366004613566565b610e28565b34801561059457600080fd5b506104396105a33660046134c3565b610f8b565b3480156105b457600080fd5b5061043961111f565b3480156105c957600080fd5b506103db60225481565b3480156105df57600080fd5b506104096105ee366004613530565b60076020526000908152604090205460ff1681565b34801561060f57600080fd5b5061040961061e366004613530565b60086020526000908152604090205460ff1681565b34801561063f57600080fd5b5061043961064e3660046135d3565b6111b6565b34801561065f57600080fd5b506103db602f5481565b34801561067557600080fd5b50610439610684366004613530565b611235565b34801561069557600080fd5b506103db60305481565b3480156106ab57600080fd5b506103db6106ba366004613530565b611281565b3480156106cb57600080fd5b506104396106da36600461360c565b61129c565b6104396106ed36600461354d565b6112d9565b3480156106fe57600080fd5b506103db60045481565b34801561071457600080fd5b506103db60035481565b34801561072a57600080fd5b506103db60025481565b34801561074057600080fd5b506103db601f5481565b34801561075657600080fd5b506000546001600160a01b0316610470565b34801561077457600080fd5b5061043961078336600461354d565b61138c565b34801561079457600080fd5b506104396107a33660046135d3565b6113ca565b3480156107b457600080fd5b506103db6114fc565b3480156107c957600080fd5b50604080518082019091526005815264425443425960d81b60208201526103af565b3480156107f757600080fd5b506103db60235481565b34801561080d57600080fd5b5061043961081c366004613629565b61152d565b34801561082d57600080fd5b506103db61083c366004613530565b611646565b34801561084d57600080fd5b50600b54610470906001600160a01b031681565b34801561086d57600080fd5b5061040961087c366004613497565b611673565b34801561088d57600080fd5b5061043961089c36600461354d565b611680565b3480156108ad57600080fd5b506103db60265481565b3480156108c357600080fd5b50601d546104099060ff1681565b3480156108dd57600080fd5b5061043961168d565b3480156108f257600080fd5b506103db610901366004613530565b6001600160a01b03166000908152602c602052604090206002015490565b34801561092b57600080fd5b5061095b61093a366004613530565b602c6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103bc565b34801561098257600080fd5b506103db61099136600461369a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156109c857600080fd5b506104396109d73660046134c3565b6116a7565b3480156109e857600080fd5b506103db6109f7366004613530565b601e6020526000908152604090205481565b348015610a1557600080fd5b50610439610a243660046135d3565b611716565b348015610a3557600080fd5b506103db60245481565b348015610a4b57600080fd5b50610439610a5a366004613530565b6117cd565b348015610a6b57600080fd5b50610439610a7a366004613530565b61184b565b348015610a8b57600080fd5b506104396118d7565b348015610aa057600080fd5b50610439610aaf366004613497565b6119c1565b348015610ac057600080fd5b506103db602e5481565b6000610ad7338484611a3d565b5060015b92915050565b6000546001600160a01b03163314610b145760405162461bcd60e51b8152600401610b0b906136c8565b60405180910390fd5b602e839055602f82905560308190556040514281528190839085907fd765fdc0257a3e4df80d9f57c58a38a260ed3938c092fc6ce8b3be01b402a23c906020015b60405180910390a4505050565b6000610b6f848484611b61565b610bc18433610bbc856040518060600160405280602881526020016138d9602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611c9b565b611a3d565b5060015b9392505050565b6000546001600160a01b03163314610bf65760405162461bcd60e51b8152600401610b0b906136c8565b602080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152602c60205260408120548103610c3f57506000919050565b6001600160a01b0382166000908152602c6020526040812054610c6190611cc7565b6001600160a01b0384166000908152602c6020526040902060010154909150808211610c91575060009392505050565b610c9b8282611ce4565b949350505050565b6000546001600160a01b03163314610ccd5760405162461bcd60e51b8152600401610b0b906136c8565b600b805460ff60a01b1916600160a01b179055565b336000908152601e6020526040902054811115610d575760405162461bcd60e51b815260206004820152602d60248201527f45524332303a2043616e6e6f7420756e7374616b65206d6f7265207468616e2060448201526c185b5bdd5b9d081cdd185ad959609a1b6064820152608401610b0b565b60215460405163d8a9bf2960e01b8152336004820152602481018390526001600160a01b039091169063d8a9bf2990604401600060405180830381600087803b158015610da357600080fd5b505af1158015610db7573d6000803e3d6000fd5b5050336000908152601e6020526040902054610dd69250905082611ce4565b336000908152601e6020526040902055601f54610df39082611ce4565b601f556040514290829033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56890600090a450565b6000546001600160a01b03163314610e525760405162461bcd60e51b8152600401610b0b906136c8565b600c899055600d8890556011879055600e8690556010859055600f849055601283905560138290556014819055601554610e8d906005611cf0565b60125411158015610ead5750601554610ea7906005611cf0565b60135411155b8015610ec85750601554610ec2906005611cf0565b60115411155b8015610ee35750601554610edd906005611cf0565b60145411155b610f445760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b6064820152608401610b0b565b4282847fdddb43af0ad29e5d9d3cb393fd94e8f11ac2c069da19545bac6ee6baf3ddc98984604051610f7891815260200190565b60405180910390a4505050505050505050565b6000546001600160a01b03163314610fb55760405162461bcd60e51b8152600401610b0b906136c8565b600061271084610fc460015490565b610fce91906136fe565b610fd89190613715565b9050600061271084610fe960015490565b610ff391906136fe565b610ffd9190613715565b905060006127108461100e60015490565b61101891906136fe565b6110229190613715565b905060006110466103e8611040600561103a60015490565b90611cfc565b90611cf0565b90508084101580156110585750808310155b80156110645750808210155b6110ce5760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610b0b565b6002849055600383905560048290556040514281528390839086907fbd5acdd9cd7346c04cee822893f228a65a948bc41357408255ab8f36c446349f9060200160405180910390a450505050505050565b60315460325460265460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015611178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119c9190613737565b506026546025546111ac91611ce4565b6025556000602655565b6000546001600160a01b031633146111e05760405162461bcd60e51b8152600401610b0b906136c8565b6001600160a01b038216600081815260076020526040808220805460ff19168515159081179091559051429391927ff61420caae4661cdd9554a2c8b6c89fc9f30f94abccb1da76abb2ec99783821191a45050565b6000546001600160a01b0316331461125f5760405162461bcd60e51b8152600401610b0b906136c8565b603180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526005602052604090205490565b6000546001600160a01b031633146112c65760405162461bcd60e51b8152600401610b0b906136c8565b601d805460ff1916911515919091179055565b6019805461ff0019166101001790556112f3333083611a3d565b600a5461130b9033906001600160a01b031683611a3d565b611316333083611b61565b600a5461132e9030906001600160a01b031683611a3d565b611339813433611d08565b336001600160a01b031634827f89d4d2ecc95200a080f69cea2131862ff53c70739a5db9ab0373fcdd09da746d4260405161137691815260200190565b60405180910390a4506019805461ff0019169055565b6032546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156113c6573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146113f45760405162461bcd60e51b8152600401610b0b906136c8565b600b546001600160a01b038381169116148015906114205750600a546001600160a01b03838116911614155b801561143557506001600160a01b0382163014155b801561144c57506001600160a01b03821661dead14155b801561146657506020546001600160a01b03838116911614155b6114a75760405162461bcd60e51b8152602060048201526012602482015271496e656c696769626c65204164647265737360701b6044820152606401610b0b565b6001600160a01b038216600081815260096020526040808220805460ff19168515159081179091559051429391927fd1c5980b68c66e201f3a2b571fb898fa61a65a2c74c60690855730f86165d00d91a45050565b600061152861150b6000611281565b61152261151961dead611281565b60015490611ce4565b90611ce4565b905090565b6000546001600160a01b031633146115575760405162461bcd60e51b8152600401610b0b906136c8565b603380546001600160a01b03199081166001600160a01b038881169182179093556034805483168885169081179091556032805484168886169081179091556035805485168887169081179091556020805490951695871695861785556000848152600786526040808220805460ff1990811660019081179092558684528284208054821683179055858452828420805482168317905593835281832080548516821790559782529081902080549092169096179055935142815290927f358f3926f41536f5fa6926b5b6945502e5fdfb85b1876c473d06606ed0fae9ca910160405180910390a45050505050565b6001600160a01b0381166000908152601e60209081526040808320546005909252822054610adb91611ce4565b6000610ad7338484611b61565b61168a3382611dbb565b50565b61169633611f3e565b156116a5576116a53333611f83565b565b6000546001600160a01b031633146116d15760405162461bcd60e51b8152600401610b0b906136c8565b6018839055601a829055601b8190556040514281528190839085907f3af591b474e55c209cfbc3da369b6762366e3015997314ac10bd5c3198d26fb390602001610b55565b6000546001600160a01b031633146117405760405162461bcd60e51b8152600401610b0b906136c8565b6001600160a01b0382166000908152600860205260409020805460ff1916821580159190911790915561177d576117788260006120cf565b61178f565b61178f8261178a84611281565b6120cf565b42811515836001600160a01b03167f9d5aa14a9b3912640cacc1223833fffedd9010feefa1a219300eb732a86ce8ba60405160405180910390a45050565b6000546001600160a01b031633146117f75760405162461bcd60e51b8152600401610b0b906136c8565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b031633146118755760405162461bcd60e51b8152600401610b0b906136c8565b602180546001600160a01b0319166001600160a01b038316908117909155600081815260076020526040808220805460ff19166001179055514292917f23481943b6ef3dff645af874fbb24781bf224a02312f9cb308880e03e0a9ddee91a350565b4760006118e333611281565b6021546040516334c5cbab60e11b81523360048201523060248201529192506001600160a01b03169063698b975690604401600060405180830381600087803b15801561192f57600080fd5b505af1158015611943573d6000803e3d6000fd5b50505050600061195c8347611ce490919063ffffffff16565b9050611969813033612209565b60006119788361152233611281565b90506119843382611dbb565b604051828152429033907f0e311a2c6dbfb0153ec3a8a5bdca09070b3e5f60768fdc10a20453f38d1868739060200160405180910390a350505050565b60325460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af1158015611a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a389190613737565b505050565b6001600160a01b038316611a9f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b0b565b6001600160a01b038216611b005760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b0b565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611b6c83838361235c565b611b768383612494565b611b81838383612525565b611b8c838383612611565b611b9683836127f7565b611ba0838361293d565b611bab8383836129a8565b6001600160a01b038316600090815260056020526040902054611bce9082611ce4565b6001600160a01b038416600090815260056020526040812091909155611bf484846129cd565b611bfe5781611c09565b611c09848484612a13565b6001600160a01b038416600090815260056020526040902054909150611c2f9082612b1e565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c839085815260200190565b60405180910390a3611c958484612b2a565b50505050565b60008184841115611cbf5760405162461bcd60e51b8152600401610b0b9190613434565b505050900390565b6000610adb60285461104060275485611cfc90919063ffffffff16565b6000610bc58284613754565b6000610bc58284613715565b6000610bc582846136fe565b600a54611d209030906001600160a01b031685611a3d565b600a5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0383811660848301524260a48301529091169063f305d71990849060c40160606040518083038185885af1158015611d8e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611db39190613767565b505050505050565b6001600160a01b0382166000908152601e6020908152604080832054600590925290912054611de991611ce4565b811115611e505760405162461bcd60e51b815260206004820152602f60248201527f45524332303a2043616e6e6f74207374616b65206d6f7265207468616e20617660448201526e61696c61626c652062616c616e636560881b6064820152608401610b0b565b60215460405163773a0f0960e01b81526001600160a01b038481166004830152602482018490529091169063773a0f0990604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b5050506001600160a01b0383166000908152601e6020526040902054611ed9915082612b1e565b6001600160a01b0383166000908152601e6020526040902055601f54611eff9082612b1e565b601f55604051429082906001600160a01b038516907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1590600090a45050565b602e546001600160a01b0382166000908152602b602052604081205490914291611f689190613795565b108015610adb5750602f54611f7c83610c18565b1192915050565b6001600160a01b0382166000908152602c60205260408120549003611fa6575050565b6000611fb183610c18565b90508015611a3857602454611fc69082612b1e565b602490815560315460405163a9059cbb60e01b81526001600160a01b03858116600483015292810184905291169063a9059cbb906044016020604051808303816000875af115801561201c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120409190613737565b5060255461204e9082611ce4565b6025556001600160a01b0383166000908152602b60209081526040808320429055602c9091529020600201546120849082612b1e565b6001600160a01b0384166000908152602c602052604090206002810191909155546120ae90611cc7565b6001600160a01b0384166000908152602c6020526040902060010155505050565b6000811180156120f557506001600160a01b0382166000908152602c6020526040902054155b1561215b57602980546001600160a01b0384166000818152602a60205260408120839055600183018455929092527fcb7c14ce178f56e2e8d86ab33ebc0ae081ba8556a00cd122038841867181caac0180546001600160a01b031916909117905561218e565b8015801561218057506001600160a01b0382166000908152602c602052604090205415155b1561218e5761218e82612c09565b6001600160a01b0382166000908152602c60205260409020546022546121bf9183916121b991611ce4565b90612b1e565b6022556001600160a01b0382166000908152602c602052604090208190556121e681611cc7565b6001600160a01b039092166000908152602c602052604090206001019190915550565b6040805160028082526060820183526000926020830190803683375050600a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612273573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229791906137a8565b816000815181106122aa576122aa6137c5565b60200260200101906001600160a01b031690816001600160a01b03168152505082816001815181106122de576122de6137c5565b6001600160a01b039283166020918202929092010152600a5460405163b6f9de9560e01b815291169063b6f9de959086906123249060009086908890429060040161381f565b6000604051808303818588803b15801561233d57600080fd5b505af1158015612351573d6000803e3d6000fd5b505050505050505050565b6001600160a01b0383166123c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b0b565b6001600160a01b0382166124225760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b0b565b61242b83611281565b811115611a385760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b0b565b6001600160a01b03821660009081526007602052604090205460ff161580156124d657506001600160a01b03811660009081526007602052604090205460ff16155b156113c657600b54600160a01b900460ff166113c65760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b6044820152606401610b0b565b6001600160a01b03831660009081526007602052604090205460ff1615801561256757506001600160a01b03821660009081526007602052604090205460ff16155b80156125815750600b546001600160a01b03838116911614155b801561259857506001600160a01b03821661dead14155b15611a38576004546001600160a01b0383166000908152600560205260409020546125c39083612b1e565b1115611a385760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610b0b565b6001600160a01b0383166000908152601e6020526040902054156126ca576001600160a01b038316600090815260056020908152604080832054601e9092529091205461265f908390612b1e565b11156126ca5760405162461bcd60e51b815260206004820152603460248201527f45524332303a2045786365656473206d6178696d756d20616c6c6f776564206e60448201527337ba1031bab93932b73a363c9039ba30b5b2b21760611b6064820152608401610b0b565b600b546001600160a01b0384811691161461276b576003548111158061270857506001600160a01b03831660009081526007602052604090205460ff165b8061272b57506001600160a01b03821660009081526007602052604090205460ff165b61276b5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b0b565b6002548111158061279457506001600160a01b03831660009081526007602052604090205460ff165b806127b757506001600160a01b03821660009081526007602052604090205460ff165b611a385760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b0b565b601d5460ff16801561282257506001600160a01b03821660009081526007602052604090205460ff16155b801561284757506001600160a01b03811660009081526007602052604090205460ff16155b80156128615750600b546001600160a01b03828116911614155b801561287857506001600160a01b03811661dead14155b80156128925750600a546001600160a01b03828116911614155b156113c657326000908152601c602052604090205443116129275760405162461bcd60e51b815260206004820152604360248201527f45524332303a205472616e736665722044656c617920656e61626c65642e204f60448201527f6e6c79206f6e652070757263686173652070657220626c6f636b20616c6c6f7760648201526232b21760e91b608482015260a401610b0b565b326000908152601c602052604090204390555050565b600b546001600160a01b03828116911614801561297357506001600160a01b03821660009081526007602052604090205460ff16155b80156129875750601954610100900460ff16155b156113c65760016017600082825461299f9190613795565b90915550505050565b6129b3838383612d1e565b15611a38576129c3601a54612de4565b6000601755505050565b6001600160a01b03821660009081526007602052604081205460ff16158015610bc55750506001600160a01b031660009081526007602052604090205460ff1615919050565b600080612a208585613007565b118015612a355750601954610100900460ff16155b15612b17576000612a57612a498686613007565b60155461103a908690611cf0565b30600090815260056020526040902054909150612a749082612b1e565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612ac59085815260200190565b60405180910390a360115415612b0557602054601154601554612b059230926001600160a01b0390911691612b00919061103a908990611cf0565b611b61565b612b0f8382611ce4565b915050610bc5565b5092915050565b6000610bc58284613795565b6001600160a01b0381166000908152602c602052604090205415612b5257612b528182611f83565b600b546001600160a01b038281169116148015612b8657506001600160a01b0382166000908152602c602052604090205415155b15612ba457612ba0612b9783610c18565b60265490612b1e565b6026555b6001600160a01b03821660009081526008602052604090205460ff16612bd157612bd18261178a84611281565b6001600160a01b03811660009081526008602052604090205460ff16612bfe57612bfe8161178a83611281565b6113c66030546130d0565b60298054612c1990600190613754565b81548110612c2957612c296137c5565b60009182526020808320909101546001600160a01b038481168452602a909252604090922054602980549290931692918110612c6757612c676137c5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152602a9182905260408120546029805491939291612cb390600190613754565b81548110612cc357612cc36137c5565b60009182526020808320909101546001600160a01b031683528201929092526040019020556029805480612cf957612cf9613854565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600080601b5483101590506000601a54612d3730611281565b601954911115915060ff16158015612d51575060165460ff165b8015612d665750600b54600160a01b900460ff165b8015612d6f5750815b8015612d9457506001600160a01b03861660009081526007602052604090205460ff16155b8015612dad5750600b546001600160a01b038681169116145b8015612dbd575060185460175410155b8015612dc65750805b8015612dda5750601954610100900460ff16155b9695505050505050565b6001601960006101000a81548160ff0219169083151502179055506000612e34600261103a6010546121b9600e546121b9600f546121b9600d546121b96001600c54612b1e90919063ffffffff16565b90506000612e5182611040600c5486611cfc90919063ffffffff16565b90506000612e5f8483611ce4565b905047612e6b8261319b565b6000612e774783611ce4565b90506000612e9a612e93600c5488611ce490919063ffffffff16565b8390611cf0565b90506000612eb3600c5483611cfc90919063ffffffff16565b90508015612ed457603454612ed490879083906001600160a01b0316611d08565b600d54600090612ee99061103a856002611cfc565b90508015612f2d576033546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612f2b573d6000803e3d6000fd5b505b600e54600090612f429061103a866002611cfc565b90508015612f5357612f53816132ed565b601054600090612f689061103a876002611cfc565b90508015612fac576035546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612faa573d6000803e3d6000fd5b505b478015612fef576032546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612fed573d6000803e3d6000fd5b505b50506019805460ff1916905550505050505050505050565b6001600160a01b03821660009081526009602052604081205460ff168061304657506001600160a01b03821660009081526009602052604090205460ff165b1561306057601554613059906064611ce4565b9050610adb565b600b546001600160a01b03838116911614801561307f57506000601354115b156130935760115460135461305991612b1e565b600b546001600160a01b0384811691161480156130b257506000601254115b156130c65760115460125461305991612b1e565b5060145492915050565b60295460008190036130e0575050565b6000805a905060005b84831080156130f757508381105b156131945783602d541061310b576000602d555b60006029602d5481548110613122576131226137c5565b6000918252602090912001546001600160a01b0316905061314281611f3e565b15613151576131518182611f83565b61316661315f5a8590611ce4565b8590612b1e565b93505a602d8054919450600061317b8361386a565b9190505550818061318b9061386a565b925050506130e9565b5050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131d0576131d06137c5565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061324d91906137a8565b81600181518110613260576132606137c5565b6001600160a01b039283166020918202929092010152600a546132869130911684611a3d565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac947906132bf908590600090869030904290600401613883565b600060405180830381600087803b1580156132d957600080fd5b505af1158015611db3573d6000803e3d6000fd5b6031546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015613336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335a91906138bf565b6031549091506133759083906001600160a01b031630612209565b6031546040516370a0823160e01b81523060048201526000916133e89184916001600160a01b0316906370a0823190602401602060405180830381865afa1580156133c4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152291906138bf565b6023549091506133f89082612b1e565b6023556025546134089082612b1e565b60255560225460285461342c91613423916110409085611cfc565b60275490612b1e565b602755505050565b600060208083528351808285015260005b8181101561346157858101830151858201604001528201613445565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461168a57600080fd5b600080604083850312156134aa57600080fd5b82356134b581613482565b946020939093013593505050565b6000806000606084860312156134d857600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561350457600080fd5b833561350f81613482565b9250602084013561351f81613482565b929592945050506040919091013590565b60006020828403121561354257600080fd5b8135610bc581613482565b60006020828403121561355f57600080fd5b5035919050565b60008060008060008060008060006101208a8c03121561358557600080fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b801515811461168a57600080fd5b600080604083850312156135e657600080fd5b82356135f181613482565b91506020830135613601816135c5565b809150509250929050565b60006020828403121561361e57600080fd5b8135610bc5816135c5565b600080600080600060a0868803121561364157600080fd5b853561364c81613482565b9450602086013561365c81613482565b9350604086013561366c81613482565b9250606086013561367c81613482565b9150608086013561368c81613482565b809150509295509295909350565b600080604083850312156136ad57600080fd5b82356136b881613482565b9150602083013561360181613482565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610adb57610adb6136e8565b60008261373257634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561374957600080fd5b8151610bc5816135c5565b81810381811115610adb57610adb6136e8565b60008060006060848603121561377c57600080fd5b8351925060208401519150604084015190509250925092565b80820180821115610adb57610adb6136e8565b6000602082840312156137ba57600080fd5b8151610bc581613482565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156138145781516001600160a01b0316875295820195908201906001016137ef565b509495945050505050565b84815260806020820152600061383860808301866137db565b6001600160a01b03949094166040830152506060015292915050565b634e487b7160e01b600052603160045260246000fd5b60006001820161387c5761387c6136e8565b5060010190565b85815284602082015260a0604082015260006138a260a08301866137db565b6001600160a01b0394909416606083015250608001529392505050565b6000602082840312156138d157600080fd5b505191905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212201d0facecc6318549f6cc2cee00223a1d6a86f6ff82278a2dfb48e5b8b362659764736f6c63430008120033
Deployed Bytecode Sourcemap
9252:26169:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14879:67;;;;;;;;;;-1:-1:-1;14939:5:0;;;;;;;;;;;;-1:-1:-1;;;14939:5:0;;;;14879:67;;;;;;;:::i;:::-;;;;;;;;11368:31;;;;;;;;;;;;;;;;;;;713:25:1;;;701:2;686:18;11368:31:0;567:177:1;15870:133:0;;;;;;;;;;-1:-1:-1;15870:133:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;15870:133:0;1205:187:1;34581:355:0;;;;;;;;;;-1:-1:-1;34581:355:0;;;;;:::i;:::-;;:::i;:::-;;15259:84;;;;;;;;;;-1:-1:-1;15329:12:0;;15259:84;;11989:66;;;;;;;;;;-1:-1:-1;11989:66:0;;;;-1:-1:-1;;;;;11989:66:0;;;;;;-1:-1:-1;;;;;1882:32:1;;;1864:51;;1852:2;1837:18;11989:66:0;1718:203:1;28300:309:0;;;;;;;;;;-1:-1:-1;28300:309:0;;;;;:::i;:::-;;:::i;31977:106::-;;;;;;;;;;-1:-1:-1;31977:106:0;;;;;:::i;:::-;;:::i;33451:473::-;;;;;;;;;;-1:-1:-1;33451:473:0;;;;;:::i;:::-;;:::i;15102:67::-;;;;;;;;;;;;;:::i;17977:408::-;;;;;;;;;;-1:-1:-1;17977:408:0;;;;;:::i;:::-;;:::i;7201:87::-;;;;;;;;;;-1:-1:-1;7201:87:0;;;;;:::i;:::-;7256:4;7281:5;-1:-1:-1;;;;;7270:16:0;;;7281:5;;7270:16;;7201:87;15029:67;;;;;;;;;;-1:-1:-1;15029:67:0;;9488:1;2966:36:1;;2954:2;2939:18;15029:67:0;2824:184:1;19191:706:0;;;;;;;;;;-1:-1:-1;19191:706:0;;;;;:::i;:::-;;:::i;20284:626::-;;;;;;;;;;-1:-1:-1;20284:626:0;;;;;:::i;:::-;;:::i;31752:217::-;;;;;;;;;;;;;:::i;11261:26::-;;;;;;;;;;;;;;;;9891:44;;;;;;;;;;-1:-1:-1;9891:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9942:49;;;;;;;;;;-1:-1:-1;9942:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23690:192;;;;;;;;;;-1:-1:-1;23690:192:0;;;;;:::i;:::-;;:::i;11896:46::-;;;;;;;;;;;;;;;;32091:99;;;;;;;;;;-1:-1:-1;32091:99:0;;;;;:::i;:::-;;:::i;11949:33::-;;;;;;;;;;;;;;;;15349:103;;;;;;;;;;-1:-1:-1;15349:103:0;;;;;:::i;:::-;;:::i;23574:108::-;;;;;;;;;;-1:-1:-1;23574:108:0;;;;;:::i;:::-;;:::i;34944:474::-;;;;;;:::i;:::-;;:::i;9700:63::-;;;;;;;;;;;;;;;;9631:62;;;;;;;;;;;;;;;;9564:60;;;;;;;;;;;;;;;;11142:26;;;;;;;;;;;;;;;;15175:78;;;;;;;;;;-1:-1:-1;15227:7:0;15245:5;-1:-1:-1;;;;;15245:5:0;15175:78;;31627:117;;;;;;;;;;-1:-1:-1;31627:117:0;;;;;:::i;:::-;;:::i;19905:371::-;;;;;;;;;;-1:-1:-1;19905:371:0;;;;;:::i;:::-;;:::i;16140:138::-;;;;;;;;;;;;;:::i;14952:71::-;;;;;;;;;;-1:-1:-1;15014:7:0;;;;;;;;;;;;-1:-1:-1;;;15014:7:0;;;;14952:71;;11294:29;;;;;;;;;;;;;;;;22498:575;;;;;;;;;;-1:-1:-1;22498:575:0;;;;;:::i;:::-;;:::i;16009:125::-;;;;;;;;;;-1:-1:-1;16009:125:0;;;;;:::i;:::-;;:::i;10065:19::-;;;;;;;;;;-1:-1:-1;10065:19:0;;;;-1:-1:-1;;;;;10065:19:0;;;15458:139;;;;;;;;;;-1:-1:-1;15458:139:0;;;;;:::i;:::-;;:::i;17864:105::-;;;;;;;;;;-1:-1:-1;17864:105:0;;;;;:::i;:::-;;:::i;11406:30::-;;;;;;;;;;;;;;;;11042:39;;;;;;;;;;-1:-1:-1;11042:39:0;;;;;;;;32639:130;;;;;;;;;;;;;:::i;32441:190::-;;;;;;;;;;-1:-1:-1;32441:190:0;;;;;:::i;:::-;-1:-1:-1;;;;;32589:19:0;32514:7;32589:19;;;:6;:19;;;;;:33;;;;32441:190;11769:40;;;;;;;;;;-1:-1:-1;11769:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5524:25:1;;;5580:2;5565:18;;5558:34;;;;5608:18;;;5601:34;5512:2;5497:18;11769:40:0;5322:319:1;15603:127:0;;;;;;;;;;-1:-1:-1;15603:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;15701:18:0;;;15684:7;15701:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15603:127;22163:327;;;;;;;;;;-1:-1:-1;22163:327:0;;;;;:::i;:::-;;:::i;11088:47::-;;;;;;;;;;-1:-1:-1;11088:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;28960:289;;;;;;;;;;-1:-1:-1;28960:289:0;;;;;:::i;:::-;;:::i;11330:31::-;;;;;;;;;;;;;;;;7294:111;;;;;;;;;;-1:-1:-1;7294:111:0;;;;;:::i;:::-;;:::i;18966:217::-;;;;;;;;;;-1:-1:-1;18966:217:0;;;;;:::i;:::-;;:::i;18393:565::-;;;;;;;;;;;;;:::i;31477:142::-;;;;;;;;;;-1:-1:-1;31477:142:0;;;;;:::i;:::-;;:::i;11852:37::-;;;;;;;;;;;;;;;;15870:133;15945:4;15952:37;15961:10;15973:7;15982:6;15952:8;:37::i;:::-;-1:-1:-1;15997:4:0;15870:133;;;;;:::o;34581:355::-;7256:4;7281:5;-1:-1:-1;;;;;7281:5:0;7168:10;7270:16;7152:38;;;;-1:-1:-1;;;7152:38:0;;;;;;;:::i;:::-;;;;;;;;;34715:9:::1;:22:::0;;;34748:15:::1;:34:::0;;;34793:14:::1;:32:::0;;;34841:87:::1;::::0;34912:15:::1;713:25:1::0;;34793:32:0;;34748:34;;34715:22;;34841:87:::1;::::0;701:2:1;686:18;34841:87:0::1;;;;;;;;34581:355:::0;;;:::o;28300:309::-;28398:4;28415:36;28425:6;28433:9;28444:6;28415:9;:36::i;:::-;28462:117;28471:6;28479:10;28491:87;28527:6;28491:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28491:19:0;;;;;;:11;:19;;;;;;;;28511:10;28491:31;;;;;;;;;:87;:35;:87::i;:::-;28462:8;:117::i;:::-;-1:-1:-1;28597:4:0;28300:309;;;;;;:::o;31977:106::-;7256:4;7281:5;-1:-1:-1;;;;;7281:5:0;7168:10;7270:16;7152:38;;;;-1:-1:-1;;;7152:38:0;;;;;;;:::i;:::-;32050:14:::1;:25:::0;;-1:-1:-1;;;;;;32050:25:0::1;-1:-1:-1::0;;;;;32050:25:0;;;::::1;::::0;;;::::1;::::0;;31977:106::o;33451:473::-;-1:-1:-1;;;;;33543:19:0;;33520:7;33543:19;;;:6;:19;;;;;:26;:31;;33540:48;;-1:-1:-1;33584:1:0;;33451:473;-1:-1:-1;33451:473:0:o;33540:48::-;-1:-1:-1;;;;;33657:19:0;;33598:33;33657:19;;;:6;:19;;;;;:26;33634:50;;:22;:50::i;:::-;-1:-1:-1;;;;;33730:19:0;;33695:32;33730:19;;;:6;:19;;;;;:33;;;33598:86;;-1:-1:-1;33777:53:0;;;33774:70;;-1:-1:-1;33840:1:0;;33451:473;-1:-1:-1;;;33451:473:0:o;33774:70::-;33861:55;:25;33891:24;33861:29;:55::i;:::-;33854:62;33451:473;-1:-1:-1;;;;33451:473:0:o;15102:67::-;7256:4;7281:5;-1:-1:-1;;;;;7281:5:0;7168:10;7270:16;7152:38;;;;-1:-1:-1;;;7152:38:0;;;;;;;:::i;:::-;15146:14:::1;:21:::0;;-1:-1:-1;;;;15146:21:0::1;-1:-1:-1::0;;;15146:21:0::1;::::0;;15102:67::o;17977:408::-;18071:10;18058:24;;;;:12;:24;;;;;;18048:34;;;18040:92;;;;-1:-1:-1;;;18040:92:0;;6835:2:1;18040:92:0;;;6817:21:1;6874:2;6854:18;;;6847:30;6913:34;6893:18;;;6886:62;-1:-1:-1;;;6964:18:1;;;6957:43;7017:19;;18040:92:0;6633:409:1;18040:92:0;18143:15;;:51;;-1:-1:-1;;;18143:51:0;;18175:10;18143:51;;;7221::1;7288:18;;;7281:34;;;-1:-1:-1;;;;;18143:15:0;;;;:31;;7194:18:1;;18143:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18245:10:0;18232:24;;;;:12;:24;;;;;;:36;;-1:-1:-1;18232:24:0;-1:-1:-1;18261:6:0;18232:28;:36::i;:::-;18218:10;18205:24;;;;:12;:24;;;;;:63;18293:11;;:23;;18309:6;18293:15;:23::i;:::-;18279:11;:37;18332:45;;18361:15;;18353:6;;18341:10;;18332:45;;;;;17977:408;:::o;19191:706::-;7256:4;7281:5;-1:-1:-1;;;;;7281:5:0;7168:10;7270:16;7152:38;;;;-1:-1:-1;;;7152:38:0;;;;;;;:::i;:::-;19404:12:::1;:25:::0;;;19431:12:::1;:25:::0;;;19458:8:::1;:17:::0;;;19477:10:::1;:21:::0;;;19500:10:::1;:21:::0;;;19532:14:::1;:29:::0;;;19563:8:::1;:17:::0;;;19582:7:::1;:15:::0;;;19599:11:::1;:20:::0;;;19650:11:::1;::::0;:18:::1;::::0;19666:1:::1;19650:15;:18::i;:::-;19638:8;;:30;;:63;;;;-1:-1:-1::0;19683:11:0::1;::::0;:18:::1;::::0;19699:1:::1;19683:15;:18::i;:::-;19672:7;;:29;;19638:63;:97;;;;-1:-1:-1::0;19717:11:0::1;::::0;:18:::1;::::0;19733:1:::1;19717:15;:18::i;:::-;19705:8;;:30;;19638:97;:134;;;;-1:-1:-1::0;19754:11:0::1;::::0;:18:::1;::::0;19770:1:::1;19754:15;:18::i;:::-;19739:11;;:33;;19638:134;19630:191;;;::::0;-1:-1:-1;;;19630:191:0;;7528:2:1;19630:191:0::1;::::0;::::1;7510:21:1::0;7567:2;7547:18;;;7540:30;7606:34;7586:18;;;7579:62;-1:-1:-1;;;7657:18:1;;;7650:42;7709:19;;19630:191:0::1;7326:408:1::0;19630:191:0::1;19873:15;19858:5;19850:6;19837:52;19865:6;19837:52;;;;713:25:1::0;;701:2;686:18;;567:177;19837:52:0::1;;;;;;;;19191:706:::0;;;;;;;;;:::o;20284:626::-;7256:4;7281:5;-1:-1:-1;;;;;7281:5:0;7168:10;7270:16;7152:38;;;;-1:-1:-1;;;7152:38:0;;;;;;;:::i;:::-;20384:13:::1;20425:5;20417:4;20401:13;15329:12:::0;;;15259:84;20401:13:::1;:20;;;;:::i;:::-;20400:30;;;;:::i;:::-;20384:46;;20432:19;20481:5;20471:6;20455:13;15329:12:::0;;;15259:84;20455:13:::1;:22;;;;:::i;:::-;20454:32;;;;:::i;:::-;20432:54;;20497:17;20545:5;20534:7;20518:13;15329:12:::0;;;15259:84;20518:13:::1;:23;;;;:::i;:::-;20517:33;;;;:::i;:::-;20497:53;;20552:13;20568:30;20593:4;20568:20;20586:1;20568:13;15329:12:::0;;;15259:84;20568:13:::1;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;20552:46;;20626:5;20617;:14;;:38;;;;;20650:5;20635:11;:20;;20617:38;:60;;;;;20672:5;20659:9;:18;;20617:60;20609:126;;;::::0;-1:-1:-1;;;20609:126:0;;8468:2:1;20609:126:0::1;::::0;::::1;8450:21:1::0;8507:2;8487:18;;;8480:30;8546:34;8526:18;;;8519:62;-1:-1:-1;;;8597:18:1;;;8590:51;8658:19;;20609:126:0::1;8266:417:1::0;20609:126:0::1;20746:12;:20:::0;;;20768:14:::1;:28:::0;;;20798:15:::1;:27:::0;;;20841:61:::1;::::0;20886:15:::1;713:25:1::0;;20768:28:0;;20798:27;;20746:20;;20841:61:::1;::::0;701:2:1;686:18;20841:61:0::1;;;;;;;20373:537;;;;20284:626:::0;;;:::o;31752:217::-;31800:6;;31817:20;;31839:15;;31793:62;;-1:-1:-1;;;31793:62:0;;-1:-1:-1;;;;;31817:20:0;;;31793:62;;;7221:51:1;7288:18;;;7281:34;;;;31800:6:0;;;31793:23;;7194:18:1;;31793:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;31906:15:0;;31885:16;;:37;;:20;:37::i;:::-;31866:16;:56;31959:1;31933:15;:28;31752:217::o;23690:192::-;7256:4;7281:5;-1:-1:-1;;;;;7281:5:0;7168:10;7270:16;7152:38;;;;-1:-1:-1;;;7152:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23774:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;:32;;-1:-1:-1;;23774:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23822:52;;23858:15:::1;::::0;23774:32;;23822:52:::1;::::0;::::1;23690:192:::0;;:::o;32091:99::-;7256:4;7281:5;-1:-1:-1;;;;;7281:5:0;7168:10;7270:16;7152:38;;;;-1:-1:-1;;;7152:38:0;;;;;;;:::i;:::-;32165:6:::1;:17:::0;;-1:-1:-1;;;;;;32165:17:0::1;-1:-1:-1::0;;;;;32165:17:0;;;::::1;::::0;;;::::1;::::0;;32091:99::o;15349:103::-;-1:-1:-1;;;;;15432:18:0;15415:7;15432:18;;;:9;:18;;;;;;;15349:103::o;23574:108::-;7256:4;7281:5;-1:-1:-1;;;;;7281:5:0;7168:10;7270:16;7152:38;;;;-1:-1:-1;;;7152:38:0;;;;;;;:::i;:::-;23644:20:::1;:30:::0;;-1:-1:-1;;23644:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23574:108::o;34944:474::-;10720:12;:19;;-1:-1:-1;;10720:19:0;;;;;35034:48:::1;35043:10;35063:4;35070:11:::0;35034:8:::1;:48::i;:::-;35122:6;::::0;35093:50:::1;::::0;35102:10:::1;::::0;-1:-1:-1;;;;;35122:6:0::1;35131:11:::0;35093:8:::1;:50::i;:::-;35154:49;35164:10;35184:4;35191:11;35154:9;:49::i;:::-;35246:6;::::0;35214:53:::1;::::0;35231:4:::1;::::0;-1:-1:-1;;;;;35246:6:0::1;35255:11:::0;35214:8:::1;:53::i;:::-;35278:48;35291:11;35304:9;35315:10;35278:12;:48::i;:::-;35382:10;-1:-1:-1::0;;;;;35342:68:0::1;35371:9;35358:11;35342:68;35394:15;35342:68;;;;713:25:1::0;;701:2;686:18;;567:177;35342:68:0::1;;;;;;;;-1:-1:-1::0;10744:12:0;:20;;-1:-1:-1;;10744:20:0;;;34944:474::o;31627:117::-;31697:20;;31689:47;;-1:-1:-1;;;;;31697:20:0;;;;31689:47;;;;;31728:7;;31697:20;31689:47;31697:20;31689:47;31728:7;31697:20;31689:47;;;;;;;;;;;;;;;;;;;;;31627:117;:::o;19905:371::-;7256:4;7281:5;-1:-1:-1;;;;;7281:5:0;7168:10;7270:16;7152:38;;;;-1:-1:-1;;;7152:38:0;;;;;;;:::i;:::-;20014:4:::1;::::0;-1:-1:-1;;;;;19994:25:0;;::::1;20014:4:::0;::::1;19994:25;::::0;::::1;::::0;:56:::1;;-1:-1:-1::0;20043:6:0::1;::::0;-1:-1:-1;;;;;20023:27:0;;::::1;20043:6:::0;::::1;20023:27;;19994:56;:85;;;;-1:-1:-1::0;;;;;;20054:25:0;::::1;20074:4;20054:25;;19994:85;:114;;;;-1:-1:-1::0;;;;;;20083:25:0;::::1;12095:42;20083:25;;19994:114;:153;;;;-1:-1:-1::0;20132:14:0::1;::::0;-1:-1:-1;;;;;20112:35:0;;::::1;20132:14:::0;::::1;20112:35;;19994:153;19986:184;;;::::0;-1:-1:-1;;;19986:184:0;;9140:2:1;19986:184:0::1;::::0;::::1;9122:21:1::0;9179:2;9159:18;;;9152:30;-1:-1:-1;;;9198:18:1;;;9191:48;9256:18;;19986:184:0::1;8938:342:1::0;19986:184:0::1;-1:-1:-1::0;;;;;20181:15:0;::::1;;::::0;;;:5:::1;:15;::::0;;;;;:26;;-1:-1:-1;;20181:26:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20223:45;;20252:15:::1;::::0;20181:26;;20223:45:::1;::::0;::::1;19905:371:::0;;:::o;16140:138::-;16199:7;16216:60;16254:21;16272:1;16254:9;:21::i;:::-;16216:33;16233:15;12095:42;16233:9;:15::i;:::-;16216:12;;;:16;:33::i;:::-;:37;;:60::i;:::-;16209:67;;16140:138;:::o;22498:575::-;7256:4;7281:5;-1:-1:-1;;;;;7281:5:0;7168:10;7270:16;7152:38;;;;-1:-1:-1;;;7152:38:0;;;;;;;:::i;:::-;22654:18:::1;:31:::0;;-1:-1:-1;;;;;;22654:31:0;;::::1;-1:-1:-1::0;;;;;22654:31:0;;::::1;::::0;;::::1;::::0;;;22687:18:::1;:31:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;22720:20:::1;:35:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;22757:16:::1;:27:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;22786:14:::1;:23:::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;22820:23:0;;;:11:::1;:23:::0;;;;;;:30;;-1:-1:-1;;22820:30:0;;::::1;-1:-1:-1::0;22820:30:0;;::::1;::::0;;;22852:23;;;;;;:30;;;::::1;::::0;::::1;::::0;;22884:25;;;;;;:32;;;::::1;::::0;::::1;::::0;;22918:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;22948:19;;;;;;;:26;;;;::::1;::::0;;::::1;::::0;;22990:75;;23049:15:::1;713:25:1::0;;22687:31:0;;22990:75:::1;::::0;686:18:1;22990:75:0::1;;;;;;;22498:575:::0;;;;;:::o;16009:125::-;-1:-1:-1;;;;;16111:20:0;;16072:7;16111:20;;;:12;:20;;;;;;;;;16089:9;:17;;;;;;:43;;:21;:43::i;15458:139::-;15536:4;15543:40;15553:10;15565:9;15576:6;15543:9;:40::i;17864:105::-;17926:35;17942:10;17954:6;17926:15;:35::i;:::-;17864:105;:::o;32639:130::-;32688:28;32705:10;32688:16;:28::i;:::-;32685:77;;;32718:42;32737:10;32749;32718:18;:42::i;:::-;32639:130::o;22163:327::-;7256:4;7281:5;-1:-1:-1;;;;;7281:5:0;7168:10;7270:16;7152:38;;;;-1:-1:-1;;;7152:38:0;;;;;;;:::i;:::-;22292:10:::1;:24:::0;;;22318:13:::1;:30:::0;;;22350:14:::1;:32:::0;;;22398:82:::1;::::0;22464:15:::1;713:25:1::0;;22350:32:0;;22318:30;;22292:24;;22398:82:::1;::::0;701:2:1;686:18;22398:82:0::1;567:177:1::0;28960:289:0;7256:4;7281:5;-1:-1:-1;;;;;7281:5:0;7168:10;7270:16;7152:38;;;;-1:-1:-1;;;7152:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29048:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;29048:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;29092:84:::1;;29103:19;29112:6;29120:1;29103:8;:19::i;:::-;29092:84;;;29139:35;29148:6;29156:17;29166:6;29156:9;:17::i;:::-;29139:8;:35::i;:::-;29225:15;29217:6;29191:50;;29209:6;-1:-1:-1::0;;;;;29191:50:0::1;;;;;;;;;;;28960:289:::0;;:::o;7294:111::-;7256:4;7281:5;-1:-1:-1;;;;;7281:5:0;7168:10;7270:16;7152:38;;;;-1:-1:-1;;;7152:38:0;;;;;;;:::i;:::-;7360:5:::1;:11:::0;;-1:-1:-1;;;;;;7360:11:0::1;-1:-1:-1::0;;;;;7360:11:0;::::1;::::0;;::::1;::::0;;;7378:25:::1;::::0;1864:51:1;;;7378:25:0::1;::::0;1852:2:1;1837:18;7378:25:0::1;;;;;;;7294:111:::0;:::o;18966:217::-;7256:4;7281:5;-1:-1:-1;;;;;7281:5:0;7168:10;7270:16;7152:38;;;;-1:-1:-1;;;7152:38:0;;;;;;;:::i;:::-;19041:15:::1;:44:::0;;-1:-1:-1;;;;;;19041:44:0::1;-1:-1:-1::0;;;;;19041:44:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19087:21:0;;;:11:::1;:21;::::0;;;;;:28;;-1:-1:-1;;19087:28:0::1;-1:-1:-1::0;19087:28:0::1;::::0;;19131:44;19159:15:::1;::::0;19041:44;19131::::1;::::0;::::1;18966:217:::0;:::o;18393:565::-;18467:21;18442:22;18522:21;18532:10;18522:9;:21::i;:::-;18554:15;;:65;;-1:-1:-1;;;18554:65:0;;18593:10;18554:65;;;9713:34:1;18613:4:0;9763:18:1;;;9756:43;18499:44:0;;-1:-1:-1;;;;;;18554:15:0;;:38;;9648:18:1;;18554:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18630:20;18653:41;18679:14;18653:21;:25;;:41;;;;:::i;:::-;18630:64;;18705:57;18722:12;18744:4;18751:10;18705:16;:57::i;:::-;18773:18;18794:39;18820:12;18794:21;18804:10;18794:9;:21::i;:39::-;18773:60;;18844:39;18860:10;18872;18844:15;:39::i;:::-;18899:51;;713:25:1;;;18934:15:0;;18908:10;;18899:51;;701:2:1;686:18;18899:51:0;;;;;;;18431:527;;;;18393:565::o;31477:142::-;31581:20;;31555:56;;-1:-1:-1;;;31555:56:0;;-1:-1:-1;;;;;31581:20:0;;;31555:56;;;7221:51:1;7288:18;;;7281:34;;;31555:25:0;;;;;;7194:18:1;;31555:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31477:142;;:::o;28617:335::-;-1:-1:-1;;;;;28710:19:0;;28702:68;;;;-1:-1:-1;;;28702:68:0;;10012:2:1;28702:68:0;;;9994:21:1;10051:2;10031:18;;;10024:30;10090:34;10070:18;;;10063:62;-1:-1:-1;;;10141:18:1;;;10134:34;10185:19;;28702:68:0;9810:400:1;28702:68:0;-1:-1:-1;;;;;28789:21:0;;28781:68;;;;-1:-1:-1;;;28781:68:0;;10417:2:1;28781:68:0;;;10399:21:1;10456:2;10436:18;;;10429:30;10495:34;10475:18;;;10468:62;-1:-1:-1;;;10546:18:1;;;10539:32;10588:19;;28781:68:0;10215:398:1;28781:68:0;-1:-1:-1;;;;;28860:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28912:32;;713:25:1;;;28912:32:0;;686:18:1;28912:32:0;;;;;;;28617:335;;;:::o;16649:774::-;16738:37;16749:6;16757:9;16768:6;16738:10;:37::i;:::-;16786:38;16806:6;16814:9;16786:19;:38::i;:::-;16835:41;16850:6;16858:9;16869:6;16835:14;:41::i;:::-;16888:39;16901:6;16909:9;16920:6;16888:12;:39::i;:::-;16938:34;16954:6;16962:9;16938:15;:34::i;:::-;16983:35;17000:6;17008:9;16983:16;:35::i;:::-;17029;17038:6;17046:9;17057:6;17029:8;:35::i;:::-;-1:-1:-1;;;;;17095:17:0;;;;;;:9;:17;;;;;;:29;;17117:6;17095:21;:29::i;:::-;-1:-1:-1;;;;;17075:17:0;;;;;;:9;:17;;;;;:49;;;;17160:32;17085:6;17182:9;17160:13;:32::i;:::-;:78;;17232:6;17160:78;;;17195:34;17203:6;17211:9;17222:6;17195:7;:34::i;:::-;-1:-1:-1;;;;;17272:20:0;;;;;;:9;:20;;;;;;17135:103;;-1:-1:-1;17272:40:0;;17135:103;17272:24;:40::i;:::-;-1:-1:-1;;;;;17249:20:0;;;;;;;:9;:20;;;;;;;:63;;;;17328:43;;;;;;;;;;17356:14;713:25:1;;701:2;686:18;;567:177;17328:43:0;;;;;;;;17382:33;17397:6;17405:9;17382:14;:33::i;:::-;16727:696;16649:774;;;:::o;5533:162::-;5619:7;5665:12;5657:6;;;;5649:29;;;;-1:-1:-1;;;5649:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;5687:5:0;;;5533:162::o;33932:170::-;34002:7;34029:65;34062:31;;34029:28;34039:17;;34029:5;:9;;:28;;;;:::i;4320:82::-;4378:7;4395:5;4399:1;4395;:5;:::i;4496:82::-;4554:7;4571:5;4575:1;4571;:5;:::i;4408:82::-;4466:7;4483:5;4487:1;4483;:5;:::i;25297:360::-;25428:6;;25396:53;;25413:4;;-1:-1:-1;;;;;25428:6:0;25437:11;25396:8;:53::i;:::-;25460:6;;:189;;-1:-1:-1;;;25460:189:0;;25523:4;25460:189;;;11092:34:1;11142:18;;;11135:34;;;25460:6:0;11185:18:1;;;11178:34;;;11228:18;;;11221:34;-1:-1:-1;;;;;11292:15:1;;;11271:19;;;11264:44;25633:15:0;11324:19:1;;;11317:35;25460:6:0;;;;:22;;25490:9;;11026:19:1;;25460:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25297:360;;;:::o;17431:425::-;-1:-1:-1;;;;;17548:20:0;;;;;;:12;:20;;;;;;;;;17526:9;:17;;;;;;;:43;;:21;:43::i;:::-;17516:6;:53;;17508:113;;;;-1:-1:-1;;;17508:113:0;;11876:2:1;17508:113:0;;;11858:21:1;11915:2;11895:18;;;11888:30;11954:34;11934:18;;;11927:62;-1:-1:-1;;;12005:18:1;;;11998:45;12060:19;;17508:113:0;11674:411:1;17508:113:0;17632:15;;:46;;-1:-1:-1;;;17632:46:0;;-1:-1:-1;;;;;7239:32:1;;;17632:46:0;;;7221:51:1;7288:18;;;7281:34;;;17632:15:0;;;;:30;;7194:18:1;;17632:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;17712:20:0;;;;;;:12;:20;;;;;;:32;;-1:-1:-1;17737:6:0;17712:24;:32::i;:::-;-1:-1:-1;;;;;17689:20:0;;;;;;:12;:20;;;;;:55;17769:11;;:23;;17785:6;17769:15;:23::i;:::-;17755:11;:37;17808:40;;17832:15;;17824:6;;-1:-1:-1;;;;;17808:40:0;;;;;;;;17431:425;;:::o;32202:231::-;32329:9;;-1:-1:-1;;;;;32296:30:0;;32272:4;32296:30;;;:17;:30;;;;;;32272:4;;32341:15;;32296:42;;32329:9;32296:42;:::i;:::-;:60;:129;;;;;32410:15;;32377:30;32395:11;32377:17;:30::i;:::-;:48;32289:136;32202:231;-1:-1:-1;;32202:231:0:o;32777:666::-;-1:-1:-1;;;;;32868:19:0;;;;;;:6;:19;;;;;:26;:31;;32865:46;;32777:666;;:::o;32865:46::-;32921:14;32938:30;32956:11;32938:17;:30::i;:::-;32921:47;-1:-1:-1;32982:10:0;;32979:457;;33027:16;;:28;;33048:6;33027:20;:28::i;:::-;33008:16;:47;;;33077:6;;33070:42;;-1:-1:-1;;;33070:42:0;;-1:-1:-1;;;;;7239:32:1;;;33070:42:0;;;7221:51:1;7288:18;;;7281:34;;;33077:6:0;;;33070:23;;7194:18:1;;33070:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;33146:16:0;;:28;;33167:6;33146:20;:28::i;:::-;33127:16;:47;-1:-1:-1;;;;;33189:30:0;;;;;;:17;:30;;;;;;;;33222:15;33189:48;;33288:6;:19;;;;;:33;;;:45;;33326:6;33288:37;:45::i;:::-;-1:-1:-1;;;;;33252:19:0;;;;;;:6;:19;;;;;:33;;;:81;;;;33407:26;33384:50;;:22;:50::i;:::-;-1:-1:-1;;;;;33348:19:0;;;;;;:6;:19;;;;;:33;;:86;32854:589;32777:666;;:::o;29754:482::-;29841:1;29832:6;:10;:45;;;;-1:-1:-1;;;;;;29846:19:0;;;;;;:6;:19;;;;;:26;:31;29832:45;29829:177;;;34209:12;:19;;-1:-1:-1;;;;;34175:31:0;;;;;;:18;:31;;;;;:53;;;34239:30;;;;;;;;;;;;;-1:-1:-1;;;;;;34239:30:0;;;;;;29829:177;;;29926:11;;:45;;;;-1:-1:-1;;;;;;29941:19:0;;29970:1;29941:19;;;:6;:19;;;;;:26;:30;;29926:45;29923:83;;;29973:30;29991:11;29973:17;:30::i;:::-;-1:-1:-1;;;;;30046:19:0;;;;;;:6;:19;;;;;:26;30030:11;;:55;;30078:6;;30030:43;;:15;:43::i;:::-;:47;;:55::i;:::-;30016:11;:69;-1:-1:-1;;;;;30096:19:0;;;;;;:6;:19;;;;;:35;;;30178:50;30125:6;30178:22;:50::i;:::-;-1:-1:-1;;;;;30142:19:0;;;;;;;:6;:19;;;;;:33;;:86;;;;-1:-1:-1;29754:482:0:o;26107:401::-;26230:16;;;26244:1;26230:16;;;;;;;;26206:21;;26230:16;;;;;;;;-1:-1:-1;;26267:6:0;;:13;;;-1:-1:-1;;;26267:13:0;;;;26206:40;;-1:-1:-1;;;;;;26267:6:0;;;;:11;;-1:-1:-1;26267:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26257:4;26262:1;26257:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;26257:23:0;;;-1:-1:-1;;;;;26257:23:0;;;;;26309:5;26291:4;26296:1;26291:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26291:24:0;;;:7;;;;;;;;;:24;26326:6;;:174;;-1:-1:-1;;;26326:174:0;;:6;;;:57;;26391:9;;26326:174;;:6;;26432:4;;26459:9;;26484:15;;26326:174;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26195:313;26107:401;;;:::o;16286:355::-;-1:-1:-1;;;;;16390:20:0;;16382:70;;;;-1:-1:-1;;;16382:70:0;;13923:2:1;16382:70:0;;;13905:21:1;13962:2;13942:18;;;13935:30;14001:34;13981:18;;;13974:62;-1:-1:-1;;;14052:18:1;;;14045:35;14097:19;;16382:70:0;13721:401:1;16382:70:0;-1:-1:-1;;;;;16471:23:0;;16463:71;;;;-1:-1:-1;;;16463:71:0;;14329:2:1;16463:71:0;;;14311:21:1;14368:2;14348:18;;;14341:30;14407:34;14387:18;;;14380:62;-1:-1:-1;;;14458:18:1;;;14451:33;14501:19;;16463:71:0;14127:399:1;16463:71:0;16563:17;16573:6;16563:9;:17::i;:::-;16553:6;:27;;16545:88;;;;-1:-1:-1;;;16545:88:0;;14733:2:1;16545:88:0;;;14715:21:1;14772:2;14752:18;;;14745:30;14811:34;14791:18;;;14784:62;-1:-1:-1;;;14862:18:1;;;14855:47;14919:19;;16545:88:0;14531:413:1;20918:191:0;-1:-1:-1;;;;;21011:19:0;;;;;;:11;:19;;;;;;;;21010:20;:47;;;;-1:-1:-1;;;;;;21035:22:0;;;;;;:11;:22;;;;;;;;21034:23;21010:47;21007:95;;;21067:14;;-1:-1:-1;;;21067:14:0;;;;21059:41;;;;-1:-1:-1;;;21059:41:0;;15151:2:1;21059:41:0;;;15133:21:1;15190:2;15170:18;;;15163:30;-1:-1:-1;;;15209:18:1;;;15202:44;15263:18;;21059:41:0;14949:338:1;21121:331:0;-1:-1:-1;;;;;21225:19:0;;;;;;:11;:19;;;;;;;;21224:20;:47;;;;-1:-1:-1;;;;;;21249:22:0;;;;;;:11;:22;;;;;;;;21248:23;21224:47;:77;;;;-1:-1:-1;21296:4:0;;-1:-1:-1;;;;;21275:26:0;;;21296:4;;21275:26;;21224:77;:107;;;;-1:-1:-1;;;;;;21305:26:0;;12095:42;21305:26;;21224:107;21221:224;;;21393:15;;-1:-1:-1;;;;;21356:20:0;;;;;;:9;:20;;;;;;:32;;21381:6;21356:24;:32::i;:::-;21355:53;;21347:96;;;;-1:-1:-1;;;21347:96:0;;15494:2:1;21347:96:0;;;15476:21:1;15533:2;15513:18;;;15506:30;15572:32;15552:18;;;15545:60;15622:18;;21347:96:0;15292:354:1;21644:511:0;-1:-1:-1;;;;;21745:20:0;;21776:1;21745:20;;;:12;:20;;;;;;:33;21742:160;;-1:-1:-1;;;;;21826:17:0;;;;;;:9;:17;;;;;;;;;21800:12;:20;;;;;;;21789:32;;:6;;:10;:32::i;:::-;21788:55;;21780:120;;;;-1:-1:-1;;;21780:120:0;;15853:2:1;21780:120:0;;;15835:21:1;15892:2;15872:18;;;15865:30;15931:34;15911:18;;;15904:62;-1:-1:-1;;;15982:18:1;;;15975:50;16042:19;;21780:120:0;15651:416:1;21780:120:0;21925:4;;-1:-1:-1;;;;;21915:14:0;;;21925:4;;21915:14;21912:124;;21949:14;;21939:6;:24;;:47;;;-1:-1:-1;;;;;;21967:19:0;;;;;;:11;:19;;;;;;;;21939:47;:73;;;-1:-1:-1;;;;;;21990:22:0;;;;;;:11;:22;;;;;;;;21939:73;21931:103;;;;-1:-1:-1;;;21931:103:0;;16274:2:1;21931:103:0;;;16256:21:1;16313:2;16293:18;;;16286:30;-1:-1:-1;;;16332:18:1;;;16325:47;16389:18;;21931:103:0;16072:341:1;21931:103:0;22064:12;;22054:6;:22;;:45;;;-1:-1:-1;;;;;;22080:19:0;;;;;;:11;:19;;;;;;;;22054:45;:71;;;-1:-1:-1;;;;;;22103:22:0;;;;;;:11;:22;;;;;;;;22054:71;22046:101;;;;-1:-1:-1;;;22046:101:0;;16274:2:1;22046:101:0;;;16256:21:1;16313:2;16293:18;;;16286:30;-1:-1:-1;;;16332:18:1;;;16325:47;16389:18;;22046:101:0;16072:341:1;23081:485:0;23164:20;;;;:44;;;;-1:-1:-1;;;;;;23189:19:0;;;;;;:11;:19;;;;;;;;23188:20;23164:44;:71;;;;-1:-1:-1;;;;;;23213:22:0;;;;;;:11;:22;;;;;;;;23212:23;23164:71;:101;;;;-1:-1:-1;23260:4:0;;-1:-1:-1;;;;;23239:26:0;;;23260:4;;23239:26;;23164:101;:144;;;;-1:-1:-1;;;;;;23282:26:0;;12095:42;23282:26;;23164:144;:176;;;;-1:-1:-1;23333:6:0;;-1:-1:-1;;;;;23312:28:0;;;23333:6;;23312:28;;23164:176;23161:398;;;23390:9;23368:32;;;;:21;:32;;;;;;23403:12;-1:-1:-1;23360:127:0;;;;-1:-1:-1;;;23360:127:0;;16620:2:1;23360:127:0;;;16602:21:1;16659:2;16639:18;;;16632:30;16698:34;16678:18;;;16671:62;16769:34;16749:18;;;16742:62;-1:-1:-1;;;16820:19:1;;;16813:34;16864:19;;23360:127:0;16418:471:1;23360:127:0;23532:9;23510:32;;;;:21;:32;;;;;23545:12;23510:47;;23081:485;;:::o;21460:176::-;21557:4;;-1:-1:-1;;;;;21544:17:0;;;21557:4;;21544:17;:41;;;;-1:-1:-1;;;;;;21566:19:0;;;;;;:11;:19;;;;;;;;21565:20;21544:41;:58;;;;-1:-1:-1;21590:12:0;;;;;;;21589:13;21544:58;21541:88;;;21625:1;21604:9;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;21460:176:0;;:::o;26954:197::-;27046:41;27061:6;27069:9;27080:6;27046:14;:41::i;:::-;27043:101;;;27089:29;27104:13;;27089:14;:29::i;:::-;27140:1;27120:9;:22;26954:197;;;:::o;27159:160::-;-1:-1:-1;;;;;27265:19:0;;27240:4;27265:19;;;:11;:19;;;;;;;;27264:20;:47;;;;-1:-1:-1;;;;;;;27289:22:0;;;;;:11;:22;;;;;;;;27288:23;;27159:160;-1:-1:-1;27159:160:0:o;27717:575::-;27803:7;27859:1;27826:30;27838:6;27846:9;27826:11;:30::i;:::-;:34;:51;;;;-1:-1:-1;27865:12:0;;;;;;;27864:13;27826:51;27823:447;;;27889:17;27909:59;27937:30;27949:6;27957:9;27937:11;:30::i;:::-;27920:11;;27909:23;;:6;;:10;:23::i;:59::-;28024:4;28006:24;;;;:9;:24;;;;;;27889:79;;-1:-1:-1;28006:39:0;;27889:79;28006:28;:39::i;:::-;27997:4;27979:24;;;;:9;:24;;;;;;;:66;;;;28061:42;;-1:-1:-1;;;;;28061:42:0;;;;;;;28093:9;713:25:1;;701:2;686:18;;567:177;28061:42:0;;;;;;;;28117:8;;:21;28114:116;;28173:14;;28218:8;;28201:11;;28140:88;;28158:4;;-1:-1:-1;;;;;28173:14:0;;;;28190:37;;28218:8;28190:23;;:6;;:10;:23::i;:37::-;28140:9;:88::i;:::-;28247:21;:6;28258:9;28247:10;:21::i;:::-;28240:28;;;;;27823:447;-1:-1:-1;28278:6:0;27717:575;-1:-1:-1;;27717:575:0:o;4232:82::-;4290:7;4307:5;4311:1;4307;:5;:::i;29257:489::-;-1:-1:-1;;;;;29339:17:0;;29366:1;29339:17;;;:6;:17;;;;;:24;:28;29336:75;;29369:40;29388:9;29399;29369:18;:40::i;:::-;29437:4;;-1:-1:-1;;;;;29424:17:0;;;29437:4;;29424:17;:46;;;;-1:-1:-1;;;;;;29445:14:0;;29469:1;29445:14;;;:6;:14;;;;;:21;:25;;29424:46;29421:117;;;29490:46;29510:25;29528:6;29510:17;:25::i;:::-;29490:15;;;:19;:46::i;:::-;29472:15;:64;29421:117;-1:-1:-1;;;;;29552:24:0;;;;;;:16;:24;;;;;;;;29548:67;;29578:35;29587:6;29595:17;29605:6;29595:9;:17::i;29578:35::-;-1:-1:-1;;;;;29629:27:0;;;;;;:16;:27;;;;;;;;29625:76;;29658:41;29667:9;29678:20;29688:9;29678;:20::i;29658:41::-;29711:27;29723:14;;29711:11;:27::i;34285:288::-;34401:12;34414:19;;:21;;34434:1;;34414:21;:::i;:::-;34401:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34366:31:0;;;;;:18;:31;;;;;;;;34353:12;:45;;34401:35;;;;;34353:12;:45;;;;;;:::i;:::-;;;;;;;;;;;;;:83;;-1:-1:-1;;;;;;34353:83:0;-1:-1:-1;;;;;34353:83:0;;;;;;34505:31;;;;;:18;:31;;;;;;;;34466:12;34479:19;;34505:31;;:18;34353:45;34479:21;;-1:-1:-1;;34479:21:0;:::i;:::-;34466:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34466:35:0;34447:55;;;;;;;;;;;;:89;34547:12;:18;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;34547:18:0;;;;;-1:-1:-1;;;;;;34547:18:0;;;;;;-1:-1:-1;34285:288:0:o;26516:430::-;26614:4;26631:13;26657:14;;26647:6;:24;;26631:40;;26682:19;26732:13;;26704:24;26722:4;26704:9;:24::i;:::-;26764:8;;26704:41;-1:-1:-1;26704:41:0;;-1:-1:-1;26764:8:0;;26763:9;:24;;;;-1:-1:-1;26776:11:0;;;;26763:24;:42;;;;-1:-1:-1;26791:14:0;;-1:-1:-1;;;26791:14:0;;;;26763:42;:54;;;;;26809:8;26763:54;:78;;;;-1:-1:-1;;;;;;26822:19:0;;;;;;:11;:19;;;;;;;;26821:20;26763:78;:113;;;;-1:-1:-1;26872:4:0;;-1:-1:-1;;;;;26859:17:0;;;26872:4;;26859:17;26763:113;:140;;;;;26893:10;;26880:9;;:23;;26763:140;:158;;;;;26907:14;26763:158;:175;;;;-1:-1:-1;26926:12:0;;;;;;;26925:13;26763:175;26756:182;26516:430;-1:-1:-1;;;;;;26516:430:0:o;23890:1399::-;10945:4;10934:8;;:15;;;;;;;;;;;;;;;;;;23961:20:::1;23984:98;24080:1;23985:89;24063:10;;23985:73;24047:10;;23985:57;24027:14;;23985:37;24009:12;;23985:19;24002:1;23985:12;;:16;;:19;;;;:::i;23984:98::-;23961:121;;24093:32;24128:42;24157:12;24128:24;24139:12;;24128:6;:10;;:24;;;;:::i;:42::-;24093:77:::0;-1:-1:-1;24181:14:0::1;24198:36;:6:::0;24093:77;24198:10:::1;:36::i;:::-;24181:53:::0;-1:-1:-1;24270:21:0::1;24302:24;24181:53:::0;24302:16:::1;:24::i;:::-;24337:20;24360:41;:21;24386:14:::0;24360:25:::1;:41::i;:::-;24337:64;;24412:19;24433:48;24450:30;24467:12;;24450;:16;;:30;;;;:::i;:::-;24433:12:::0;;:16:::1;:48::i;:::-;24412:69;;24492:29;24524;24540:12;;24524:11;:15;;:29;;;;:::i;:::-;24492:61:::0;-1:-1:-1;24567:34:0;;24564:123:::1;;24665:18;::::0;24603:81:::1;::::0;24616:24;;24642:21;;-1:-1:-1;;;;;24665:18:0::1;24603:12;:81::i;:::-;24746:12;::::0;24697:23:::1;::::0;24723:36:::1;::::0;:18:::1;:11:::0;24739:1:::1;24723:15;:18::i;:36::-;24697:62:::0;-1:-1:-1;24773:19:0;;24770:79:::1;;24802:18;::::0;24794:53:::1;::::0;-1:-1:-1;;;;;24802:18:0;;::::1;::::0;24794:53;::::1;;;::::0;24831:15;;24802:18:::1;24794:53:::0;24802:18;24794:53;24831:15;24802:18;24794:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24770:79;24906:10;::::0;24859:21:::1;::::0;24883:34:::1;::::0;:18:::1;:11:::0;24899:1:::1;24883:15;:18::i;:34::-;24859:58:::0;-1:-1:-1;24931:17:0;;24928:53:::1;;24950:29;24965:13;24950:14;:29::i;:::-;25038:10;::::0;24991:21:::1;::::0;25015:34:::1;::::0;:18:::1;:11:::0;25031:1:::1;25015:15;:18::i;:34::-;24991:58:::0;-1:-1:-1;25063:17:0;;25060:73:::1;;25090:16;::::0;25082:49:::1;::::0;-1:-1:-1;;;;;25090:16:0;;::::1;::::0;25082:49;::::1;;;::::0;25117:13;;25090:16:::1;25082:49:::0;25090:16;25082:49;25117:13;25090:16;25082:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25060:73;25166:21;25201:25:::0;;25198:84:::1;;25236:20;::::0;25228:52:::1;::::0;-1:-1:-1;;;;;25236:20:0;;::::1;::::0;25228:52;::::1;;;::::0;25267:12;;25236:20:::1;25228:52:::0;25236:20;25228:52;25267:12;25236:20;25228:52;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25198:84;-1:-1:-1::0;;10954:8:0;:16;;-1:-1:-1;;10954:16:0;;;-1:-1:-1;;;;;;;;;;23890:1399:0:o;27327:382::-;-1:-1:-1;;;;;27429:13:0;;27406:7;27429:13;;;:5;:13;;;;;;;;;:33;;-1:-1:-1;;;;;;27446:16:0;;;;;;:5;:16;;;;;;;;27429:33;27426:76;;;27471:11;;:29;;27495:3;27471:15;:29::i;:::-;27464:36;;;;27426:76;27528:4;;-1:-1:-1;;;;;27515:17:0;;;27528:4;;27515:17;:41;;;;;27554:1;27536:7;;:20;27515:41;27512:76;;;27577:8;;27565:7;;:21;;:11;:21::i;27512:76::-;27611:4;;-1:-1:-1;;;;;27601:14:0;;;27611:4;;27601:14;:39;;;;;27638:1;27619:8;;:21;27601:39;27598:75;;;27662:8;;27649;;:22;;:12;:22::i;27598:75::-;-1:-1:-1;27690:11:0;;27327:382;;;;:::o;30759:710::-;30840:12;:19;30813:24;30873:21;;;30870:37;;30898:7;30759:710;:::o;30870:37::-;30917:15;30947;30965:9;30947:27;;30985:18;31018:444;31034:3;31024:7;:13;:46;;;;;31054:16;31041:10;:29;31024:46;31018:444;;;31106:16;31090:12;;:32;31087:55;;31139:1;31124:12;:16;31087:55;31156:15;31174:12;31187;;31174:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;31174:26:0;;-1:-1:-1;31218:25:0;31174:26;31218:16;:25::i;:::-;31215:86;;;31263:36;31282:7;31291;31263:18;:36::i;:::-;31325:35;31337:22;31349:9;31337:7;;:11;:22::i;:::-;31325:7;;:11;:35::i;:::-;31315:45;;31385:9;31409:12;:14;;31375:19;;-1:-1:-1;31409:12:0;:14;;;:::i;:::-;;;;;;31438:12;;;;;:::i;:::-;;;;31072:390;31018:444;;;30802:667;;;;30759:710;:::o;25665:434::-;25755:16;;;25769:1;25755:16;;;;;;;;25731:21;;25755:16;;;;;;;;;;-1:-1:-1;25755:16:0;25731:40;;25800:4;25782;25787:1;25782:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25782:23:0;;;:7;;;;;;;;;;:23;;;;25826:6;;:13;;;-1:-1:-1;;;25826:13:0;;;;:6;;;;;:11;;:13;;;;;25782:7;;25826:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25816:4;25821:1;25816:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25816:23:0;;;:7;;;;;;;;;:23;25882:6;;25850:53;;25867:4;;25882:6;25891:11;25850:8;:53::i;:::-;25914:6;;:177;;-1:-1:-1;;;25914:177:0;;-1:-1:-1;;;;;25914:6:0;;;;:57;;:177;;25986:11;;25914:6;;26028:4;;26055;;26075:15;;25914:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30244:507;30338:6;;30331:39;;-1:-1:-1;;;30331:39:0;;30364:4;30331:39;;;1864:51:1;30307:21:0;;-1:-1:-1;;;;;30338:6:0;;30331:24;;1837:18:1;;30331:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30409:6;;30307:63;;-1:-1:-1;30381:50:0;;30398:9;;-1:-1:-1;;;;;30409:6:0;30425:4;30381:16;:50::i;:::-;30466:6;;30459:39;;-1:-1:-1;;;30459:39:0;;30492:4;30459:39;;;1864:51:1;30442:14:0;;30459:58;;30503:13;;-1:-1:-1;;;;;30466:6:0;;30459:24;;1837:18:1;;30459:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:58::-;30545:14;;30442:75;;-1:-1:-1;30545:26:0;;30442:75;30545:18;:26::i;:::-;30528:14;:43;30601:16;;:28;;30622:6;30601:20;:28::i;:::-;30582:16;:47;30730:11;;30682:31;;30660:83;;30682:60;;:43;;30718:6;30682:35;:43::i;:60::-;30660:17;;;:21;:83::i;:::-;30640:17;:103;-1:-1:-1;;;30244:507:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:316::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;-1:-1:-1;;1582:23:1;;;1652:2;1637:18;;1624:32;;-1:-1:-1;1703:2:1;1688:18;;;1675:32;;1397:316;-1:-1:-1;1397:316:1:o;1926:456::-;2003:6;2011;2019;2072:2;2060:9;2051:7;2047:23;2043:32;2040:52;;;2088:1;2085;2078:12;2040:52;2127:9;2114:23;2146:31;2171:5;2146:31;:::i;:::-;2196:5;-1:-1:-1;2253:2:1;2238:18;;2225:32;2266:33;2225:32;2266:33;:::i;:::-;1926:456;;2318:7;;-1:-1:-1;;;2372:2:1;2357:18;;;;2344:32;;1926:456::o;2387:247::-;2446:6;2499:2;2487:9;2478:7;2474:23;2470:32;2467:52;;;2515:1;2512;2505:12;2467:52;2554:9;2541:23;2573:31;2598:5;2573:31;:::i;2639:180::-;2698:6;2751:2;2739:9;2730:7;2726:23;2722:32;2719:52;;;2767:1;2764;2757:12;2719:52;-1:-1:-1;2790:23:1;;2639:180;-1:-1:-1;2639:180:1:o;3013:730::-;3144:6;3152;3160;3168;3176;3184;3192;3200;3208;3261:3;3249:9;3240:7;3236:23;3232:33;3229:53;;;3278:1;3275;3268:12;3229:53;-1:-1:-1;;3301:23:1;;;3371:2;3356:18;;3343:32;;-1:-1:-1;3422:2:1;3407:18;;3394:32;;3473:2;3458:18;;3445:32;;-1:-1:-1;3524:3:1;3509:19;;3496:33;;-1:-1:-1;3576:3:1;3561:19;;3548:33;;-1:-1:-1;3628:3:1;3613:19;;3600:33;;-1:-1:-1;3680:3:1;3665:19;;3652:33;;-1:-1:-1;3732:3:1;3717:19;3704:33;;-1:-1:-1;3013:730:1;-1:-1:-1;3013:730:1:o;3748:118::-;3834:5;3827:13;3820:21;3813:5;3810:32;3800:60;;3856:1;3853;3846:12;3871:382;3936:6;3944;3997:2;3985:9;3976:7;3972:23;3968:32;3965:52;;;4013:1;4010;4003:12;3965:52;4052:9;4039:23;4071:31;4096:5;4071:31;:::i;:::-;4121:5;-1:-1:-1;4178:2:1;4163:18;;4150:32;4191:30;4150:32;4191:30;:::i;:::-;4240:7;4230:17;;;3871:382;;;;;:::o;4258:241::-;4314:6;4367:2;4355:9;4346:7;4342:23;4338:32;4335:52;;;4383:1;4380;4373:12;4335:52;4422:9;4409:23;4441:28;4463:5;4441:28;:::i;4504:813::-;4599:6;4607;4615;4623;4631;4684:3;4672:9;4663:7;4659:23;4655:33;4652:53;;;4701:1;4698;4691:12;4652:53;4740:9;4727:23;4759:31;4784:5;4759:31;:::i;:::-;4809:5;-1:-1:-1;4866:2:1;4851:18;;4838:32;4879:33;4838:32;4879:33;:::i;:::-;4931:7;-1:-1:-1;4990:2:1;4975:18;;4962:32;5003:33;4962:32;5003:33;:::i;:::-;5055:7;-1:-1:-1;5114:2:1;5099:18;;5086:32;5127:33;5086:32;5127:33;:::i;:::-;5179:7;-1:-1:-1;5238:3:1;5223:19;;5210:33;5252;5210;5252;:::i;:::-;5304:7;5294:17;;;4504:813;;;;;;;;:::o;5646:388::-;5714:6;5722;5775:2;5763:9;5754:7;5750:23;5746:32;5743:52;;;5791:1;5788;5781:12;5743:52;5830:9;5817:23;5849:31;5874:5;5849:31;:::i;:::-;5899:5;-1:-1:-1;5956:2:1;5941:18;;5928:32;5969:33;5928:32;5969:33;:::i;6299:329::-;6501:2;6483:21;;;6540:1;6520:18;;;6513:29;-1:-1:-1;;;6573:2:1;6558:18;;6551:36;6619:2;6604:18;;6299:329::o;7739:127::-;7800:10;7795:3;7791:20;7788:1;7781:31;7831:4;7828:1;7821:15;7855:4;7852:1;7845:15;7871:168;7944:9;;;7975;;7992:15;;;7986:22;;7972:37;7962:71;;8013:18;;:::i;8044:217::-;8084:1;8110;8100:132;;8154:10;8149:3;8145:20;8142:1;8135:31;8189:4;8186:1;8179:15;8217:4;8214:1;8207:15;8100:132;-1:-1:-1;8246:9:1;;8044:217::o;8688:245::-;8755:6;8808:2;8796:9;8787:7;8783:23;8779:32;8776:52;;;8824:1;8821;8814:12;8776:52;8856:9;8850:16;8875:28;8897:5;8875:28;:::i;10618:128::-;10685:9;;;10706:11;;;10703:37;;;10720:18;;:::i;11363:306::-;11451:6;11459;11467;11520:2;11508:9;11499:7;11495:23;11491:32;11488:52;;;11536:1;11533;11526:12;11488:52;11565:9;11559:16;11549:26;;11615:2;11604:9;11600:18;11594:25;11584:35;;11659:2;11648:9;11644:18;11638:25;11628:35;;11363:306;;;;;:::o;12090:125::-;12155:9;;;12176:10;;;12173:36;;;12189:18;;:::i;12352:251::-;12422:6;12475:2;12463:9;12454:7;12450:23;12446:32;12443:52;;;12491:1;12488;12481:12;12443:52;12523:9;12517:16;12542:31;12567:5;12542:31;:::i;12608:127::-;12669:10;12664:3;12660:20;12657:1;12650:31;12700:4;12697:1;12690:15;12724:4;12721:1;12714:15;12740:461;12793:3;12831:5;12825:12;12858:6;12853:3;12846:19;12884:4;12913:2;12908:3;12904:12;12897:19;;12950:2;12943:5;12939:14;12971:1;12981:195;12995:6;12992:1;12989:13;12981:195;;;13060:13;;-1:-1:-1;;;;;13056:39:1;13044:52;;13116:12;;;;13151:15;;;;13092:1;13010:9;12981:195;;;-1:-1:-1;13192:3:1;;12740:461;-1:-1:-1;;;;;12740:461:1:o;13206:510::-;13477:6;13466:9;13459:25;13520:3;13515:2;13504:9;13500:18;13493:31;13440:4;13541:57;13593:3;13582:9;13578:19;13570:6;13541:57;:::i;:::-;-1:-1:-1;;;;;13634:32:1;;;;13629:2;13614:18;;13607:60;-1:-1:-1;13698:2:1;13683:18;13676:34;13533:65;13206:510;-1:-1:-1;;13206:510:1:o;16894:127::-;16955:10;16950:3;16946:20;16943:1;16936:31;16986:4;16983:1;16976:15;17010:4;17007:1;17000:15;17026:135;17065:3;17086:17;;;17083:43;;17106:18;;:::i;:::-;-1:-1:-1;17153:1:1;17142:13;;17026:135::o;17166:582::-;17465:6;17454:9;17447:25;17508:6;17503:2;17492:9;17488:18;17481:34;17551:3;17546:2;17535:9;17531:18;17524:31;17428:4;17572:57;17624:3;17613:9;17609:19;17601:6;17572:57;:::i;:::-;-1:-1:-1;;;;;17665:32:1;;;;17660:2;17645:18;;17638:60;-1:-1:-1;17729:3:1;17714:19;17707:35;17564:65;17166:582;-1:-1:-1;;;17166:582:1:o;17753:184::-;17823:6;17876:2;17864:9;17855:7;17851:23;17847:32;17844:52;;;17892:1;17889;17882:12;17844:52;-1:-1:-1;17915:16:1;;17753:184;-1:-1:-1;17753:184:1:o
Swarm Source
ipfs://1d0facecc6318549f6cc2cee00223a1d6a86f6ff82278a2dfb48e5b8b3626597
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.