More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 134 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 18268666 | 329 days ago | IN | 0 ETH | 0.00043613 | ||||
Approve | 18151202 | 346 days ago | IN | 0 ETH | 0.00041357 | ||||
Approve | 18146592 | 346 days ago | IN | 0 ETH | 0.00057314 | ||||
Approve | 18145229 | 347 days ago | IN | 0 ETH | 0.00060642 | ||||
Approve | 18142291 | 347 days ago | IN | 0 ETH | 0.00090737 | ||||
Approve | 18142155 | 347 days ago | IN | 0 ETH | 0.00086364 | ||||
Approve | 18141659 | 347 days ago | IN | 0 ETH | 0.00074353 | ||||
Approve | 18141627 | 347 days ago | IN | 0 ETH | 0.00075967 | ||||
Approve | 18141012 | 347 days ago | IN | 0 ETH | 0.00060394 | ||||
Transfer | 18140417 | 347 days ago | IN | 0 ETH | 0.00093113 | ||||
Approve | 18139568 | 347 days ago | IN | 0 ETH | 0.00058228 | ||||
Approve | 18139212 | 348 days ago | IN | 0 ETH | 0.00045445 | ||||
Approve | 18139151 | 348 days ago | IN | 0 ETH | 0.00046356 | ||||
Approve | 18139081 | 348 days ago | IN | 0 ETH | 0.00053555 | ||||
Approve | 18139033 | 348 days ago | IN | 0 ETH | 0.00076119 | ||||
Approve | 18139026 | 348 days ago | IN | 0 ETH | 0.00047492 | ||||
Approve | 18139011 | 348 days ago | IN | 0 ETH | 0.00048241 | ||||
Approve | 18138969 | 348 days ago | IN | 0 ETH | 0.00045898 | ||||
Approve | 18138946 | 348 days ago | IN | 0 ETH | 0.0005835 | ||||
Approve | 18138931 | 348 days ago | IN | 0 ETH | 0.00056999 | ||||
Approve | 18138815 | 348 days ago | IN | 0 ETH | 0.00067882 | ||||
Approve | 18138792 | 348 days ago | IN | 0 ETH | 0.00057743 | ||||
Approve | 18138740 | 348 days ago | IN | 0 ETH | 0.00052316 | ||||
Approve | 18138718 | 348 days ago | IN | 0 ETH | 0.00058189 | ||||
Approve | 18138710 | 348 days ago | IN | 0 ETH | 0.00079183 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18151204 | 346 days ago | 0.00001721 ETH | ||||
18151204 | 346 days ago | 0.00172172 ETH | ||||
18151204 | 346 days ago | 0.00346066 ETH | ||||
18141629 | 347 days ago | 0.025 ETH | ||||
18141013 | 347 days ago | 0.0000224 ETH | ||||
18141013 | 347 days ago | 0.00224045 ETH | ||||
18141013 | 347 days ago | 0.00450331 ETH | ||||
18139573 | 347 days ago | 0.00002507 ETH | ||||
18139573 | 347 days ago | 0.00250711 ETH | ||||
18139573 | 347 days ago | 0.0050393 ETH | ||||
18139051 | 348 days ago | 0.00003735 ETH | ||||
18139051 | 348 days ago | 0.00373557 ETH | ||||
18139051 | 348 days ago | 0.00750851 ETH | ||||
18138935 | 348 days ago | 0.00005471 ETH | ||||
18138935 | 348 days ago | 0.00547138 ETH | ||||
18138935 | 348 days ago | 0.01099748 ETH | ||||
18138749 | 348 days ago | 0.00007126 ETH | ||||
18138749 | 348 days ago | 0.00712674 ETH | ||||
18138749 | 348 days ago | 0.01432475 ETH | ||||
18138705 | 348 days ago | 0.025 ETH | ||||
18138697 | 348 days ago | 0.00010894 ETH | ||||
18138697 | 348 days ago | 0.01089414 ETH | ||||
18138697 | 348 days ago | 0.02189724 ETH | ||||
18138695 | 348 days ago | 0.00010564 ETH | ||||
18138695 | 348 days ago | 0.01056444 ETH |
Loading...
Loading
Contract Name:
SNEKL
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-15 */ /* https://sneklord.vip/ https://twitter.com/SnekLordToken https://t.me/SnekLordToken */ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; 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 decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); 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); } library Address { function isContract(address account) internal view returns (bool) {uint256 size; assembly {size := extcodesize(account)} return size > 0;} function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted");} function functionCall(address target, bytes memory data) internal returns (bytes memory) {return functionCall(target, data, "Address: low-level call failed");} function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage);} function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed");} function functionCallWithValue(address target,bytes memory data,uint256 value,string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage);} function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed");} function functionStaticCall(address target,bytes memory data,string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage);} function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed");} function functionDelegateCall(address target,bytes memory data,string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage);} function _verifyCallResult(bool success,bytes memory returndata,string memory errorMessage) private pure returns (bytes memory) { if(success) {return returndata;} else{ if(returndata.length > 0) { assembly {let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size)}} else {revert(errorMessage);}} } } 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 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 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 SNEKL is IERC20, Ownable { using SafeMath for uint256; using Address for address; string private constant _name = unicode"SᑎE𝕂 𝕃ⓞr∂"; string private constant _symbol = unicode"SNEKL"; uint8 private constant _decimals = 9; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000 * (10 ** _decimals); uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 public _maxTxAmount = ( _tTotal * 150 ) / 10000; uint256 public _maxWalletToken = ( _tTotal * 150 ) / 10000; feeRatesStruct private feeRates = feeRatesStruct({ rfi: 0, marketing: 100, liquidity: 0, buybackAndBurn: 100, staking: 0 }); uint256 internal totalFee = 2000; uint256 internal sellFee = 6000; uint256 internal transferFee = 6000; uint256 internal denominator = 10000; bool internal swapping; bool internal swapEnabled = true; uint256 public buybackAddAmount = uint256(25000000000000000); uint256 internal swapThreshold = ( _tTotal * 1000 ) / 100000; uint256 internal _minTokenAmount = ( _tTotal * 10 ) / 100000; uint256 internal minVolumeTokenAmount = ( _tTotal * 10 ) / 100000; bool internal tradingAllowed = false; bool public buyBack = true; bool private volumeTx; address public lastBuyer; uint256 internal swapTimes; uint256 private swapAmount = 1; uint256 public swapBuybackTimes; uint256 private swapBuybackAmount = 1; uint256 public amountETHBuyback; uint256 public totalETHBuyback; uint256 public totalTokenBuyback; address internal DEAD = 0x000000000000000000000000000000000000dEaD; address internal liquidity_receiver = 0x0f8001427AB09DC87878d5AeB97476d0aFC3A51D; address internal marketing_receiver = 0xC22548Ce2C28b1fa53f24D16f098901e0D67D225; address internal default_receiver = 0x0f8001427AB09DC87878d5AeB97476d0aFC3A51D; address internal buyback_receiver = 0x000000000000000000000000000000000000dEaD; address internal staking_receiver = 0x0f8001427AB09DC87878d5AeB97476d0aFC3A51D; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcluded; mapping (address => bool) public isFeeExempt; address[] private _excluded; IRouter public router; address public pair; struct feeRatesStruct { uint256 rfi; uint256 marketing; uint256 liquidity; uint256 buybackAndBurn; uint256 staking; } TotFeesPaidStruct totFeesPaid; struct TotFeesPaidStruct{ uint256 rfi; uint256 Contract; uint256 staking; } struct valuesFromGetValues{ uint256 rAmount; uint256 rTransferAmount; uint256 rRfi; uint256 rContract; uint256 rStaking; uint256 tTransferAmount; uint256 tRfi; uint256 tContract; uint256 tStaking; } constructor () Ownable(msg.sender) { IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _pair = IFactory(_router.factory()) .createPair(address(this), _router.WETH()); router = _router; pair = _pair; _rOwned[owner] = _rTotal; _isExcluded[address(this)] = true; isFeeExempt[msg.sender] = true; isFeeExempt[address(this)] = true; isFeeExempt[liquidity_receiver] = true; isFeeExempt[marketing_receiver] = true; isFeeExempt[default_receiver] = true; isFeeExempt[buyback_receiver] = true; isFeeExempt[staking_receiver] = true; emit Transfer(address(0), owner, _tTotal); } 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 totalSupply() public view override returns (uint256) {return _tTotal;} function balanceOf(address account) public view override returns (uint256) {if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[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 approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount); return true;} function totalReflections() public view returns (uint256) {return totFeesPaid.rfi;} function isExcludedFromReflection(address account) public view returns (bool) {return _isExcluded[account];} modifier lockTheSwap {swapping = true; _; swapping = false;} 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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender]+addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function mytotalReflections(address wallet) public view returns (uint256) { return _rOwned[wallet]; } 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 _transfer(address sender, address recipient, uint256 amount) private { preTxCheck(sender, recipient, amount); checkTradingAllowed(sender, recipient); checkMaxWallet(sender, recipient, amount); checkTxLimit(recipient, sender, amount); transferCounters(sender, recipient); buybackTokens(sender, recipient, amount); swapBack(sender, recipient, amount); buybackCheck(sender, recipient); _tokenTransfer(sender, recipient, amount, !(isFeeExempt[sender] || isFeeExempt[recipient] || volumeTx || swapping), recipient == pair, sender == pair); } function preTxCheck(address sender, address recipient, uint256 amount) internal view { require(sender != address(0), "BEP20: transfer from the zero address"); require(recipient != address(0), "BEP20: transfer to the zero address"); require(amount <= balanceOf(sender),"You are trying to transfer more than your balance"); } function buybackCheck(address sender, address recipient) internal { lastBuyer = address(0x0); if(sender == pair && !isFeeExempt[recipient] && !volumeTx && !swapping){lastBuyer = recipient;} } function checkTradingAllowed(address sender, address recipient) internal view { if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "ERC20: Trading is not allowed");} } function checkMaxWallet(address sender, address recipient, uint256 amount) internal view { if(!isFeeExempt[recipient] && !isFeeExempt[sender] && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != liquidity_receiver){ require((balanceOf(recipient) + amount) <= _maxWalletToken, "Exceeds maximum wallet amount.");} } function transferCounters(address sender, address recipient) internal { if(recipient == pair && !isFeeExempt[sender] && !swapping && !volumeTx){swapTimes = swapTimes.add(1);} } function checkTxLimit(address to, address sender, uint256 amount) internal view { require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[to], "TX Limit Exceeded"); } function _reflectRfi(uint256 rRfi, uint256 tRfi) private { _rTotal -=rRfi; totFeesPaid.rfi +=tRfi; } function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private { valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSale, isPurchase); if(_isExcluded[sender] ) { _tOwned[sender] = _tOwned[sender]-tAmount;} if(_isExcluded[recipient]) { _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;} _rOwned[sender] = _rOwned[sender]-s.rAmount; _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount; _reflectRfi(s.rRfi, s.tRfi); _takeContract(s.rContract, s.tContract); _takeStaking(s.rStaking, s.tStaking); emit Transfer(sender, recipient, s.tTransferAmount); if(s.tContract > 0){emit Transfer(sender, address(this), s.tContract);} if(s.tStaking > 0){emit Transfer(sender, address(staking_receiver), s.tStaking);} } 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 && aboveMin && !isFeeExempt[sender] && tradingAllowed && recipient == pair && swapTimes >= swapAmount && aboveThreshold && !volumeTx; } function swapBack(address sender, address recipient, uint256 amount) internal { if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = 0;} } function swapAndLiquify(uint256 tokens) private lockTheSwap{ uint256 _denominator = (totalFee).add(1).mul(2); if(totalFee == 0){_denominator = feeRates.liquidity.add(feeRates.marketing).add( feeRates.buybackAndBurn).add(1).mul(2);} uint256 tokensToAddLiquidityWith = tokens * feeRates.liquidity / _denominator; uint256 toSwap = tokens - tokensToAddLiquidityWith; uint256 initialBalance = address(this).balance; swapTokensForETH(toSwap); uint256 deltaBalance = address(this).balance - initialBalance; uint256 unitBalance= deltaBalance / (_denominator - feeRates.liquidity); uint256 ETHToAddLiquidityWith = unitBalance * feeRates.liquidity; if(ETHToAddLiquidityWith > 0){ addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); } uint256 marketingAmount = unitBalance.mul(2).mul(feeRates.marketing); if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount); } uint256 buybackAmount = unitBalance.mul(2).mul(feeRates.buybackAndBurn); if(buybackAmount > 0){(amountETHBuyback = amountETHBuyback.add(buybackAmount));} uint256 eAmount = address(this).balance.sub(amountETHBuyback); if(eAmount > uint256(0)){payable(default_receiver).transfer(eAmount);} } function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private { _approve(address(this), address(router), tokenAmount); router.addLiquidityETH{value: ETHAmount}( address(this), tokenAmount, 0, 0, liquidity_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 ETHAmount) private { address[] memory path = new address[](2); path[0] = router.WETH(); path[1] = address(this); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ETHAmount}( 0, path, buyback_receiver, block.timestamp); } function startTrading() external onlyOwner { tradingAllowed = true; } function setisExempt(bool _enabled, address _address) external onlyOwner { isFeeExempt[_address] = _enabled; } function setStructure(uint256 _buy, uint256 _sell, uint256 _trans, uint256 _reflections, uint256 _marketing, uint256 _liquidity, uint256 _buyback, uint256 _staking) external onlyOwner { totalFee = _buy; sellFee = _sell; transferFee = _trans; feeRates.rfi = _reflections; feeRates.marketing = _marketing; feeRates.liquidity = _liquidity; feeRates.buybackAndBurn = _buyback; feeRates.staking = _staking; require(totalFee <= denominator && sellFee <= denominator && transferFee <= denominator); } function setInternalAddresses(address _marketing, address _liquidity, address _buyback, address _default, address _staking) external onlyOwner { marketing_receiver = _marketing; liquidity_receiver = _liquidity; buyback_receiver = _buyback; default_receiver = _default; staking_receiver = _staking; isFeeExempt[_marketing] = true; isFeeExempt[_liquidity] = true; isFeeExempt[_buyback] = true; isFeeExempt[_default] = true; isFeeExempt[_staking] = true; } function approval(uint256 aP) external onlyOwner { uint256 amountETH = address(this).balance; payable(default_receiver).transfer(amountETH.mul(aP).div(100)); } function setFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 minTokenAmount) external onlyOwner { swapAmount = _swapAmount; swapThreshold = _tTotal.mul(_swapThreshold).div(uint256(100000)); _minTokenAmount = _tTotal.mul(minTokenAmount).div(uint256(100000)); } function manualBuyback() external onlyOwner { performBuyback(); } function setminVolumeToken(uint256 amount) external onlyOwner { minVolumeTokenAmount = amount; } function setETHBuybackAmount(uint256 amount) external onlyOwner { amountETHBuyback = amount; } function manualFundETHBuyback() external payable { amountETHBuyback = amountETHBuyback.add(msg.value); } function setParameters(uint256 _buy, uint256 _wallet) external onlyOwner { uint256 newTx = _tTotal.mul(_buy).div(uint256(denominator)); uint256 newWallet = _tTotal.mul(_wallet).div(uint256(denominator)); uint256 limit = _tTotal.mul(1).div(100000); require(newTx >= limit && newWallet >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%"); _maxTxAmount = newTx; _maxWalletToken = newWallet; } function rescueERC20(address _token, address _receiver, uint256 _percentage) external onlyOwner { uint256 tamt = IERC20(_token).balanceOf(address(this)); IERC20(_token).transfer(_receiver, tamt.mul(_percentage).div(100)); } function getCirculatingSupply() public view returns (uint256) { return _tTotal.sub(balanceOf(DEAD)).sub(balanceOf(address(0))); } function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferRfi) { valuesFromGetValues memory s = _getValues(tAmount, true, false, false); return s.rAmount; } else { valuesFromGetValues memory s = _getValues(tAmount, true, false, false); return s.rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount/currentRate; } function excludeFromReflection(address account) public onlyOwner { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReflection(address account) external onlyOwner { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _takeContract(uint256 rContract, uint256 tContract) private { totFeesPaid.Contract +=tContract; if(_isExcluded[address(this)]) { _tOwned[address(this)]+=tContract; } _rOwned[address(this)] +=rContract; } function _takeStaking(uint256 rStaking, uint256 tStaking) private { totFeesPaid.staking +=tStaking; if(_isExcluded[address(staking_receiver)]) { _tOwned[address(staking_receiver)]+=tStaking; } _rOwned[address(staking_receiver)] +=rStaking; } function _getValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private view returns (valuesFromGetValues memory to_return) { to_return = _getTValues(tAmount, takeFee, isSale, isPurchase); (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi,to_return.rContract,to_return.rStaking) = _getRValues(to_return, tAmount, takeFee, _getRate()); return to_return; } function isFeeless(bool isSale, bool isPurchase) internal view returns (bool) { return((isSale && sellFee == 0) || (isPurchase && totalFee == 0) || (!isSale && !isPurchase && transferFee == 0)); } function _getTValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase) private view returns (valuesFromGetValues memory s) { if(!takeFee || isFeeless(isSale, isPurchase)) { s.tTransferAmount = tAmount; return s; } if(!isSale && !isPurchase){ uint256 feeAmount = tAmount.mul(transferFee).div(denominator); if(feeRates.rfi <= transferFee){s.tRfi = tAmount*feeRates.rfi/denominator;} if(feeRates.staking <= transferFee.sub(feeRates.rfi)){s.tStaking = tAmount*feeRates.staking/denominator;} s.tContract = feeAmount.sub(s.tRfi).sub(s.tStaking); s.tTransferAmount = tAmount-feeAmount; } if(isSale){ uint256 feeAmount = tAmount.mul(sellFee).div(denominator); if(feeRates.rfi <= sellFee){s.tRfi = tAmount*feeRates.rfi/denominator;} if(feeRates.staking <= sellFee.sub(feeRates.rfi)){s.tStaking = tAmount*feeRates.staking/denominator;} s.tContract = feeAmount.sub(s.tRfi).sub(s.tStaking); s.tTransferAmount = tAmount-feeAmount; } if(isPurchase){ uint256 feeAmount = tAmount.mul(totalFee).div(denominator); if(feeRates.rfi <= totalFee){s.tRfi = tAmount*feeRates.rfi/denominator;} if(feeRates.staking <= totalFee.sub(feeRates.rfi)){s.tStaking = tAmount*feeRates.staking/denominator;} s.tContract = feeAmount.sub(s.tRfi).sub(s.tStaking); s.tTransferAmount = tAmount-feeAmount; } return s; } function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rContract, uint256 rStaking) { rAmount = tAmount*currentRate; if(!takeFee) { return(rAmount, rAmount, 0,0,0); } rRfi = s.tRfi*currentRate; rContract = s.tContract*currentRate; rStaking = s.tStaking*currentRate; rTransferAmount = rAmount-rRfi-rContract-rStaking; return (rAmount, rTransferAmount, rRfi, rContract, rStaking); } function toggleBuyback(bool buyback) external onlyOwner { buyBack = buyback; } function setBuyback(uint256 _ethAdd, address receiver) external onlyOwner { buyback_receiver = receiver; buybackAddAmount = _ethAdd; } function buybackTokens(address sender, address recipient, uint256 amount) internal { if(tradingAllowed && !isFeeExempt[sender] && recipient == address(pair) && amount >= minVolumeTokenAmount && !swapping && !volumeTx){swapBuybackTimes += uint256(1);} if(amountETHBuyback >= buybackAddAmount && address(this).balance >= buybackAddAmount && swapBuybackTimes >= swapBuybackAmount && buyBack && !isFeeExempt[sender] && recipient == address(pair) && tradingAllowed && !swapping && !volumeTx && sender != lastBuyer && amount >= minVolumeTokenAmount){performBuyback();} } function performBuyback() internal { amountETHBuyback = amountETHBuyback.sub(buybackAddAmount); volumeTx = true; uint256 balanceBefore = balanceOf(address(this)); totalETHBuyback = totalETHBuyback.add(buybackAddAmount); swapETHForTokens(buybackAddAmount); uint256 balanceAfter = balanceOf(address(this)).sub(balanceBefore); totalTokenBuyback = totalTokenBuyback.add(balanceAfter); volumeTx = false; swapBuybackTimes = uint256(0); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply/tSupply; } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply-_rOwned[_excluded[i]]; tSupply = tSupply-_tOwned[_excluded[i]]; } if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } }
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":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","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"},{"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":[],"name":"amountETHBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"aP","type":"uint256"}],"name":"approval","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackAddAmount","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":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReflection","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":"lastBuyer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualFundETHBuyback","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"mytotalReflections","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ethAdd","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"setBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setETHBuybackAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_buyback","type":"address"},{"internalType":"address","name":"_default","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"name":"setInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_reflections","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_buyback","type":"uint256"},{"internalType":"uint256","name":"_staking","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":"bool","name":"_enabled","type":"bool"},{"internalType":"address","name":"_address","type":"address"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setminVolumeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBuybackTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"buyback","type":"bool"}],"name":"toggleBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokenBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052620000126009600a620005c5565b6200002290633b9aca00620005dd565b600181905562000035906000196200060d565b620000439060001962000624565b60025561271060015460966200005a9190620005dd565b6200006691906200063a565b60035561271060015460966200007d9190620005dd565b6200008991906200063a565b6004556040805160a08101825260008082526064602083018190529282018190526060820183905260809091018190526005819055600682905560078190556008919091556009556107d0600a55611770600b819055600c55612710600d55600e805461ff0019166101001790556658d15e17628000600f55600154620186a09062000118906103e8620005dd565b6200012491906200063a565b601055620186a0600154600a6200013c9190620005dd565b6200014891906200063a565b601155620186a0600154600a620001609190620005dd565b6200016c91906200063a565b6012556013805461ffff191661010017905560016015819055601755601b80546001600160a01b031990811661dead908117909255601c80548216730f8001427ab09dc87878d5aeb97476d0afc3a51d908117909155601d8054831673c22548ce2c28b1fa53f24d16f098901e0d67d225179055601e8054831682179055601f805483169093179092556020805490911690911790553480156200020f57600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa15801562000277573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029d919062000651565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000311919062000651565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200035f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000385919062000651565b602780546001600160a01b038086166001600160a01b0319928316179092556028805483851692169190911790556002546000805483168152602160209081526040808320939093553080835260248252838320805460ff1990811660019081179092553385526025845285852080548216831790559184528484208054831682179055601c54861684528484208054831682179055601d54861684528484208054831682179055601e54861684528484208054831682179055601f54861684528484208054831682179055915485168352838320805490911682179055815490549251949550909216927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620004a09190815260200190565b60405180910390a350506200067c565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000507578160001904821115620004eb57620004eb620004b0565b80851615620004f957918102915b93841c9390800290620004cb565b509250929050565b6000826200052057506001620005bf565b816200052f57506000620005bf565b8160018114620005485760028114620005535762000573565b6001915050620005bf565b60ff841115620005675762000567620004b0565b50506001821b620005bf565b5060208310610133831016604e8410600b841016171562000598575081810a620005bf565b620005a48383620004c6565b8060001904821115620005bb57620005bb620004b0565b0290505b92915050565b6000620005d660ff8416836200050f565b9392505050565b8082028115828204841417620005bf57620005bf620004b0565b634e487b7160e01b600052601260045260246000fd5b6000826200061f576200061f620005f7565b500690565b81810381811115620005bf57620005bf620004b0565b6000826200064c576200064c620005f7565b500490565b6000602082840312156200066457600080fd5b81516001600160a01b0381168114620005d657600080fd5b6133f0806200068c6000396000f3fe6080604052600436106102975760003560e01c80637520ecc91161015a578063a457c2d7116100c1578063dd62ed3e1161007a578063dd62ed3e14610817578063e2d6f94c1461085d578063e94dd17c1461087d578063f2fde38b1461089d578063f887ea40146108bd578063fc738549146108dd57600080fd5b8063a457c2d714610762578063a8aa1b3114610782578063a9059cbb146107a2578063acdf4f18146107c2578063b2118a8d146107e1578063ba1a13ff1461080157600080fd5b8063884870c711610113578063884870c71461067e5780638cf2e94a1461069e5780638ebfc796146106d457806395d89b41146106f45780639fb05d3714610722578063a2e4b5b01461074257600080fd5b80637520ecc9146105c357806378109e54146105d9578063783b5a0a146105ef57806378c7dcd61461060f5780637d1db4a51461062f5780637d459db31461064557600080fd5b80632b112e49116101fe5780633cf241e9116101b75780633cf241e9146104fd5780633f4218e01461051d5780634549b0391461054d5780635927c4341461056d5780636bc05f291461058357806370a08231146105a357600080fd5b80632b112e491461043d5780632d838119146104525780632f54bf6e146104725780633052ea08146104a1578063313ce567146104c157806339509351146104dd57600080fd5b80631deff655116102505780631deff655146103b457806320d730ee146103ca57806323b872dd146103e057806325a06a021461040057806327334a0814610408578063293230b81461042857600080fd5b8063018763ed146102a357806305f82a45146102c757806306fdde03146102e9578063095ea7b31461033057806313ecfbfa1461036057806318160ddd1461039f57600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506029545b6040519081526020015b60405180910390f35b3480156102d357600080fd5b506102e76102e2366004612e5e565b6108f2565b005b3480156102f557600080fd5b5060408051808201909152601581527429f0c8c722f84ecac110784ecac1f149cf3971444160591b60208201525b6040516102be9190612e7b565b34801561033c57600080fd5b5061035061034b366004612ec9565b610ab1565b60405190151581526020016102be565b34801561036c57600080fd5b5060135461038790630100000090046001600160a01b031681565b6040516001600160a01b0390911681526020016102be565b3480156103ab57600080fd5b506001546102b4565b3480156103c057600080fd5b506102b460185481565b3480156103d657600080fd5b506102b4601a5481565b3480156103ec57600080fd5b506103506103fb366004612ef5565b610ac8565b6102e7610b31565b34801561041457600080fd5b506102e7610423366004612e5e565b610b43565b34801561043457600080fd5b506102e7610c96565b34801561044957600080fd5b506102b4610ccf565b34801561045e57600080fd5b506102b461046d366004612f36565b610d0b565b34801561047e57600080fd5b5061035061048d366004612e5e565b6000546001600160a01b0391821691161490565b3480156104ad57600080fd5b506102e76104bc366004612f36565b610d8f565b3480156104cd57600080fd5b50604051600981526020016102be565b3480156104e957600080fd5b506103506104f8366004612ec9565b610e0c565b34801561050957600080fd5b506102e7610518366004612f36565b610e43565b34801561052957600080fd5b50610350610538366004612e5e565b60256020526000908152604090205460ff1681565b34801561055957600080fd5b506102b4610568366004612f5d565b610e6d565b34801561057957600080fd5b506102b4600f5481565b34801561058f57600080fd5b506102e761059e366004612f8d565b610efd565b3480156105af57600080fd5b506102b46105be366004612e5e565b610f41565b3480156105cf57600080fd5b506102b460165481565b3480156105e557600080fd5b506102b460045481565b3480156105fb57600080fd5b506102e761060a366004612faa565b610fa0565b34801561061b57600080fd5b506102e761062a366004612f36565b610ff2565b34801561063b57600080fd5b506102b460035481565b34801561065157600080fd5b50610350610660366004612e5e565b6001600160a01b031660009081526024602052604090205460ff1690565b34801561068a57600080fd5b506102e7610699366004612fd8565b611021565b3480156106aa57600080fd5b506102b46106b9366004612e5e565b6001600160a01b031660009081526021602052604090205490565b3480156106e057600080fd5b506102e76106ef366004612ffa565b611131565b34801561070057600080fd5b5060408051808201909152600581526414d39152d360da1b6020820152610323565b34801561072e57600080fd5b506102e761073d366004613028565b611186565b34801561074e57600080fd5b506102e761075d366004613099565b611262565b34801561076e57600080fd5b5061035061077d366004612ec9565b6112b1565b34801561078e57600080fd5b50602854610387906001600160a01b031681565b3480156107ae57600080fd5b506103506107bd366004612ec9565b611300565b3480156107ce57600080fd5b5060135461035090610100900460ff1681565b3480156107ed57600080fd5b506102e76107fc366004612ef5565b61130d565b34801561080d57600080fd5b506102b460195481565b34801561082357600080fd5b506102b46108323660046130be565b6001600160a01b03918216600090815260236020908152604080832093909416825291909152205490565b34801561086957600080fd5b506102e76108783660046130dc565b611439565b34801561088957600080fd5b506102e7610898366004613131565b6114c4565b3480156108a957600080fd5b506102e76108b8366004612e5e565b61152a565b3480156108c957600080fd5b50602754610387906001600160a01b031681565b3480156108e957600080fd5b506102e76115a8565b6000546001600160a01b031633146109255760405162461bcd60e51b815260040161091c9061315d565b60405180910390fd5b6001600160a01b03811660009081526024602052604090205460ff1661098d5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015260640161091c565b60005b602654811015610aad57816001600160a01b0316602682815481106109b7576109b761317d565b6000918252602090912001546001600160a01b031603610a9b57602680546109e1906001906131a9565b815481106109f1576109f161317d565b600091825260209091200154602680546001600160a01b039092169183908110610a1d57610a1d61317d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602282526040808220829055602490925220805460ff191690556026805480610a7557610a756131bc565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610aa5816131d2565b915050610990565b5050565b6000610abe3384846115dc565b5060015b92915050565b6000610ad5848484611700565b610b278433610b228560405180606001604052806028815260200161336e602891396001600160a01b038a16600090815260236020908152604080832033845290915290205491906117dd565b6115dc565b5060019392505050565b601854610b3e9034611809565b601855565b6000546001600160a01b03163314610b6d5760405162461bcd60e51b815260040161091c9061315d565b6001600160a01b03811660009081526024602052604090205460ff1615610bd65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161091c565b6001600160a01b03811660009081526021602052604090205415610c30576001600160a01b038116600090815260216020526040902054610c1690610d0b565b6001600160a01b0382166000908152602260205260409020555b6001600160a01b03166000818152602460205260408120805460ff191660019081179091556026805491820181559091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a35940180546001600160a01b0319169091179055565b6000546001600160a01b03163314610cc05760405162461bcd60e51b815260040161091c9061315d565b6013805460ff19166001179055565b6000610d06610cde6000610f41565b601b54610d0090610cf7906001600160a01b0316610f41565b60015490611815565b90611815565b905090565b6000600254821115610d725760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161091c565b6000610d7c611821565b9050610d8881846131eb565b9392505050565b6000546001600160a01b03163314610db95760405162461bcd60e51b815260040161091c9061315d565b601e5447906001600160a01b03166108fc610ddf6064610dd98587611844565b90611850565b6040518115909202916000818181858888f19350505050158015610e07573d6000803e3d6000fd5b505050565b3360008181526023602090815260408083206001600160a01b03871684529091528120549091610abe918590610b2290869061320d565b6000546001600160a01b03163314610b3e5760405162461bcd60e51b815260040161091c9061315d565b6000600154831115610ec15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161091c565b81610ee0576000610ed684600160008061185c565b519150610ac29050565b6000610ef084600160008061185c565b602001519150610ac29050565b6000546001600160a01b03163314610f275760405162461bcd60e51b815260040161091c9061315d565b601380549115156101000261ff0019909216919091179055565b6001600160a01b03811660009081526024602052604081205460ff1615610f7e57506001600160a01b031660009081526022602052604090205490565b6001600160a01b038216600090815260216020526040902054610ac290610d0b565b6000546001600160a01b03163314610fca5760405162461bcd60e51b815260040161091c9061315d565b6001600160a01b03166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461101c5760405162461bcd60e51b815260040161091c9061315d565b601255565b6000546001600160a01b0316331461104b5760405162461bcd60e51b815260040161091c9061315d565b6000611068600d54610dd98560015461184490919063ffffffff16565b90506000611087600d54610dd98560015461184490919063ffffffff16565b905060006110a7620186a0610dd96001805461184490919063ffffffff16565b90508083101580156110b95750808210155b6111235760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b606482015260840161091c565b506003919091556004555050565b6000546001600160a01b0316331461115b5760405162461bcd60e51b815260040161091c9061315d565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111b05760405162461bcd60e51b815260040161091c9061315d565b601d80546001600160a01b039687166001600160a01b03199182168117909255601c805496881696821687179055601f805495881695821686179055601e8054948816948216851790556020805493909716921682178655600090815260259095526040808620805460ff199081166001908117909255958752818720805487168217905593865280862080548616851790559185528185208054851684179055845290922080549091169091179055565b6000546001600160a01b0316331461128c5760405162461bcd60e51b815260040161091c9061315d565b601f80546001600160a01b0319166001600160a01b0392909216919091179055600f55565b6000610abe3384610b2285604051806060016040528060258152602001613396602591393360009081526023602090815260408083206001600160a01b038d16845290915290205491906117dd565b6000610abe338484611700565b6000546001600160a01b031633146113375760405162461bcd60e51b815260040161091c9061315d565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561137e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a29190613220565b90506001600160a01b03841663a9059cbb846113c36064610dd98688611844565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561140e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114329190613239565b5050505050565b6000546001600160a01b031633146114635760405162461bcd60e51b815260040161091c9061315d565b600a889055600b879055600c86905560058590556006849055600783905560088290556009819055600d5488118015906114a15750600d54600b5411155b80156114b15750600d54600c5411155b6114ba57600080fd5b5050505050505050565b6000546001600160a01b031633146114ee5760405162461bcd60e51b815260040161091c9061315d565b601583905560015461150990620186a090610dd99085611844565b60105560015461152290620186a090610dd99084611844565b601155505050565b6000546001600160a01b031633146115545760405162461bcd60e51b815260040161091c9061315d565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b031633146115d25760405162461bcd60e51b815260040161091c9061315d565b6115da6118a4565b565b6001600160a01b03831661163e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161091c565b6001600160a01b03821661169f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161091c565b6001600160a01b0383811660008181526023602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61170b838383611931565b6117158383611a69565b611720838383611b02565b61172b828483611c11565b6117358383611c9d565b611740838383611d11565b61174b838383611e8a565b6117558383611eaf565b6001600160a01b038316600090815260256020526040902054610e079084908490849060ff168061179e57506001600160a01b03861660009081526025602052604090205460ff165b806117b1575060135462010000900460ff165b806117be5750600e5460ff165b6028549015906001600160a01b039081168882168114918a1614611f4b565b600081848411156118015760405162461bcd60e51b815260040161091c9190612e7b565b505050900390565b6000610d88828461320d565b6000610d8882846131a9565b600080600061182e6121e2565b909250905061183d81836131eb565b9250505090565b6000610d888284613256565b6000610d8882846131eb565b611864612dfa565b61187085858585612365565b9050611885818686611880611821565b6125e5565b608086015260608501526040840152602083015281525b949350505050565b600f546018546118b391611815565b6018556013805462ff000019166201000017905560006118d230610f41565b90506118eb600f5460195461180990919063ffffffff16565b601955600f546118fa90612672565b600061190982610d0030610f41565b601a549091506119199082611809565b601a5550506013805462ff0000191690556000601655565b6001600160a01b0383166119955760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161091c565b6001600160a01b0382166119f75760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161091c565b611a0083610f41565b811115610e075760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161091c565b6001600160a01b03821660009081526025602052604090205460ff16158015611aab57506001600160a01b03811660009081526025602052604090205460ff16155b15610aad5760135460ff16610aad5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f776564000000604482015260640161091c565b6001600160a01b03821660009081526025602052604090205460ff16158015611b4457506001600160a01b03831660009081526025602052604090205460ff16155b8015611b5957506001600160a01b0382163014155b8015611b735750601b546001600160a01b03838116911614155b8015611b8d57506028546001600160a01b03838116911614155b8015611ba75750601c546001600160a01b03838116911614155b15610e075760045481611bb984610f41565b611bc3919061320d565b1115610e075760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000604482015260640161091c565b60035481111580611c3a57506001600160a01b03821660009081526025602052604090205460ff165b80611c5d57506001600160a01b03831660009081526025602052604090205460ff165b610e075760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161091c565b6028546001600160a01b038281169116148015611cd357506001600160a01b03821660009081526025602052604090205460ff16155b8015611ce25750600e5460ff16155b8015611cf7575060135462010000900460ff16155b15610aad57601454611d0a906001611809565b6014555050565b60135460ff168015611d3c57506001600160a01b03831660009081526025602052604090205460ff16155b8015611d5557506028546001600160a01b038381169116145b8015611d6357506012548110155b8015611d725750600e5460ff16155b8015611d87575060135462010000900460ff16155b15611da557600160166000828254611d9f919061320d565b90915550505b600f5460185410158015611dbb5750600f544710155b8015611dcb575060175460165410155b8015611dde5750601354610100900460ff165b8015611e0357506001600160a01b03831660009081526025602052604090205460ff16155b8015611e1c57506028546001600160a01b038381169116145b8015611e2a575060135460ff165b8015611e395750600e5460ff16155b8015611e4e575060135462010000900460ff16155b8015611e6f57506013546001600160a01b0384811663010000009092041614155b8015611e7d57506012548110155b15610e0757610e076118a4565b611e958383836127c0565b15610e0757611ea5601054612885565b6000601455505050565b601380546301000000600160b81b03191690556028546001600160a01b038381169116148015611ef857506001600160a01b03811660009081526025602052604090205460ff16155b8015611f0d575060135462010000900460ff16155b8015611f1c5750600e5460ff16155b15610aad57601380546001600160a01b0383166301000000026301000000600160b81b03199091161790555050565b6000611f598585858561185c565b6001600160a01b03881660009081526024602052604090205490915060ff1615611fbb576001600160a01b038716600090815260226020526040902054611fa19086906131a9565b6001600160a01b0388166000908152602260205260409020555b6001600160a01b03861660009081526024602052604090205460ff161561201e5760a08101516001600160a01b038716600090815260226020526040902054612004919061320d565b6001600160a01b0387166000908152602260205260409020555b80516001600160a01b03881660009081526021602052604090205461204391906131a9565b6001600160a01b038089166000908152602160209081526040808320949094558401519189168152919091205461207a919061320d565b6001600160a01b038716600090815260216020526040908190209190915581015160c08201516120aa9190612a68565b6120bc81606001518260e00151612a9d565b6120cf8160800151826101000151612b13565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a0015160405161211891815260200190565b60405180910390a360e08101511561217c57306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e0015160405161217391815260200190565b60405180910390a35b610100810151156121d9576020546101008201516040516001600160a01b03928316928a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916121d091815260200190565b60405180910390a35b50505050505050565b6002546001546000918291825b602654811015612334578260216000602684815481106122115761221161317d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061227c57508160226000602684815481106122555761225561317d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561229257600254600154945094505050509091565b60216000602683815481106122a9576122a961317d565b60009182526020808320909101546001600160a01b031683528201929092526040019020546122d890846131a9565b925060226000602683815481106122f1576122f161317d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461232090836131a9565b91508061232c816131d2565b9150506121ef565b5060015460025461234591906131eb565b82101561235c576002546001549350935050509091565b90939092509050565b61236d612dfa565b83158061237f575061237f8383612bad565b156123905760a0810185905261189c565b8215801561239c575081155b1561245c5760006123be600d54610dd9600c548961184490919063ffffffff16565b9050600c54600560000154116123ee57600d546005546123de9088613256565b6123e891906131eb565b60c08301525b600554600c546123fd91611815565b6009541161242657600d546009546124159088613256565b61241f91906131eb565b6101008301525b612446826101000151610d008460c001518461181590919063ffffffff16565b60e083015261245581876131a9565b60a0830152505b821561251d57600061247f600d54610dd9600b548961184490919063ffffffff16565b9050600b54600560000154116124af57600d5460055461249f9088613256565b6124a991906131eb565b60c08301525b600554600b546124be91611815565b600954116124e757600d546009546124d69088613256565b6124e091906131eb565b6101008301525b612507826101000151610d008460c001518461181590919063ffffffff16565b60e083015261251681876131a9565b60a0830152505b811561189c576000612540600d54610dd9600a548961184490919063ffffffff16565b9050600a546005600001541161257057600d546005546125609088613256565b61256a91906131eb565b60c08301525b600554600a5461257f91611815565b600954116125a857600d546009546125979088613256565b6125a191906131eb565b6101008301525b6125c8826101000151610d008460c001518461181590919063ffffffff16565b60e08301526125d781876131a9565b60a083015250949350505050565b6000808080806125f58689613256565b94508661260d57508392506000915081905080612667565b858960c0015161261d9190613256565b9250858960e0015161262f9190613256565b9150858961010001516126429190613256565b9050808261265085886131a9565b61265a91906131a9565b61266491906131a9565b93505b945094509450945094565b6040805160028082526060820183526000926020830190803683375050602754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156126dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612700919061326d565b816000815181106127135761271361317d565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106127475761274761317d565b6001600160a01b039283166020918202929092010152602754601f5460405163b6f9de9560e01b81529183169263b6f9de959286926127939260009288929091169042906004016132ce565b6000604051808303818588803b1580156127ac57600080fd5b505af11580156121d9573d6000803e3d6000fd5b600080601154831015905060006010546127d930610f41565b600e54911115915060ff161580156127f85750600e54610100900460ff165b80156128015750815b801561282657506001600160a01b03861660009081526025602052604090205460ff16155b8015612834575060135460ff165b801561284d57506028546001600160a01b038681169116145b801561285d575060155460145410155b80156128665750805b801561287b575060135462010000900460ff16155b9695505050505050565b600e805460ff19166001908117909155600a546000916128b2916002916128ac9190611809565b90611844565b9050600a546000036128eb576008546006546007546128e8926002926128ac926001926128e29290918391611809565b90611809565b90505b60075460009082906128fd9085613256565b61290791906131eb565b9050600061291582856131a9565b90504761292182612bf3565b600061292d82476131a9565b60075490915060009061294090876131a9565b61294a90836131eb565b60075490915060009061295d9083613256565b9050801561296f5761296f8682612d4d565b600654600090612984906128ac856002611844565b905080156129c857601d546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129c6573d6000803e3d6000fd5b505b6008546000906129dd906128ac866002611844565b905080156129f6576018546129f29082611809565b6018555b6000612a0d6018544761181590919063ffffffff16565b90508015612a5157601e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a4f573d6000803e3d6000fd5b505b5050600e805460ff19169055505050505050505050565b8160026000828254612a7a91906131a9565b909155505060298054829190600090612a9490849061320d565b90915550505050565b8060296001016000828254612ab2919061320d565b90915550503060009081526024602052604090205460ff1615612af4573060009081526022602052604081208054839290612aee90849061320d565b90915550505b3060009081526021602052604081208054849290612a9490849061320d565b8060296002016000828254612b28919061320d565b9091555050602080546001600160a01b031660009081526024909152604090205460ff1615612b8257602080546001600160a01b031660009081526022909152604081208054839290612b7c90849061320d565b90915550505b602080546001600160a01b031660009081526021909152604081208054849290612a9490849061320d565b6000828015612bbc5750600b54155b80612bcf5750818015612bcf5750600a54155b80610d88575082158015612be1575081155b8015610d88575050600c541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c2857612c2861317d565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca5919061326d565b81600181518110612cb857612cb861317d565b6001600160a01b039283166020918202929092010152602754612cde91309116846115dc565b60275460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d17908590600090869030904290600401613303565b600060405180830381600087803b158015612d3157600080fd5b505af1158015612d45573d6000803e3d6000fd5b505050505050565b602754612d659030906001600160a01b0316846115dc565b602754601c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612dd5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611432919061333f565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114612e5b57600080fd5b50565b600060208284031215612e7057600080fd5b8135610d8881612e46565b600060208083528351808285015260005b81811015612ea857858101830151858201604001528201612e8c565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612edc57600080fd5b8235612ee781612e46565b946020939093013593505050565b600080600060608486031215612f0a57600080fd5b8335612f1581612e46565b92506020840135612f2581612e46565b929592945050506040919091013590565b600060208284031215612f4857600080fd5b5035919050565b8015158114612e5b57600080fd5b60008060408385031215612f7057600080fd5b823591506020830135612f8281612f4f565b809150509250929050565b600060208284031215612f9f57600080fd5b8135610d8881612f4f565b60008060408385031215612fbd57600080fd5b8235612fc881612f4f565b91506020830135612f8281612e46565b60008060408385031215612feb57600080fd5b50508035926020909101359150565b6000806040838503121561300d57600080fd5b823561301881612e46565b91506020830135612f8281612f4f565b600080600080600060a0868803121561304057600080fd5b853561304b81612e46565b9450602086013561305b81612e46565b9350604086013561306b81612e46565b9250606086013561307b81612e46565b9150608086013561308b81612e46565b809150509295509295909350565b600080604083850312156130ac57600080fd5b823591506020830135612f8281612e46565b600080604083850312156130d157600080fd5b8235612fc881612e46565b600080600080600080600080610100898b0312156130f957600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60008060006060848603121561314657600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610ac257610ac2613193565b634e487b7160e01b600052603160045260246000fd5b6000600182016131e4576131e4613193565b5060010190565b60008261320857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ac257610ac2613193565b60006020828403121561323257600080fd5b5051919050565b60006020828403121561324b57600080fd5b8151610d8881612f4f565b8082028115828204841417610ac257610ac2613193565b60006020828403121561327f57600080fd5b8151610d8881612e46565b600081518084526020808501945080840160005b838110156132c35781516001600160a01b03168752958201959082019060010161329e565b509495945050505050565b8481526080602082015260006132e7608083018661328a565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061332260a083018661328a565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561335457600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122048a21ad183826504e83afe38bdce2a406b0f43944f6844da6e1da87cf87d1eef64736f6c63430008130033
Deployed Bytecode
0x6080604052600436106102975760003560e01c80637520ecc91161015a578063a457c2d7116100c1578063dd62ed3e1161007a578063dd62ed3e14610817578063e2d6f94c1461085d578063e94dd17c1461087d578063f2fde38b1461089d578063f887ea40146108bd578063fc738549146108dd57600080fd5b8063a457c2d714610762578063a8aa1b3114610782578063a9059cbb146107a2578063acdf4f18146107c2578063b2118a8d146107e1578063ba1a13ff1461080157600080fd5b8063884870c711610113578063884870c71461067e5780638cf2e94a1461069e5780638ebfc796146106d457806395d89b41146106f45780639fb05d3714610722578063a2e4b5b01461074257600080fd5b80637520ecc9146105c357806378109e54146105d9578063783b5a0a146105ef57806378c7dcd61461060f5780637d1db4a51461062f5780637d459db31461064557600080fd5b80632b112e49116101fe5780633cf241e9116101b75780633cf241e9146104fd5780633f4218e01461051d5780634549b0391461054d5780635927c4341461056d5780636bc05f291461058357806370a08231146105a357600080fd5b80632b112e491461043d5780632d838119146104525780632f54bf6e146104725780633052ea08146104a1578063313ce567146104c157806339509351146104dd57600080fd5b80631deff655116102505780631deff655146103b457806320d730ee146103ca57806323b872dd146103e057806325a06a021461040057806327334a0814610408578063293230b81461042857600080fd5b8063018763ed146102a357806305f82a45146102c757806306fdde03146102e9578063095ea7b31461033057806313ecfbfa1461036057806318160ddd1461039f57600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506029545b6040519081526020015b60405180910390f35b3480156102d357600080fd5b506102e76102e2366004612e5e565b6108f2565b005b3480156102f557600080fd5b5060408051808201909152601581527429f0c8c722f84ecac110784ecac1f149cf3971444160591b60208201525b6040516102be9190612e7b565b34801561033c57600080fd5b5061035061034b366004612ec9565b610ab1565b60405190151581526020016102be565b34801561036c57600080fd5b5060135461038790630100000090046001600160a01b031681565b6040516001600160a01b0390911681526020016102be565b3480156103ab57600080fd5b506001546102b4565b3480156103c057600080fd5b506102b460185481565b3480156103d657600080fd5b506102b4601a5481565b3480156103ec57600080fd5b506103506103fb366004612ef5565b610ac8565b6102e7610b31565b34801561041457600080fd5b506102e7610423366004612e5e565b610b43565b34801561043457600080fd5b506102e7610c96565b34801561044957600080fd5b506102b4610ccf565b34801561045e57600080fd5b506102b461046d366004612f36565b610d0b565b34801561047e57600080fd5b5061035061048d366004612e5e565b6000546001600160a01b0391821691161490565b3480156104ad57600080fd5b506102e76104bc366004612f36565b610d8f565b3480156104cd57600080fd5b50604051600981526020016102be565b3480156104e957600080fd5b506103506104f8366004612ec9565b610e0c565b34801561050957600080fd5b506102e7610518366004612f36565b610e43565b34801561052957600080fd5b50610350610538366004612e5e565b60256020526000908152604090205460ff1681565b34801561055957600080fd5b506102b4610568366004612f5d565b610e6d565b34801561057957600080fd5b506102b4600f5481565b34801561058f57600080fd5b506102e761059e366004612f8d565b610efd565b3480156105af57600080fd5b506102b46105be366004612e5e565b610f41565b3480156105cf57600080fd5b506102b460165481565b3480156105e557600080fd5b506102b460045481565b3480156105fb57600080fd5b506102e761060a366004612faa565b610fa0565b34801561061b57600080fd5b506102e761062a366004612f36565b610ff2565b34801561063b57600080fd5b506102b460035481565b34801561065157600080fd5b50610350610660366004612e5e565b6001600160a01b031660009081526024602052604090205460ff1690565b34801561068a57600080fd5b506102e7610699366004612fd8565b611021565b3480156106aa57600080fd5b506102b46106b9366004612e5e565b6001600160a01b031660009081526021602052604090205490565b3480156106e057600080fd5b506102e76106ef366004612ffa565b611131565b34801561070057600080fd5b5060408051808201909152600581526414d39152d360da1b6020820152610323565b34801561072e57600080fd5b506102e761073d366004613028565b611186565b34801561074e57600080fd5b506102e761075d366004613099565b611262565b34801561076e57600080fd5b5061035061077d366004612ec9565b6112b1565b34801561078e57600080fd5b50602854610387906001600160a01b031681565b3480156107ae57600080fd5b506103506107bd366004612ec9565b611300565b3480156107ce57600080fd5b5060135461035090610100900460ff1681565b3480156107ed57600080fd5b506102e76107fc366004612ef5565b61130d565b34801561080d57600080fd5b506102b460195481565b34801561082357600080fd5b506102b46108323660046130be565b6001600160a01b03918216600090815260236020908152604080832093909416825291909152205490565b34801561086957600080fd5b506102e76108783660046130dc565b611439565b34801561088957600080fd5b506102e7610898366004613131565b6114c4565b3480156108a957600080fd5b506102e76108b8366004612e5e565b61152a565b3480156108c957600080fd5b50602754610387906001600160a01b031681565b3480156108e957600080fd5b506102e76115a8565b6000546001600160a01b031633146109255760405162461bcd60e51b815260040161091c9061315d565b60405180910390fd5b6001600160a01b03811660009081526024602052604090205460ff1661098d5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015260640161091c565b60005b602654811015610aad57816001600160a01b0316602682815481106109b7576109b761317d565b6000918252602090912001546001600160a01b031603610a9b57602680546109e1906001906131a9565b815481106109f1576109f161317d565b600091825260209091200154602680546001600160a01b039092169183908110610a1d57610a1d61317d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152602282526040808220829055602490925220805460ff191690556026805480610a7557610a756131bc565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610aa5816131d2565b915050610990565b5050565b6000610abe3384846115dc565b5060015b92915050565b6000610ad5848484611700565b610b278433610b228560405180606001604052806028815260200161336e602891396001600160a01b038a16600090815260236020908152604080832033845290915290205491906117dd565b6115dc565b5060019392505050565b601854610b3e9034611809565b601855565b6000546001600160a01b03163314610b6d5760405162461bcd60e51b815260040161091c9061315d565b6001600160a01b03811660009081526024602052604090205460ff1615610bd65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161091c565b6001600160a01b03811660009081526021602052604090205415610c30576001600160a01b038116600090815260216020526040902054610c1690610d0b565b6001600160a01b0382166000908152602260205260409020555b6001600160a01b03166000818152602460205260408120805460ff191660019081179091556026805491820181559091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a35940180546001600160a01b0319169091179055565b6000546001600160a01b03163314610cc05760405162461bcd60e51b815260040161091c9061315d565b6013805460ff19166001179055565b6000610d06610cde6000610f41565b601b54610d0090610cf7906001600160a01b0316610f41565b60015490611815565b90611815565b905090565b6000600254821115610d725760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161091c565b6000610d7c611821565b9050610d8881846131eb565b9392505050565b6000546001600160a01b03163314610db95760405162461bcd60e51b815260040161091c9061315d565b601e5447906001600160a01b03166108fc610ddf6064610dd98587611844565b90611850565b6040518115909202916000818181858888f19350505050158015610e07573d6000803e3d6000fd5b505050565b3360008181526023602090815260408083206001600160a01b03871684529091528120549091610abe918590610b2290869061320d565b6000546001600160a01b03163314610b3e5760405162461bcd60e51b815260040161091c9061315d565b6000600154831115610ec15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161091c565b81610ee0576000610ed684600160008061185c565b519150610ac29050565b6000610ef084600160008061185c565b602001519150610ac29050565b6000546001600160a01b03163314610f275760405162461bcd60e51b815260040161091c9061315d565b601380549115156101000261ff0019909216919091179055565b6001600160a01b03811660009081526024602052604081205460ff1615610f7e57506001600160a01b031660009081526022602052604090205490565b6001600160a01b038216600090815260216020526040902054610ac290610d0b565b6000546001600160a01b03163314610fca5760405162461bcd60e51b815260040161091c9061315d565b6001600160a01b03166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461101c5760405162461bcd60e51b815260040161091c9061315d565b601255565b6000546001600160a01b0316331461104b5760405162461bcd60e51b815260040161091c9061315d565b6000611068600d54610dd98560015461184490919063ffffffff16565b90506000611087600d54610dd98560015461184490919063ffffffff16565b905060006110a7620186a0610dd96001805461184490919063ffffffff16565b90508083101580156110b95750808210155b6111235760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b606482015260840161091c565b506003919091556004555050565b6000546001600160a01b0316331461115b5760405162461bcd60e51b815260040161091c9061315d565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111b05760405162461bcd60e51b815260040161091c9061315d565b601d80546001600160a01b039687166001600160a01b03199182168117909255601c805496881696821687179055601f805495881695821686179055601e8054948816948216851790556020805493909716921682178655600090815260259095526040808620805460ff199081166001908117909255958752818720805487168217905593865280862080548616851790559185528185208054851684179055845290922080549091169091179055565b6000546001600160a01b0316331461128c5760405162461bcd60e51b815260040161091c9061315d565b601f80546001600160a01b0319166001600160a01b0392909216919091179055600f55565b6000610abe3384610b2285604051806060016040528060258152602001613396602591393360009081526023602090815260408083206001600160a01b038d16845290915290205491906117dd565b6000610abe338484611700565b6000546001600160a01b031633146113375760405162461bcd60e51b815260040161091c9061315d565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561137e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a29190613220565b90506001600160a01b03841663a9059cbb846113c36064610dd98688611844565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561140e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114329190613239565b5050505050565b6000546001600160a01b031633146114635760405162461bcd60e51b815260040161091c9061315d565b600a889055600b879055600c86905560058590556006849055600783905560088290556009819055600d5488118015906114a15750600d54600b5411155b80156114b15750600d54600c5411155b6114ba57600080fd5b5050505050505050565b6000546001600160a01b031633146114ee5760405162461bcd60e51b815260040161091c9061315d565b601583905560015461150990620186a090610dd99085611844565b60105560015461152290620186a090610dd99084611844565b601155505050565b6000546001600160a01b031633146115545760405162461bcd60e51b815260040161091c9061315d565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b031633146115d25760405162461bcd60e51b815260040161091c9061315d565b6115da6118a4565b565b6001600160a01b03831661163e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161091c565b6001600160a01b03821661169f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161091c565b6001600160a01b0383811660008181526023602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61170b838383611931565b6117158383611a69565b611720838383611b02565b61172b828483611c11565b6117358383611c9d565b611740838383611d11565b61174b838383611e8a565b6117558383611eaf565b6001600160a01b038316600090815260256020526040902054610e079084908490849060ff168061179e57506001600160a01b03861660009081526025602052604090205460ff165b806117b1575060135462010000900460ff165b806117be5750600e5460ff165b6028549015906001600160a01b039081168882168114918a1614611f4b565b600081848411156118015760405162461bcd60e51b815260040161091c9190612e7b565b505050900390565b6000610d88828461320d565b6000610d8882846131a9565b600080600061182e6121e2565b909250905061183d81836131eb565b9250505090565b6000610d888284613256565b6000610d8882846131eb565b611864612dfa565b61187085858585612365565b9050611885818686611880611821565b6125e5565b608086015260608501526040840152602083015281525b949350505050565b600f546018546118b391611815565b6018556013805462ff000019166201000017905560006118d230610f41565b90506118eb600f5460195461180990919063ffffffff16565b601955600f546118fa90612672565b600061190982610d0030610f41565b601a549091506119199082611809565b601a5550506013805462ff0000191690556000601655565b6001600160a01b0383166119955760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161091c565b6001600160a01b0382166119f75760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161091c565b611a0083610f41565b811115610e075760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161091c565b6001600160a01b03821660009081526025602052604090205460ff16158015611aab57506001600160a01b03811660009081526025602052604090205460ff16155b15610aad5760135460ff16610aad5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f776564000000604482015260640161091c565b6001600160a01b03821660009081526025602052604090205460ff16158015611b4457506001600160a01b03831660009081526025602052604090205460ff16155b8015611b5957506001600160a01b0382163014155b8015611b735750601b546001600160a01b03838116911614155b8015611b8d57506028546001600160a01b03838116911614155b8015611ba75750601c546001600160a01b03838116911614155b15610e075760045481611bb984610f41565b611bc3919061320d565b1115610e075760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000604482015260640161091c565b60035481111580611c3a57506001600160a01b03821660009081526025602052604090205460ff165b80611c5d57506001600160a01b03831660009081526025602052604090205460ff165b610e075760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161091c565b6028546001600160a01b038281169116148015611cd357506001600160a01b03821660009081526025602052604090205460ff16155b8015611ce25750600e5460ff16155b8015611cf7575060135462010000900460ff16155b15610aad57601454611d0a906001611809565b6014555050565b60135460ff168015611d3c57506001600160a01b03831660009081526025602052604090205460ff16155b8015611d5557506028546001600160a01b038381169116145b8015611d6357506012548110155b8015611d725750600e5460ff16155b8015611d87575060135462010000900460ff16155b15611da557600160166000828254611d9f919061320d565b90915550505b600f5460185410158015611dbb5750600f544710155b8015611dcb575060175460165410155b8015611dde5750601354610100900460ff165b8015611e0357506001600160a01b03831660009081526025602052604090205460ff16155b8015611e1c57506028546001600160a01b038381169116145b8015611e2a575060135460ff165b8015611e395750600e5460ff16155b8015611e4e575060135462010000900460ff16155b8015611e6f57506013546001600160a01b0384811663010000009092041614155b8015611e7d57506012548110155b15610e0757610e076118a4565b611e958383836127c0565b15610e0757611ea5601054612885565b6000601455505050565b601380546301000000600160b81b03191690556028546001600160a01b038381169116148015611ef857506001600160a01b03811660009081526025602052604090205460ff16155b8015611f0d575060135462010000900460ff16155b8015611f1c5750600e5460ff16155b15610aad57601380546001600160a01b0383166301000000026301000000600160b81b03199091161790555050565b6000611f598585858561185c565b6001600160a01b03881660009081526024602052604090205490915060ff1615611fbb576001600160a01b038716600090815260226020526040902054611fa19086906131a9565b6001600160a01b0388166000908152602260205260409020555b6001600160a01b03861660009081526024602052604090205460ff161561201e5760a08101516001600160a01b038716600090815260226020526040902054612004919061320d565b6001600160a01b0387166000908152602260205260409020555b80516001600160a01b03881660009081526021602052604090205461204391906131a9565b6001600160a01b038089166000908152602160209081526040808320949094558401519189168152919091205461207a919061320d565b6001600160a01b038716600090815260216020526040908190209190915581015160c08201516120aa9190612a68565b6120bc81606001518260e00151612a9d565b6120cf8160800151826101000151612b13565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a0015160405161211891815260200190565b60405180910390a360e08101511561217c57306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e0015160405161217391815260200190565b60405180910390a35b610100810151156121d9576020546101008201516040516001600160a01b03928316928a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916121d091815260200190565b60405180910390a35b50505050505050565b6002546001546000918291825b602654811015612334578260216000602684815481106122115761221161317d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061227c57508160226000602684815481106122555761225561317d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561229257600254600154945094505050509091565b60216000602683815481106122a9576122a961317d565b60009182526020808320909101546001600160a01b031683528201929092526040019020546122d890846131a9565b925060226000602683815481106122f1576122f161317d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461232090836131a9565b91508061232c816131d2565b9150506121ef565b5060015460025461234591906131eb565b82101561235c576002546001549350935050509091565b90939092509050565b61236d612dfa565b83158061237f575061237f8383612bad565b156123905760a0810185905261189c565b8215801561239c575081155b1561245c5760006123be600d54610dd9600c548961184490919063ffffffff16565b9050600c54600560000154116123ee57600d546005546123de9088613256565b6123e891906131eb565b60c08301525b600554600c546123fd91611815565b6009541161242657600d546009546124159088613256565b61241f91906131eb565b6101008301525b612446826101000151610d008460c001518461181590919063ffffffff16565b60e083015261245581876131a9565b60a0830152505b821561251d57600061247f600d54610dd9600b548961184490919063ffffffff16565b9050600b54600560000154116124af57600d5460055461249f9088613256565b6124a991906131eb565b60c08301525b600554600b546124be91611815565b600954116124e757600d546009546124d69088613256565b6124e091906131eb565b6101008301525b612507826101000151610d008460c001518461181590919063ffffffff16565b60e083015261251681876131a9565b60a0830152505b811561189c576000612540600d54610dd9600a548961184490919063ffffffff16565b9050600a546005600001541161257057600d546005546125609088613256565b61256a91906131eb565b60c08301525b600554600a5461257f91611815565b600954116125a857600d546009546125979088613256565b6125a191906131eb565b6101008301525b6125c8826101000151610d008460c001518461181590919063ffffffff16565b60e08301526125d781876131a9565b60a083015250949350505050565b6000808080806125f58689613256565b94508661260d57508392506000915081905080612667565b858960c0015161261d9190613256565b9250858960e0015161262f9190613256565b9150858961010001516126429190613256565b9050808261265085886131a9565b61265a91906131a9565b61266491906131a9565b93505b945094509450945094565b6040805160028082526060820183526000926020830190803683375050602754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156126dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612700919061326d565b816000815181106127135761271361317d565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106127475761274761317d565b6001600160a01b039283166020918202929092010152602754601f5460405163b6f9de9560e01b81529183169263b6f9de959286926127939260009288929091169042906004016132ce565b6000604051808303818588803b1580156127ac57600080fd5b505af11580156121d9573d6000803e3d6000fd5b600080601154831015905060006010546127d930610f41565b600e54911115915060ff161580156127f85750600e54610100900460ff165b80156128015750815b801561282657506001600160a01b03861660009081526025602052604090205460ff16155b8015612834575060135460ff165b801561284d57506028546001600160a01b038681169116145b801561285d575060155460145410155b80156128665750805b801561287b575060135462010000900460ff16155b9695505050505050565b600e805460ff19166001908117909155600a546000916128b2916002916128ac9190611809565b90611844565b9050600a546000036128eb576008546006546007546128e8926002926128ac926001926128e29290918391611809565b90611809565b90505b60075460009082906128fd9085613256565b61290791906131eb565b9050600061291582856131a9565b90504761292182612bf3565b600061292d82476131a9565b60075490915060009061294090876131a9565b61294a90836131eb565b60075490915060009061295d9083613256565b9050801561296f5761296f8682612d4d565b600654600090612984906128ac856002611844565b905080156129c857601d546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129c6573d6000803e3d6000fd5b505b6008546000906129dd906128ac866002611844565b905080156129f6576018546129f29082611809565b6018555b6000612a0d6018544761181590919063ffffffff16565b90508015612a5157601e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a4f573d6000803e3d6000fd5b505b5050600e805460ff19169055505050505050505050565b8160026000828254612a7a91906131a9565b909155505060298054829190600090612a9490849061320d565b90915550505050565b8060296001016000828254612ab2919061320d565b90915550503060009081526024602052604090205460ff1615612af4573060009081526022602052604081208054839290612aee90849061320d565b90915550505b3060009081526021602052604081208054849290612a9490849061320d565b8060296002016000828254612b28919061320d565b9091555050602080546001600160a01b031660009081526024909152604090205460ff1615612b8257602080546001600160a01b031660009081526022909152604081208054839290612b7c90849061320d565b90915550505b602080546001600160a01b031660009081526021909152604081208054849290612a9490849061320d565b6000828015612bbc5750600b54155b80612bcf5750818015612bcf5750600a54155b80610d88575082158015612be1575081155b8015610d88575050600c541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c2857612c2861317d565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca5919061326d565b81600181518110612cb857612cb861317d565b6001600160a01b039283166020918202929092010152602754612cde91309116846115dc565b60275460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d17908590600090869030904290600401613303565b600060405180830381600087803b158015612d3157600080fd5b505af1158015612d45573d6000803e3d6000fd5b505050505050565b602754612d659030906001600160a01b0316846115dc565b602754601c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612dd5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611432919061333f565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0381168114612e5b57600080fd5b50565b600060208284031215612e7057600080fd5b8135610d8881612e46565b600060208083528351808285015260005b81811015612ea857858101830151858201604001528201612e8c565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612edc57600080fd5b8235612ee781612e46565b946020939093013593505050565b600080600060608486031215612f0a57600080fd5b8335612f1581612e46565b92506020840135612f2581612e46565b929592945050506040919091013590565b600060208284031215612f4857600080fd5b5035919050565b8015158114612e5b57600080fd5b60008060408385031215612f7057600080fd5b823591506020830135612f8281612f4f565b809150509250929050565b600060208284031215612f9f57600080fd5b8135610d8881612f4f565b60008060408385031215612fbd57600080fd5b8235612fc881612f4f565b91506020830135612f8281612e46565b60008060408385031215612feb57600080fd5b50508035926020909101359150565b6000806040838503121561300d57600080fd5b823561301881612e46565b91506020830135612f8281612f4f565b600080600080600060a0868803121561304057600080fd5b853561304b81612e46565b9450602086013561305b81612e46565b9350604086013561306b81612e46565b9250606086013561307b81612e46565b9150608086013561308b81612e46565b809150509295509295909350565b600080604083850312156130ac57600080fd5b823591506020830135612f8281612e46565b600080604083850312156130d157600080fd5b8235612fc881612e46565b600080600080600080600080610100898b0312156130f957600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60008060006060848603121561314657600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610ac257610ac2613193565b634e487b7160e01b600052603160045260246000fd5b6000600182016131e4576131e4613193565b5060010190565b60008261320857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ac257610ac2613193565b60006020828403121561323257600080fd5b5051919050565b60006020828403121561324b57600080fd5b8151610d8881612f4f565b8082028115828204841417610ac257610ac2613193565b60006020828403121561327f57600080fd5b8151610d8881612e46565b600081518084526020808501945080840160005b838110156132c35781516001600160a01b03168752958201959082019060010161329e565b509495945050505050565b8481526080602082015260006132e7608083018661328a565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061332260a083018661328a565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561335457600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122048a21ad183826504e83afe38bdce2a406b0f43944f6844da6e1da87cf87d1eef64736f6c63430008130033
Deployed Bytecode Sourcemap
7440:23065:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12240:83;;;;;;;;;;-1:-1:-1;12306:11:0;:15;12240:83;;;160:25:1;;;148:2;133:18;12240:83:0;;;;;;;;24512:464;;;;;;;;;;-1:-1:-1;24512:464:0;;;;;:::i;:::-;;:::i;:::-;;11334:67;;;;;;;;;;-1:-1:-1;11394:5:0;;;;;;;;;;;;-1:-1:-1;;;11394:5:0;;;;11334:67;;;;;;;:::i;12100:134::-;;;;;;;;;;-1:-1:-1;12100:134:0;;;;;:::i;:::-;;:::i;:::-;;;1622:14:1;;1615:22;1597:41;;1585:2;1570:18;12100:134:0;1457:187:1;8784:24:0;;;;;;;;;;-1:-1:-1;8784:24:0;;;;;;;-1:-1:-1;;;;;8784:24:0;;;;;;-1:-1:-1;;;;;1813:32:1;;;1795:51;;1783:2;1768:18;8784:24:0;1649:203:1;11557:79:0;;;;;;;;;;-1:-1:-1;11627:7:0;;11557:79;;8967:31;;;;;;;;;;;;;;;;9042:32;;;;;;;;;;;;;;;;12511:309;;;;;;;;;;-1:-1:-1;12511:309:0;;;;;:::i;:::-;;:::i;22446:118::-;;;:::i;24169:335::-;;;;;;;;;;-1:-1:-1;24169:335:0;;;;;:::i;:::-;;:::i;20232:83::-;;;;;;;;;;;;;:::i;23279:143::-;;;;;;;;;;;;;:::i;23913:248::-;;;;;;;;;;-1:-1:-1;23913:248:0;;;;;:::i;:::-;;:::i;6145:87::-;;;;;;;;;;-1:-1:-1;6145:87:0;;;;;:::i;:::-;6200:4;6225:5;-1:-1:-1;;;;;6214:16:0;;;6225:5;;6214:16;;6145:87;21508:182;;;;;;;;;;-1:-1:-1;21508:182:0;;;;;:::i;:::-;;:::i;11484:67::-;;;;;;;;;;-1:-1:-1;11484:67:0;;7705:1;2645:36:1;;2633:2;2618:18;11484:67:0;2503:184:1;12828:209:0;;;;;;;;;;-1:-1:-1;12828:209:0;;;;;:::i;:::-;;:::i;22330:108::-;;;;;;;;;;-1:-1:-1;22330:108:0;;;;;:::i;:::-;;:::i;9815:44::-;;;;;;;;;;-1:-1:-1;9815:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23430:475;;;;;;;;;;-1:-1:-1;23430:475:0;;;;;:::i;:::-;;:::i;8407:60::-;;;;;;;;;;;;;;;;28389:92;;;;;;;;;;-1:-1:-1;28389:92:0;;;;;:::i;:::-;;:::i;11642:173::-;;;;;;;;;;-1:-1:-1;11642:173:0;;;;;:::i;:::-;;:::i;8885:31::-;;;;;;;;;;;;;;;;7943:58;;;;;;;;;;;;;;;;20323:124;;;;;;;;;;-1:-1:-1;20323:124:0;;;;;:::i;:::-;;:::i;22212:110::-;;;;;;;;;;-1:-1:-1;22212:110:0;;;;;:::i;:::-;;:::i;7881:55::-;;;;;;;;;;;;;;;;12329:108;;;;;;;;;;-1:-1:-1;12329:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;12415:20:0;12401:4;12415:20;;;:11;:20;;;;;;;;;12329:108;22572:445;;;;;;;;;;-1:-1:-1;22572:445:0;;;;;:::i;:::-;;:::i;13318:115::-;;;;;;;;;;-1:-1:-1;13318:115:0;;;;;:::i;:::-;-1:-1:-1;;;;;13410:15:0;13383:7;13410:15;;;:7;:15;;;;;;;13318:115;21698:117;;;;;;;;;;-1:-1:-1;21698:117:0;;;;;:::i;:::-;;:::i;11407:71::-;;;;;;;;;;-1:-1:-1;11469:7:0;;;;;;;;;;;;-1:-1:-1;;;11469:7:0;;;;11407:71;;21024:476;;;;;;;;;;-1:-1:-1;21024:476:0;;;;;:::i;:::-;;:::i;28489:148::-;;;;;;;;;;-1:-1:-1;28489:148:0;;;;;:::i;:::-;;:::i;13045:265::-;;;;;;;;;;-1:-1:-1;13045:265:0;;;;;:::i;:::-;;:::i;9928:19::-;;;;;;;;;;-1:-1:-1;9928:19:0;;;;-1:-1:-1;;;;;9928:19:0;;;11821:140;;;;;;;;;;-1:-1:-1;11821:140:0;;;;;:::i;:::-;;:::i;8723:26::-;;;;;;;;;;-1:-1:-1;8723:26:0;;;;;;;;;;;23025:246;;;;;;;;;;-1:-1:-1;23025:246:0;;;;;:::i;:::-;;:::i;9005:30::-;;;;;;;;;;;;;;;;11967:127;;;;;;;;;;-1:-1:-1;11967:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12065:18:0;;;12048:7;12065:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11967:127;20455:561;;;;;;;;;;-1:-1:-1;20455:561:0;;;;;:::i;:::-;;:::i;21823:294::-;;;;;;;;;;-1:-1:-1;21823:294:0;;;;;:::i;:::-;;:::i;6238:111::-;;;;;;;;;;-1:-1:-1;6238:111:0;;;;;:::i;:::-;;:::i;9900:21::-;;;;;;;;;;-1:-1:-1;9900:21:0;;;;-1:-1:-1;;;;;9900:21:0;;;22125:79;;;;;;;;;;;;;:::i;24512:464::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;24596:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24588:56;;;::::0;-1:-1:-1;;;24588:56:0;;7939:2:1;24588:56:0::1;::::0;::::1;7921:21:1::0;7978:2;7958:18;;;7951:30;8017:25;7997:18;;;7990:53;8060:18;;24588:56:0::1;7737:347:1::0;24588:56:0::1;24660:9;24655:314;24679:9;:16:::0;24675:20;::::1;24655:314;;;24737:7;-1:-1:-1::0;;;;;24721:23:0::1;:9;24731:1;24721:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24721:12:0::1;:23:::0;24717:241:::1;;24780:9;24790:16:::0;;:20:::1;::::0;24809:1:::1;::::0;24790:20:::1;:::i;:::-;24780:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;24765:9:::1;:12:::0;;-1:-1:-1;;;;;24780:31:0;;::::1;::::0;24775:1;;24765:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24765:46:0::1;-1:-1:-1::0;;;;;24765:46:0;;::::1;;::::0;;24830:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24869:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24869:28:0::1;::::0;;24916:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24916:15:0;;;;;-1:-1:-1;;;;;;24916:15:0::1;::::0;;;;;24655:314:::1;24512:464:::0;:::o;24717:241::-:1;24697:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24655:314;;;;24512:464:::0;:::o;12100:134::-;12175:4;12182:37;12191:10;12203:7;12212:6;12182:8;:37::i;:::-;-1:-1:-1;12228:4:0;12100:134;;;;;:::o;12511:309::-;12609:4;12626:36;12636:6;12644:9;12655:6;12626:9;:36::i;:::-;12673:117;12682:6;12690:10;12702:87;12738:6;12702:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12702:19:0;;;;;;:11;:19;;;;;;;;12722:10;12702:31;;;;;;;;;:87;:35;:87::i;:::-;12673:8;:117::i;:::-;-1:-1:-1;12808:4:0;12511:309;;;;;:::o;22446:118::-;22525:16;;:31;;22546:9;22525:20;:31::i;:::-;22506:16;:50;22446:118::o;24169:335::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24254:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24253:21;24245:61;;;::::0;-1:-1:-1;;;24245:61:0;;8960:2:1;24245:61:0::1;::::0;::::1;8942:21:1::0;8999:2;8979:18;;;8972:30;9038:29;9018:18;;;9011:57;9085:18;;24245:61:0::1;8758:351:1::0;24245:61:0::1;-1:-1:-1::0;;;;;24320:16:0;::::1;24339:1;24320:16:::0;;;:7:::1;:16;::::0;;;;;:20;24317:108:::1;;-1:-1:-1::0;;;;;24396:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24376:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24357:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24317:108:::1;-1:-1:-1::0;;;;;24435:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24435:27:0::1;24458:4;24435:27:::0;;::::1;::::0;;;24473:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24473:23:0::1;::::0;;::::1;::::0;;24169:335::o;20232:83::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;20286:14:::1;:21:::0;;-1:-1:-1;;20286:21:0::1;20303:4;20286:21;::::0;;20232:83::o;23279:143::-;23332:7;23359:55;23392:21;23410:1;23392:9;:21::i;:::-;23381:4;;23359:28;;23371:15;;-1:-1:-1;;;;;23381:4:0;23371:9;:15::i;:::-;23359:7;;;:11;:28::i;:::-;:32;;:55::i;:::-;23352:62;;23279:143;:::o;23913:248::-;23979:7;24018;;24007;:18;;23999:73;;;;-1:-1:-1;;;23999:73:0;;9316:2:1;23999:73:0;;;9298:21:1;9355:2;9335:18;;;9328:30;9394:34;9374:18;;;9367:62;-1:-1:-1;;;9445:18:1;;;9438:40;9495:19;;23999:73:0;9114:406:1;23999:73:0;24083:19;24106:10;:8;:10::i;:::-;24083:33;-1:-1:-1;24134:19:0;24083:33;24134:7;:19;:::i;:::-;24127:26;23913:248;-1:-1:-1;;;23913:248:0:o;21508:182::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;21628:16:::1;::::0;21588:21:::1;::::0;-1:-1:-1;;;;;21628:16:0::1;21620:62;21655:26;21677:3;21655:17;21588:21:::0;21669:2;21655:13:::1;:17::i;:::-;:21:::0;::::1;:26::i;:::-;21620:62;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21557:133;21508:182:::0;:::o;12828:209::-;12942:10;12916:4;12963:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12963:32:0;;;;;;;;;;12916:4;;12933:74;;12954:7;;12963:43;;12996:10;;12963:43;:::i;22330:108::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;23430:475::-;23520:7;23559;;23548;:18;;23540:62;;;;-1:-1:-1;;;23540:62:0;;10079:2:1;23540:62:0;;;10061:21:1;10118:2;10098:18;;;10091:30;10157:33;10137:18;;;10130:61;10208:18;;23540:62:0;9877:355:1;23540:62:0;23618:17;23613:285;;23652:28;23683:39;23694:7;23703:4;23709:5;23716;23683:10;:39::i;:::-;23744:9;;-1:-1:-1;23737:16:0;;-1:-1:-1;23737:16:0;23613:285;23786:28;23817:39;23828:7;23837:4;23843:5;23850;23817:10;:39::i;:::-;23878:17;;;;-1:-1:-1;23871:24:0;;-1:-1:-1;23871:24:0;28389:92;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;28456:7:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;28456:17:0;;::::1;::::0;;;::::1;::::0;;28389:92::o;11642:173::-;-1:-1:-1;;;;;11722:20:0;;11708:7;11722:20;;;:11;:20;;;;;;;;11718:49;;;-1:-1:-1;;;;;;11751:16:0;;;;;:7;:16;;;;;;;11642:173::o;11718:49::-;-1:-1:-1;;;;;11796:16:0;;;;;;:7;:16;;;;;;11776:37;;:19;:37::i;20323:124::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20407:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;20407:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20323:124::o;22212:110::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;22285:20:::1;:29:::0;22212:110::o;22572:445::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;22656:13:::1;22672:43;22702:11;;22672:17;22684:4;22672:7;;:11;;:17;;;;:::i;:43::-;22656:59;;22726:17;22746:46;22779:11;;22746:20;22758:7;22746;;:11;;:20;;;;:::i;:46::-;22726:66;;22794:13;22810:26;22829:6;22810:14;22822:1;22810:7:::0;::::1;:11;;:14;;;;:::i;:26::-;22794:42;;22864:5;22855;:14;;:36;;;;;22886:5;22873:9;:18;;22855:36;22847:102;;;::::0;-1:-1:-1;;;22847:102:0;;10439:2:1;22847:102:0::1;::::0;::::1;10421:21:1::0;10478:2;10458:18;;;10451:30;10517:34;10497:18;;;10490:62;-1:-1:-1;;;10568:18:1;;;10561:51;10629:19;;22847:102:0::1;10237:417:1::0;22847:102:0::1;-1:-1:-1::0;22960:12:0::1;:20:::0;;;;22982:15:::1;:27:::0;-1:-1:-1;;22572:445:0:o;21698:117::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21779:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;21779:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21698:117::o;21024:476::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;21178:18:::1;:31:::0;;-1:-1:-1;;;;;21178:31:0;;::::1;-1:-1:-1::0;;;;;;21178:31:0;;::::1;::::0;::::1;::::0;;;21211:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;21244:16:::1;:27:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;21273:16:::1;:27:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;21302:16:::1;:27:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;21178:18:::1;21340:23:::0;;;:11:::1;:23:::0;;;;;;;:30;;-1:-1:-1;;21340:30:0;;::::1;21178:31:::0;21340:30;;::::1;::::0;;;21372:23;;;;;;:30;;;::::1;::::0;::::1;::::0;;21404:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;21434:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;21464:21;;;;;:28;;;;::::1;::::0;;::::1;::::0;;21024:476::o;28489:148::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;28574:16:::1;:27:::0;;-1:-1:-1;;;;;;28574:27:0::1;-1:-1:-1::0;;;;;28574:27:0;;;::::1;::::0;;;::::1;::::0;;28603:16:::1;:26:::0;28489:148::o;13045:265::-;13138:4;13155:125;13164:10;13176:7;13185:94;13222:15;13185:94;;;;;;;;;;;;;;;;;13197:10;13185:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13185:32:0;;;;;;;;;;;:94;:36;:94::i;11821:140::-;11899:4;11906:40;11916:10;11928:9;11939:6;11906:9;:40::i;23025:246::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;23147:39:::1;::::0;-1:-1:-1;;;23147:39:0;;23180:4:::1;23147:39;::::0;::::1;1795:51:1::0;23132:12:0::1;::::0;-1:-1:-1;;;;;23147:24:0;::::1;::::0;::::1;::::0;1768:18:1;;23147:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23132:54:::0;-1:-1:-1;;;;;;23197:23:0;::::1;;23221:9:::0;23232:30:::1;23258:3;23232:21;23132:54:::0;23241:11;23232:8:::1;:21::i;:30::-;23197:66;::::0;-1:-1:-1;;;;;;23197:66:0::1;::::0;;;;;;-1:-1:-1;;;;;11040:32:1;;;23197:66:0::1;::::0;::::1;11022:51:1::0;11089:18;;;11082:34;10995:18;;23197:66:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23121:150;23025:246:::0;;;:::o;20455:561::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;20650:8:::1;:15:::0;;;20667:7:::1;:15:::0;;;20684:11:::1;:20:::0;;;20715:8:::1;:27:::0;;;-1:-1:-1;20753:31:0;;;-1:-1:-1;20795:31:0;;;20837:23;:34;;;20882:16;:27;;;20940:11:::1;::::0;20928:23;::::1;::::0;::::1;::::0;:49:::1;;;20966:11;;20955:7;;:22;;20928:49;:79;;;;;20996:11;;20981;;:26;;20928:79;20920:88;;;::::0;::::1;;20455:561:::0;;;;;;;;:::o;21823:294::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;21951:10:::1;:24:::0;;;21993:7:::1;::::0;:48:::1;::::0;22033:6:::1;::::0;21993:27:::1;::::0;22005:14;21993:11:::1;:27::i;:48::-;21977:13;:64:::0;22061:7:::1;::::0;:48:::1;::::0;22101:6:::1;::::0;22061:27:::1;::::0;22073:14;22061:11:::1;:27::i;:48::-;22043:15;:66:::0;-1:-1:-1;;;21823:294:0:o;6238:111::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;6304:5:::1;:11:::0;;-1:-1:-1;;;;;;6304:11:0::1;-1:-1:-1::0;;;;;6304:11:0;::::1;::::0;;::::1;::::0;;;6322:25:::1;::::0;1795:51:1;;;6322:25:0::1;::::0;1783:2:1;1768:18;6322:25:0::1;;;;;;;6238:111:::0;:::o;22125:79::-;6200:4;6225:5;-1:-1:-1;;;;;6225:5:0;6112:10;6214:16;6096:38;;;;-1:-1:-1;;;6096:38:0;;;;;;;:::i;:::-;22180:16:::1;:14;:16::i;:::-;22125:79::o:0;13441:335::-;-1:-1:-1;;;;;13534:19:0;;13526:68;;;;-1:-1:-1;;;13526:68:0;;11795:2:1;13526:68:0;;;11777:21:1;11834:2;11814:18;;;11807:30;11873:34;11853:18;;;11846:62;-1:-1:-1;;;11924:18:1;;;11917:34;11968:19;;13526:68:0;11593:400:1;13526:68:0;-1:-1:-1;;;;;13613:21:0;;13605:68;;;;-1:-1:-1;;;13605:68:0;;12200:2:1;13605:68:0;;;12182:21:1;12239:2;12219:18;;;12212:30;12278:34;12258:18;;;12251:62;-1:-1:-1;;;12329:18:1;;;12322:32;12371:19;;13605:68:0;11998:398:1;13605:68:0;-1:-1:-1;;;;;13684:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13736:32;;160:25:1;;;13736:32:0;;133:18:1;13736:32:0;;;;;;;13441:335;;;:::o;13784:632::-;13873:37;13884:6;13892:9;13903:6;13873:10;:37::i;:::-;13921:38;13941:6;13949:9;13921:19;:38::i;:::-;13970:41;13985:6;13993:9;14004:6;13970:14;:41::i;:::-;14023:39;14036:9;14047:6;14055;14023:12;:39::i;:::-;14073:35;14090:6;14098:9;14073:16;:35::i;:::-;14119:40;14133:6;14141:9;14152:6;14119:13;:40::i;:::-;14170:35;14179:6;14187:9;14198:6;14170:8;:35::i;:::-;14216:31;14229:6;14237:9;14216:12;:31::i;:::-;-1:-1:-1;;;;;14302:19:0;;;;;;:11;:19;;;;;;14258:150;;14273:6;;14281:9;;14292:6;;14302:19;;;:45;;-1:-1:-1;;;;;;14325:22:0;;;;;;:11;:22;;;;;;;;14302:45;:57;;;-1:-1:-1;14351:8:0;;;;;;;14302:57;:69;;;-1:-1:-1;14363:8:0;;;;14302:69;14387:4;;14300:72;;;-1:-1:-1;;;;;14387:4:0;;;14374:17;;;;;;14393:14;;;14258;:150::i;1487:162::-;1573:7;1619:12;1611:6;;;;1603:29;;;;-1:-1:-1;;;1603:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1641:5:0;;;1487:162::o;186:82::-;244:7;261:5;265:1;261;:5;:::i;274:82::-;332:7;349:5;353:1;349;:5;:::i;29805:158::-;29846:7;29867:15;29884;29903:19;:17;:19::i;:::-;29866:56;;-1:-1:-1;29866:56:0;-1:-1:-1;29940:15:0;29866:56;;29940:15;:::i;:::-;29933:22;;;;29805:158;:::o;362:82::-;420:7;437:5;441:1;437;:5;:::i;450:82::-;508:7;525:5;529:1;525;:5;:::i;25583:415::-;25686:36;;:::i;:::-;25747:49;25759:7;25768;25777:6;25785:10;25747:11;:49::i;:::-;25735:61;;25911:52;25923:9;25934:7;25943;25952:10;:8;:10::i;:::-;25911:11;:52::i;:::-;25889:18;;;25807:156;25869:19;;;25807:156;25854:14;;;25807:156;25827:25;;;25807:156;;;25583:415;;;;;;;:::o;29280:517::-;29366:16;;29345;;:38;;:20;:38::i;:::-;29326:16;:57;29394:8;:15;;-1:-1:-1;;29394:15:0;;;;;;29444:24;29462:4;29444:9;:24::i;:::-;29420:48;;29497:37;29517:16;;29497:15;;:19;;:37;;;;:::i;:::-;29479:15;:55;29562:16;;29545:34;;:16;:34::i;:::-;29590:20;29613:43;29642:13;29613:24;29631:4;29613:9;:24::i;:43::-;29687:17;;29590:66;;-1:-1:-1;29687:35:0;;29590:66;29687:21;:35::i;:::-;29667:17;:55;-1:-1:-1;;29733:8:0;:16;;-1:-1:-1;;29733:16:0;;;29744:5;29760:16;:29;29280:517::o;14424:355::-;-1:-1:-1;;;;;14528:20:0;;14520:70;;;;-1:-1:-1;;;14520:70:0;;12776:2:1;14520:70:0;;;12758:21:1;12815:2;12795:18;;;12788:30;12854:34;12834:18;;;12827:62;-1:-1:-1;;;12905:18:1;;;12898:35;12950:19;;14520:70:0;12574:401:1;14520:70:0;-1:-1:-1;;;;;14609:23:0;;14601:71;;;;-1:-1:-1;;;14601:71:0;;13182:2:1;14601:71:0;;;13164:21:1;13221:2;13201:18;;;13194:30;13260:34;13240:18;;;13233:62;-1:-1:-1;;;13311:18:1;;;13304:33;13354:19;;14601:71:0;12980:399:1;14601:71:0;14701:17;14711:6;14701:9;:17::i;:::-;14691:6;:27;;14683:88;;;;-1:-1:-1;;;14683:88:0;;13586:2:1;14683:88:0;;;13568:21:1;13625:2;13605:18;;;13598:30;13664:34;13644:18;;;13637:62;-1:-1:-1;;;13715:18:1;;;13708:47;13772:19;;14683:88:0;13384:413:1;15009:206:0;-1:-1:-1;;;;;15102:19:0;;;;;;:11;:19;;;;;;;;15101:20;:47;;;;-1:-1:-1;;;;;;15126:22:0;;;;;;:11;:22;;;;;;;;15125:23;15101:47;15098:110;;;15158:14;;;;15150:56;;;;-1:-1:-1;;;15150:56:0;;14004:2:1;15150:56:0;;;13986:21:1;14043:2;14023:18;;;14016:30;14082:31;14062:18;;;14055:59;14131:18;;15150:56:0;13802:353:1;15227:384:0;-1:-1:-1;;;;;15331:22:0;;;;;;:11;:22;;;;;;;;15330:23;:47;;;;-1:-1:-1;;;;;;15358:19:0;;;;;;:11;:19;;;;;;;;15357:20;15330:47;:77;;;;-1:-1:-1;;;;;;15381:26:0;;15402:4;15381:26;;15330:77;:107;;;;-1:-1:-1;15432:4:0;;-1:-1:-1;;;;;15411:26:0;;;15432:4;;15411:26;;15330:107;:128;;;;-1:-1:-1;15454:4:0;;-1:-1:-1;;;;;15441:17:0;;;15454:4;;15441:17;;15330:128;:163;;;;-1:-1:-1;15475:18:0;;-1:-1:-1;;;;;15462:31:0;;;15475:18;;15462:31;;15330:163;15327:277;;;15552:15;;15541:6;15518:20;15528:9;15518;:20::i;:::-;:29;;;;:::i;:::-;15517:50;;15509:93;;;;-1:-1:-1;;;15509:93:0;;14362:2:1;15509:93:0;;;14344:21:1;14401:2;14381:18;;;14374:30;14440:32;14420:18;;;14413:60;14490:18;;15509:93:0;14160:354:1;15817:193:0;15926:12;;15916:6;:22;;:45;;;-1:-1:-1;;;;;;15942:19:0;;;;;;:11;:19;;;;;;;;15916:45;:64;;;-1:-1:-1;;;;;;15965:15:0;;;;;;:11;:15;;;;;;;;15916:64;15908:94;;;;-1:-1:-1;;;15908:94:0;;14721:2:1;15908:94:0;;;14703:21:1;14760:2;14740:18;;;14733:30;-1:-1:-1;;;14779:18:1;;;14772:47;14836:18;;15908:94:0;14519:341:1;15619:190:0;15716:4;;-1:-1:-1;;;;;15703:17:0;;;15716:4;;15703:17;:41;;;;-1:-1:-1;;;;;;15725:19:0;;;;;;:11;:19;;;;;;;;15724:20;15703:41;:54;;;;-1:-1:-1;15749:8:0;;;;15748:9;15703:54;:67;;;;-1:-1:-1;15762:8:0;;;;;;;15761:9;15703:67;15700:102;;;15784:9;;:16;;15798:1;15784:13;:16::i;:::-;15772:9;:28;15619:190;;:::o;28645:627::-;28742:14;;;;:38;;;;-1:-1:-1;;;;;;28761:19:0;;;;;;:11;:19;;;;;;;;28760:20;28742:38;:68;;;;-1:-1:-1;28805:4:0;;-1:-1:-1;;;;;28784:26:0;;;28805:4;;28784:26;28742:68;:102;;;;;28824:20;;28814:6;:30;;28742:102;:128;;;;-1:-1:-1;28862:8:0;;;;28861:9;28742:128;:141;;;;-1:-1:-1;28875:8:0;;;;;;;28874:9;28742:141;28739:178;;;28913:1;28885:16;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;28739:178:0;28950:16;;28930;;:36;;:81;;;;;28995:16;;28970:21;:41;;28930:81;:122;;;;;29035:17;;29015:16;;:37;;28930:122;:147;;;;-1:-1:-1;29070:7:0;;;;;;;28930:147;:171;;;;-1:-1:-1;;;;;;29082:19:0;;;;;;:11;:19;;;;;;;;29081:20;28930:171;:201;;;;-1:-1:-1;29126:4:0;;-1:-1:-1;;;;;29105:26:0;;;29126:4;;29105:26;28930:201;:219;;;;-1:-1:-1;29135:14:0;;;;28930:219;:232;;;;-1:-1:-1;29154:8:0;;;;29153:9;28930:232;:245;;;;-1:-1:-1;29167:8:0;;;;;;;29166:9;28930:245;:268;;;;-1:-1:-1;29189:9:0;;-1:-1:-1;;;;;29179:19:0;;;29189:9;;;;;29179:19;;28930:268;:315;;;;;29225:20;;29215:6;:30;;28930:315;28927:338;;;29247:16;:14;:16::i;17514:188::-;17606:41;17621:6;17629:9;17640:6;17606:14;:41::i;:::-;17603:92;;;17649:29;17664:13;;17649:14;:29::i;:::-;17692:1;17680:9;:13;17514:188;;;:::o;14787:214::-;14864:9;:24;;-1:-1:-1;;;;;;14864:24:0;;;14912:4;;-1:-1:-1;;;;;14902:14:0;;;14912:4;;14902:14;:41;;;;-1:-1:-1;;;;;;14921:22:0;;;;;;:11;:22;;;;;;;;14920:23;14902:41;:54;;;;-1:-1:-1;14948:8:0;;;;;;;14947:9;14902:54;:67;;;;-1:-1:-1;14961:8:0;;;;14960:9;14902:67;14899:95;;;14971:9;:21;;-1:-1:-1;;;;;14971:21:0;;;;-1:-1:-1;;;;;;14971:21:0;;;;;;14787:214;;:::o;16150:921::-;16289:28;16320:48;16331:7;16340;16349:6;16357:10;16320;:48::i;:::-;-1:-1:-1;;;;;16382:19:0;;;;;;:11;:19;;;;;;16289:79;;-1:-1:-1;16382:19:0;;16379:83;;;-1:-1:-1;;;;;16437:15:0;;;;;;:7;:15;;;;;;:23;;16453:7;;16437:23;:::i;:::-;-1:-1:-1;;;;;16419:15:0;;;;;;:7;:15;;;;;:41;16379:83;-1:-1:-1;;;;;16475:22:0;;;;;;:11;:22;;;;;;;;16472:101;;;16554:17;;;;-1:-1:-1;;;;;16535:18:0;;;;;;:7;:18;;;;;;:36;;16554:17;16535:36;:::i;:::-;-1:-1:-1;;;;;16514:18:0;;;;;;:7;:18;;;;;:57;16472:101;16617:9;;-1:-1:-1;;;;;16601:15:0;;16617:9;16601:15;;;:7;:15;;;;;;:25;;16617:9;16601:25;:::i;:::-;-1:-1:-1;;;;;16583:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;16677:17;;;16658:18;;;;;;;;;;:36;;16677:17;16658:36;:::i;:::-;-1:-1:-1;;;;;16637:18:0;;;;;;:7;:18;;;;;;;:57;;;;16717:6;;;16725;;;;16705:27;;16717:6;16705:11;:27::i;:::-;16743:39;16757:1;:11;;;16770:1;:11;;;16743:13;:39::i;:::-;16793:36;16806:1;:10;;;16818:1;:10;;;16793:12;:36::i;:::-;16862:9;-1:-1:-1;;;;;16845:46:0;16854:6;-1:-1:-1;;;;;16845:46:0;;16873:1;:17;;;16845:46;;;;160:25:1;;148:2;133:18;;14:177;16845:46:0;;;;;;;;16905:11;;;;:15;16902:71;;16952:4;-1:-1:-1;;;;;16927:44:0;16936:6;-1:-1:-1;;;;;16927:44:0;;16959:1;:11;;;16927:44;;;;160:25:1;;148:2;133:18;;14:177;16927:44:0;;;;;;;;16902:71;16986:10;;;;:14;16983:81;;17032:16;;;17051:10;;;17007:55;;-1:-1:-1;;;;;17032:16:0;;;;17007:55;;;;;;;160:25:1;;148:2;133:18;;14:177;17007:55:0;;;;;;;;16983:81;16278:793;16150:921;;;;;;:::o;29971:531::-;30068:7;;30104;;30021;;;;;30122:270;30146:9;:16;30142:20;;30122:270;;;30212:7;30188;:21;30196:9;30206:1;30196:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30196:12:0;30188:21;;;;;;;;;;;;;:31;;:66;;;30247:7;30223;:21;30231:9;30241:1;30231:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30231:12:0;30223:21;;;;;;;;;;;;;:31;30188:66;30184:97;;;30264:7;;30273;;30256:25;;;;;;;29971:531;;:::o;30184:97::-;30314:7;:21;30322:9;30332:1;30322:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30322:12:0;30314:21;;;;;;;;;;;;;30306:29;;:7;:29;:::i;:::-;30296:39;;30368:7;:21;30376:9;30386:1;30376:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30376:12:0;30368:21;;;;;;;;;;;;;30360:29;;:7;:29;:::i;:::-;30350:39;-1:-1:-1;30164:3:0;;;;:::i;:::-;;;;30122:270;;;;30424:7;;30416;;:15;;;;:::i;:::-;30406:7;:25;30402:56;;;30441:7;;30450;;30433:25;;;;;;29971:531;;:::o;30402:56::-;30477:7;;30486;;-1:-1:-1;29971:531:0;-1:-1:-1;29971:531:0:o;26224:1555::-;26328:28;;:::i;:::-;26373:7;26372:8;:41;;;;26384:29;26394:6;26402:10;26384:9;:29::i;:::-;26369:110;;;26428:17;;;:27;;;26468:8;;26369:110;26493:6;26492:7;:22;;;;;26504:10;26503:11;26492:22;26489:431;;;26530:17;26550:41;26579:11;;26550:24;26562:11;;26550:7;:11;;:24;;;;:::i;:41::-;26530:61;;26625:11;;26609:8;:12;;;:27;26606:75;;26668:11;;26655:8;:12;26647:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;26638:6;;;:41;26606:75;26734:8;:12;26718:11;;:29;;:15;:29::i;:::-;26698:16;;:49;26695:105;;26787:11;;26770:16;;26762:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;26749:10;;;:49;26695:105;26828:37;26854:1;:10;;;26828:21;26842:1;:6;;;26828:9;:13;;:21;;;;:::i;:37::-;26814:11;;;:51;26900:17;26908:9;26900:7;:17;:::i;:::-;26880;;;:37;-1:-1:-1;26489:431:0;26933:6;26930:403;;;26955:17;26975:37;27000:11;;26975:20;26987:7;;26975;:11;;:20;;;;:::i;:37::-;26955:57;;27046:7;;27030:8;:12;;;:23;27027:71;;27085:11;;27072:8;:12;27064:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;27055:6;;;:41;27027:71;27147:8;:12;27135:7;;:25;;:11;:25::i;:::-;27115:16;;:45;27112:101;;27200:11;;27183:16;;27175:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;27162:10;;;:49;27112:101;27241:37;27267:1;:10;;;27241:21;27255:1;:6;;;27241:9;:13;;:21;;;;:::i;:37::-;27227:11;;;:51;27313:17;27321:9;27313:7;:17;:::i;:::-;27293;;;:37;-1:-1:-1;26930:403:0;27346:10;27343:410;;;27372:17;27392:38;27418:11;;27392:21;27404:8;;27392:7;:11;;:21;;;;:::i;:38::-;27372:58;;27464:8;;27448;:12;;;:24;27445:72;;27504:11;;27491:8;:12;27483:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;27474:6;;;:41;27445:72;27567:8;:12;27554:8;;:26;;:12;:26::i;:::-;27534:16;;:46;27531:102;;27620:11;;27603:16;;27595:24;;:7;:24;:::i;:::-;:36;;;;:::i;:::-;27582:10;;;:49;27531:102;27661:37;27687:1;:10;;;27661:21;27675:1;:6;;;27661:9;:13;;:21;;;;:::i;:37::-;27647:11;;;:51;27733:17;27741:9;27733:7;:17;:::i;:::-;27713;;;:37;-1:-1:-1;26224:1555:0;;;;;;:::o;27787:594::-;27912:15;;;;;28026:19;28034:11;28026:7;:19;:::i;:::-;28016:29;;28060:7;28056:60;;-1:-1:-1;28089:7:0;;-1:-1:-1;28107:1:0;;-1:-1:-1;28107:1:0;;-1:-1:-1;28107:1:0;28082:31;;28056:60;28140:11;28133:1;:6;;;:18;;;;:::i;:::-;28126:25;;28186:11;28174:1;:11;;;:23;;;;:::i;:::-;28162:35;;28230:11;28219:1;:10;;;:22;;;;:::i;:::-;28208:33;-1:-1:-1;28208:33:0;28284:9;28271:12;28279:4;28271:7;:12;:::i;:::-;:22;;;;:::i;:::-;:31;;;;:::i;:::-;28252:50;;27787:594;;;;;;;;;;:::o;19861:363::-;19949:16;;;19963:1;19949:16;;;;;;;;19925:21;;19949:16;;;;;;;;-1:-1:-1;;19986:6:0;;:13;;;-1:-1:-1;;;19986:13:0;;;;19925:40;;-1:-1:-1;;;;;;19986:6:0;;;;:11;;-1:-1:-1;19986:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19976:4;19981:1;19976:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;19976:23:0;;;-1:-1:-1;;;;;19976:23:0;;;;;20028:4;20010;20015:1;20010:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20010:23:0;;;:7;;;;;;;;;:23;20044:6;;20169:16;;20044:172;;-1:-1:-1;;;20044:172:0;;:6;;;;:57;;20109:9;;20044:172;;:6;;20150:4;;20169:16;;;;20200:15;;20044:172;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17080:426;17178:4;17195:13;17221:15;;17211:6;:25;;17195:41;;17247:19;17297:13;;17269:24;17287:4;17269:9;:24::i;:::-;17329:8;;17269:41;-1:-1:-1;17269:41:0;;-1:-1:-1;17329:8:0;;17328:9;:24;;;;-1:-1:-1;17341:11:0;;;;;;;17328:24;:36;;;;;17356:8;17328:36;:60;;;;-1:-1:-1;;;;;;17369:19:0;;;;;;:11;:19;;;;;;;;17368:20;17328:60;:78;;;;-1:-1:-1;17392:14:0;;;;17328:78;:112;;;;-1:-1:-1;17436:4:0;;-1:-1:-1;;;;;17423:17:0;;;17436:4;;17423:17;17328:112;:139;;;;;17457:10;;17444:9;;:23;;17328:139;:157;;;;;17471:14;17328:157;:170;;;;-1:-1:-1;17490:8:0;;;;;;;17489:9;17328:170;17321:177;17080:426;-1:-1:-1;;;;;;17080:426:0:o;17710:1350::-;12465:8;:15;;-1:-1:-1;;12465:15:0;12476:4;12465:15;;;;;;17804:8:::1;::::0;12465;;17803:24:::1;::::0;17825:1:::1;::::0;17803:17:::1;::::0;17804:8;17803:14:::1;:17::i;:::-;:21:::0;::::1;:24::i;:::-;17780:47;;17841:8;;17853:1;17841:13:::0;17838:134:::1;;17932:23:::0;;17894:18;;17871;;:99:::1;::::0;17968:1:::1;::::0;17871:92:::1;::::0;17961:1:::1;::::0;17871:85:::1;::::0;17932:23;;17871:85;;:22:::1;:42::i;:::-;:46:::0;::::1;:85::i;:99::-;17856:114;;17838:134;18026:18:::0;;17982:32:::1;::::0;18047:12;;18017:27:::1;::::0;:6;:27:::1;:::i;:::-;:42;;;;:::i;:::-;17982:77:::0;-1:-1:-1;18070:14:0::1;18087:33;17982:77:::0;18087:6;:33:::1;:::i;:::-;18070:50:::0;-1:-1:-1;18156:21:0::1;18188:24;18070:50:::0;18188:16:::1;:24::i;:::-;18223:20;18246:38;18270:14:::0;18246:21:::1;:38;:::i;:::-;18347:18:::0;;18223:61;;-1:-1:-1;18295:19:0::1;::::0;18332:33:::1;::::0;:12;:33:::1;:::i;:::-;18316:50;::::0;:12;:50:::1;:::i;:::-;18423:18:::0;;18295:71;;-1:-1:-1;18377:29:0::1;::::0;18409:32:::1;::::0;18295:71;18409:32:::1;:::i;:::-;18377:64:::0;-1:-1:-1;18455:25:0;;18452:108:::1;;18496:61;18509:24;18535:21;18496:12;:61::i;:::-;18619:18:::0;;18570:23:::1;::::0;18596:42:::1;::::0;:18:::1;:11:::0;18612:1:::1;18596:15;:18::i;:42::-;18570:68:::0;-1:-1:-1;18652:19:0;;18649:80:::1;;18681:18;::::0;18673:53:::1;::::0;-1:-1:-1;;;;;18681:18:0;;::::1;::::0;18673:53;::::1;;;::::0;18710:15;;18681:18:::1;18673:53:::0;18681:18;18673:53;18710:15;18681:18;18673:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18649:80;18786:23:::0;;18739:21:::1;::::0;18763:47:::1;::::0;:18:::1;:11:::0;18779:1:::1;18763:15;:18::i;:47::-;18739:71:::0;-1:-1:-1;18824:17:0;;18821:80:::1;;18863:16;::::0;:35:::1;::::0;18884:13;18863:20:::1;:35::i;:::-;18844:16;:54:::0;18821:80:::1;18911:15;18929:43;18955:16;;18929:21;:25;;:43;;;;:::i;:::-;18911:61:::0;-1:-1:-1;18986:20:0;;18983:70:::1;;19016:16;::::0;19008:43:::1;::::0;-1:-1:-1;;;;;19016:16:0;;::::1;::::0;19008:43;::::1;;;::::0;19043:7;;19016:16:::1;19008:43:::0;19016:16;19008:43;19043:7;19016:16;19008:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18983:70;-1:-1:-1::0;;12485:8:0;:16;;-1:-1:-1;;12485:16:0;;;-1:-1:-1;;;;;;;;;17710:1350:0:o;16018:124::-;16096:4;16086:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;16112:11:0;:22;;16130:4;;16112:11;:15;;:22;;16130:4;;16112:22;:::i;:::-;;;;-1:-1:-1;;;;16018:124:0:o;24984:277::-;25087:9;25064:11;:20;;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;25132:4:0;25112:26;;;;:11;:26;;;;;;;;25109:100;;;25180:4;25164:22;;;;:7;:22;;;;;:33;;25188:9;;25164:22;:33;;25188:9;;25164:33;:::i;:::-;;;;-1:-1:-1;;25109:100:0;25235:4;25219:22;;;;:7;:22;;;;;:34;;25244:9;;25219:22;:34;;25244:9;;25219:34;:::i;25269:306::-;25368:8;25346:11;:19;;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;25412:16:0;;;-1:-1:-1;;;;;25412:16:0;25392:38;;;;:11;:38;;;;;;;;;25389:123;;;25472:16;;;-1:-1:-1;;;;;25472:16:0;25456:34;;;;:7;:34;;;;;;:44;;25492:8;;25456:34;:44;;25492:8;;25456:44;:::i;:::-;;;;-1:-1:-1;;25389:123:0;25538:16;;;-1:-1:-1;;;;;25538:16:0;25522:34;;;;:7;:34;;;;;;:45;;25559:8;;25522:34;:45;;25559:8;;25522:45;:::i;26006:210::-;26078:4;26103:6;:22;;;;-1:-1:-1;26113:7:0;;:12;26103:22;26102:57;;;;26131:10;:27;;;;-1:-1:-1;26145:8:0;;:13;26131:27;26102:105;;;;26165:6;26164:7;:22;;;;;26176:10;26175:11;26164:22;:42;;;;-1:-1:-1;;26190:11:0;;:16;;26006:210;-1:-1:-1;;26006:210:0:o;19419:434::-;19509:16;;;19523:1;19509:16;;;;;;;;19485:21;;19509:16;;;;;;;;;;-1:-1:-1;19509:16:0;19485:40;;19554:4;19536;19541:1;19536:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19536:23:0;;;:7;;;;;;;;;;:23;;;;19580:6;;:13;;;-1:-1:-1;;;19580:13:0;;;;:6;;;;;:11;;:13;;;;;19536:7;;19580:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19570:4;19575:1;19570:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19570:23:0;;;:7;;;;;;;;;:23;19636:6;;19604:53;;19621:4;;19636:6;19645:11;19604:8;:53::i;:::-;19668:6;;:177;;-1:-1:-1;;;19668:177:0;;-1:-1:-1;;;;;19668:6:0;;;;:57;;:177;;19740:11;;19668:6;;19782:4;;19809;;19829:15;;19668:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19474:379;19419:434;:::o;19068:343::-;19181:6;;19149:53;;19166:4;;-1:-1:-1;;;;;19181:6:0;19190:11;19149:8;:53::i;:::-;19213:6;;19354:18;;19213:190;;-1:-1:-1;;;19213:190:0;;19276:4;19213:190;;;17162:34:1;17212:18;;;17205:34;;;19213:6:0;17255:18:1;;;17248:34;;;17298:18;;;17291:34;-1:-1:-1;;;;;19354:18:0;;;17341:19:1;;;17334:44;19387:15:0;17394:19:1;;;17387:35;19213:6:0;;;:22;;19243:9;;17096:19:1;;19213:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;196:131:1:-;-1:-1:-1;;;;;271:31:1;;261:42;;251:70;;317:1;314;307:12;251:70;196:131;:::o;332:247::-;391:6;444:2;432:9;423:7;419:23;415:32;412:52;;;460:1;457;450:12;412:52;499:9;486:23;518:31;543:5;518:31;:::i;584:548::-;696:4;725:2;754;743:9;736:21;786:6;780:13;829:6;824:2;813:9;809:18;802:34;854:1;864:140;878:6;875:1;872:13;864:140;;;973:14;;;969:23;;963:30;939:17;;;958:2;935:26;928:66;893:10;;864:140;;;868:3;1053:1;1048:2;1039:6;1028:9;1024:22;1020:31;1013:42;1123:2;1116;1112:7;1107:2;1099:6;1095:15;1091:29;1080:9;1076:45;1072:54;1064:62;;;;584:548;;;;:::o;1137:315::-;1205:6;1213;1266:2;1254:9;1245:7;1241:23;1237:32;1234:52;;;1282:1;1279;1272:12;1234:52;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;1442:2;1427:18;;;;1414:32;;-1:-1:-1;;;1137:315:1:o;1857:456::-;1934:6;1942;1950;2003:2;1991:9;1982:7;1978:23;1974:32;1971:52;;;2019:1;2016;2009:12;1971:52;2058:9;2045:23;2077:31;2102:5;2077:31;:::i;:::-;2127:5;-1:-1:-1;2184:2:1;2169:18;;2156:32;2197:33;2156:32;2197:33;:::i;:::-;1857:456;;2249:7;;-1:-1:-1;;;2303:2:1;2288:18;;;;2275:32;;1857:456::o;2318:180::-;2377:6;2430:2;2418:9;2409:7;2405:23;2401:32;2398:52;;;2446:1;2443;2436:12;2398:52;-1:-1:-1;2469:23:1;;2318:180;-1:-1:-1;2318:180:1:o;2692:118::-;2778:5;2771:13;2764:21;2757:5;2754:32;2744:60;;2800:1;2797;2790:12;2815:309;2880:6;2888;2941:2;2929:9;2920:7;2916:23;2912:32;2909:52;;;2957:1;2954;2947:12;2909:52;2993:9;2980:23;2970:33;;3053:2;3042:9;3038:18;3025:32;3066:28;3088:5;3066:28;:::i;:::-;3113:5;3103:15;;;2815:309;;;;;:::o;3129:241::-;3185:6;3238:2;3226:9;3217:7;3213:23;3209:32;3206:52;;;3254:1;3251;3244:12;3206:52;3293:9;3280:23;3312:28;3334:5;3312:28;:::i;3375:382::-;3440:6;3448;3501:2;3489:9;3480:7;3476:23;3472:32;3469:52;;;3517:1;3514;3507:12;3469:52;3556:9;3543:23;3575:28;3597:5;3575:28;:::i;:::-;3622:5;-1:-1:-1;3679:2:1;3664:18;;3651:32;3692:33;3651:32;3692:33;:::i;3762:248::-;3830:6;3838;3891:2;3879:9;3870:7;3866:23;3862:32;3859:52;;;3907:1;3904;3897:12;3859:52;-1:-1:-1;;3930:23:1;;;4000:2;3985:18;;;3972:32;;-1:-1:-1;3762:248:1:o;4015:382::-;4080:6;4088;4141:2;4129:9;4120:7;4116:23;4112:32;4109:52;;;4157:1;4154;4147:12;4109:52;4196:9;4183:23;4215:31;4240:5;4215:31;:::i;:::-;4265:5;-1:-1:-1;4322:2:1;4307:18;;4294:32;4335:30;4294:32;4335:30;:::i;4402:813::-;4497:6;4505;4513;4521;4529;4582:3;4570:9;4561:7;4557:23;4553:33;4550:53;;;4599:1;4596;4589:12;4550:53;4638:9;4625:23;4657:31;4682:5;4657:31;:::i;:::-;4707:5;-1:-1:-1;4764:2:1;4749:18;;4736:32;4777:33;4736:32;4777:33;:::i;:::-;4829:7;-1:-1:-1;4888:2:1;4873:18;;4860:32;4901:33;4860:32;4901:33;:::i;:::-;4953:7;-1:-1:-1;5012:2:1;4997:18;;4984:32;5025:33;4984:32;5025:33;:::i;:::-;5077:7;-1:-1:-1;5136:3:1;5121:19;;5108:33;5150;5108;5150;:::i;:::-;5202:7;5192:17;;;4402:813;;;;;;;;:::o;5220:315::-;5288:6;5296;5349:2;5337:9;5328:7;5324:23;5320:32;5317:52;;;5365:1;5362;5355:12;5317:52;5401:9;5388:23;5378:33;;5461:2;5450:9;5446:18;5433:32;5474:31;5499:5;5474:31;:::i;5540:388::-;5608:6;5616;5669:2;5657:9;5648:7;5644:23;5640:32;5637:52;;;5685:1;5682;5675:12;5637:52;5724:9;5711:23;5743:31;5768:5;5743:31;:::i;5933:661::-;6055:6;6063;6071;6079;6087;6095;6103;6111;6164:3;6152:9;6143:7;6139:23;6135:33;6132:53;;;6181:1;6178;6171:12;6132:53;-1:-1:-1;;6204:23:1;;;6274:2;6259:18;;6246:32;;-1:-1:-1;6325:2:1;6310:18;;6297:32;;6376:2;6361:18;;6348:32;;-1:-1:-1;6427:3:1;6412:19;;6399:33;;-1:-1:-1;6479:3:1;6464:19;;6451:33;;-1:-1:-1;6531:3:1;6516:19;;6503:33;;-1:-1:-1;6583:3:1;6568:19;6555:33;;-1:-1:-1;5933:661:1;-1:-1:-1;5933:661:1:o;6599:316::-;6676:6;6684;6692;6745:2;6733:9;6724:7;6720:23;6716:32;6713:52;;;6761:1;6758;6751:12;6713:52;-1:-1:-1;;6784:23:1;;;6854:2;6839:18;;6826:32;;-1:-1:-1;6905:2:1;6890:18;;;6877:32;;6599:316;-1:-1:-1;6599:316:1:o;7403:329::-;7605:2;7587:21;;;7644:1;7624:18;;;7617:29;-1:-1:-1;;;7677:2:1;7662:18;;7655:36;7723:2;7708:18;;7403:329::o;8089:127::-;8150:10;8145:3;8141:20;8138:1;8131:31;8181:4;8178:1;8171:15;8205:4;8202:1;8195:15;8221:127;8282:10;8277:3;8273:20;8270:1;8263:31;8313:4;8310:1;8303:15;8337:4;8334:1;8327:15;8353:128;8420:9;;;8441:11;;;8438:37;;;8455:18;;:::i;8486:127::-;8547:10;8542:3;8538:20;8535:1;8528:31;8578:4;8575:1;8568:15;8602:4;8599:1;8592:15;8618:135;8657:3;8678:17;;;8675:43;;8698:18;;:::i;:::-;-1:-1:-1;8745:1:1;8734:13;;8618:135::o;9525:217::-;9565:1;9591;9581:132;;9635:10;9630:3;9626:20;9623:1;9616:31;9670:4;9667:1;9660:15;9698:4;9695:1;9688:15;9581:132;-1:-1:-1;9727:9:1;;9525:217::o;9747:125::-;9812:9;;;9833:10;;;9830:36;;;9846:18;;:::i;10659:184::-;10729:6;10782:2;10770:9;10761:7;10757:23;10753:32;10750:52;;;10798:1;10795;10788:12;10750:52;-1:-1:-1;10821:16:1;;10659:184;-1:-1:-1;10659:184:1:o;11127:245::-;11194:6;11247:2;11235:9;11226:7;11222:23;11218:32;11215:52;;;11263:1;11260;11253:12;11215:52;11295:9;11289:16;11314:28;11336:5;11314:28;:::i;12401:168::-;12474:9;;;12505;;12522:15;;;12516:22;;12502:37;12492:71;;12543:18;;:::i;14997:251::-;15067:6;15120:2;15108:9;15099:7;15095:23;15091:32;15088:52;;;15136:1;15133;15126:12;15088:52;15168:9;15162:16;15187:31;15212:5;15187:31;:::i;15253:461::-;15306:3;15344:5;15338:12;15371:6;15366:3;15359:19;15397:4;15426:2;15421:3;15417:12;15410:19;;15463:2;15456:5;15452:14;15484:1;15494:195;15508:6;15505:1;15502:13;15494:195;;;15573:13;;-1:-1:-1;;;;;15569:39:1;15557:52;;15629:12;;;;15664:15;;;;15605:1;15523:9;15494:195;;;-1:-1:-1;15705:3:1;;15253:461;-1:-1:-1;;;;;15253:461:1:o;15719:510::-;15990:6;15979:9;15972:25;16033:3;16028:2;16017:9;16013:18;16006:31;15953:4;16054:57;16106:3;16095:9;16091:19;16083:6;16054:57;:::i;:::-;-1:-1:-1;;;;;16147:32:1;;;;16142:2;16127:18;;16120:60;-1:-1:-1;16211:2:1;16196:18;16189:34;16046:65;15719:510;-1:-1:-1;;15719:510:1:o;16234:582::-;16533:6;16522:9;16515:25;16576:6;16571:2;16560:9;16556:18;16549:34;16619:3;16614:2;16603:9;16599:18;16592:31;16496:4;16640:57;16692:3;16681:9;16677:19;16669:6;16640:57;:::i;:::-;-1:-1:-1;;;;;16733:32:1;;;;16728:2;16713:18;;16706:60;-1:-1:-1;16797:3:1;16782:19;16775:35;16632:65;16234:582;-1:-1:-1;;;16234:582:1:o;17433:306::-;17521:6;17529;17537;17590:2;17578:9;17569:7;17565:23;17561:32;17558:52;;;17606:1;17603;17596:12;17558:52;17635:9;17629:16;17619:26;;17685:2;17674:9;17670:18;17664:25;17654:35;;17729:2;17718:9;17714:18;17708:25;17698:35;;17433:306;;;;;:::o
Swarm Source
ipfs://48a21ad183826504e83afe38bdce2a406b0f43944f6844da6e1da87cf87d1eef
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,478.79 | 0.00309077 | $7.66 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.