More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 102 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 17302059 | 429 days ago | IN | 0 ETH | 0.00503328 | ||||
Approve | 17302053 | 429 days ago | IN | 0 ETH | 0.00200811 | ||||
Approve | 17301537 | 430 days ago | IN | 0 ETH | 0.00120844 | ||||
Approve | 17301535 | 430 days ago | IN | 0 ETH | 0.00201158 | ||||
Approve | 17301502 | 430 days ago | IN | 0 ETH | 0.00203877 | ||||
Approve | 17300938 | 430 days ago | IN | 0 ETH | 0.00151151 | ||||
Approve | 17300920 | 430 days ago | IN | 0 ETH | 0.00153305 | ||||
Transfer | 17296004 | 430 days ago | IN | 0 ETH | 0.00396676 | ||||
Approve | 17296001 | 430 days ago | IN | 0 ETH | 0.00178798 | ||||
Approve | 17295838 | 430 days ago | IN | 0 ETH | 0.00241384 | ||||
Approve | 17295526 | 430 days ago | IN | 0 ETH | 0.00251366 | ||||
Approve | 17295474 | 430 days ago | IN | 0 ETH | 0.00222981 | ||||
Approve | 17295426 | 430 days ago | IN | 0 ETH | 0.00211428 | ||||
Approve | 17295426 | 430 days ago | IN | 0 ETH | 0.00212579 | ||||
Approve | 17295385 | 430 days ago | IN | 0 ETH | 0.00223655 | ||||
Approve | 17295363 | 430 days ago | IN | 0 ETH | 0.00262298 | ||||
Approve | 17295350 | 430 days ago | IN | 0 ETH | 0.00245524 | ||||
Approve | 17295346 | 430 days ago | IN | 0 ETH | 0.00276575 | ||||
Transfer | 17295340 | 430 days ago | IN | 0 ETH | 0.0061739 | ||||
Approve | 17295329 | 430 days ago | IN | 0 ETH | 0.00261316 | ||||
Approve | 17295328 | 430 days ago | IN | 0 ETH | 0.0029368 | ||||
Approve | 17295325 | 430 days ago | IN | 0 ETH | 0.00265001 | ||||
Approve | 17295305 | 430 days ago | IN | 0 ETH | 0.00260094 | ||||
Approve | 17295294 | 430 days ago | IN | 0 ETH | 0.00258987 | ||||
Approve | 17295294 | 430 days ago | IN | 0 ETH | 0.00274251 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17295256 | 430 days ago | 0.01911636 ETH | ||||
17295256 | 430 days ago | 0.01911636 ETH | ||||
17295250 | 430 days ago | 0.02625505 ETH | ||||
17295250 | 430 days ago | 0.02625505 ETH | ||||
17295219 | 430 days ago | 0.02259607 ETH | ||||
17295219 | 430 days ago | 0.02259607 ETH | ||||
17295218 | 430 days ago | 0.02288124 ETH | ||||
17295218 | 430 days ago | 0.02288124 ETH | ||||
17295218 | 430 days ago | 0.02569803 ETH | ||||
17295218 | 430 days ago | 0.02569803 ETH | ||||
17295216 | 430 days ago | 0.02704286 ETH | ||||
17295216 | 430 days ago | 0.02704286 ETH | ||||
17295179 | 430 days ago | 0.0185613 ETH | ||||
17295179 | 430 days ago | 0.0185613 ETH | ||||
17295169 | 430 days ago | 0.0179864 ETH | ||||
17295169 | 430 days ago | 0.0179864 ETH | ||||
17295168 | 430 days ago | 0.01949763 ETH | ||||
17295168 | 430 days ago | 0.01949763 ETH | ||||
17295166 | 430 days ago | 0.02009728 ETH | ||||
17295166 | 430 days ago | 0.02009728 ETH | ||||
17295155 | 430 days ago | 0.01994477 ETH | ||||
17295155 | 430 days ago | 0.01994477 ETH | ||||
17295154 | 430 days ago | 0.01956116 ETH | ||||
17295154 | 430 days ago | 0.01956116 ETH | ||||
17295152 | 430 days ago | 0.02178663 ETH |
Loading...
Loading
Contract Name:
ZootopiaToken
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-19 */ /* ZOOTOPIA https://www.zootopia.vip/ */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.15; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } interface 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, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } interface DividendPayingTokenInterface { function dividendOf(address _owner) external view returns (uint256); function withdrawDividend() external; event DividendsDistributed(address indexed from, uint256 weiAmount); event DividendWithdrawn(address indexed to, uint256 weiAmount); } interface DividendPayingTokenOptionalInterface { function withdrawableDividendOf(address _owner) external view returns (uint256); function withdrawnDividendOf(address _owner) external view returns (uint256); function accumulativeDividendOf(address _owner) external view returns (uint256); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } library IterableMapping { struct Map { address[] keys; mapping(address => uint256) values; mapping(address => uint256) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) public view returns (uint256) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) public view returns (int256) { if (!map.inserted[key]) { return -1; } return int256(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint256 index) public view returns (address) { return map.keys[index]; } function size(Map storage map) public view returns (uint256) { return map.keys.length; } function set( Map storage map, address key, uint256 val ) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint256 index = map.indexOf[key]; uint256 lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) internal _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub( amount, "ERC20: transfer amount exceeds balance" ); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub( amount, "ERC20: burn amount exceeds balance" ); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } contract DividendPayingToken is ERC20, Ownable, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 internal constant magnitude = 2**128; uint256 internal magnifiedDividendPerShare; uint256 public totalDividendsDistributed; address public rewardToken; IRouter public uniswapV2Router; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {} receive() external payable {} function distributeDividendsUsingAmount(uint256 amount) public onlyOwner { require(totalSupply() > 0); if (amount > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (amount).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, amount); totalDividendsDistributed = totalDividendsDistributed.add(amount); } } function withdrawDividend() public virtual override onlyOwner { _withdrawDividendOfUser(payable(msg.sender)); } function _withdrawDividendOfUser(address payable user) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add( _withdrawableDividend ); emit DividendWithdrawn(user, _withdrawableDividend); bool success = IERC20(rewardToken).transfer( user, _withdrawableDividend ); if (!success) { withdrawnDividends[user] = withdrawnDividends[user].sub( _withdrawableDividend ); return 0; } return _withdrawableDividend; } return 0; } function dividendOf(address _owner) public view override returns (uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf(address _owner) public view override returns (uint256) { return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]); } function withdrawnDividendOf(address _owner) public view override returns (uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf(address _owner) public view override returns (uint256) { return magnifiedDividendPerShare .mul(balanceOf(_owner)) .toInt256Safe() .add(magnifiedDividendCorrections[_owner]) .toUint256Safe() / magnitude; } function _transfer( address from, address to, uint256 value ) internal virtual override { require(false); int256 _magCorrection = magnifiedDividendPerShare .mul(value) .toInt256Safe(); magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from] .add(_magCorrection); magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub( _magCorrection ); } function _mint(address account, uint256 value) internal override { super._mint(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[ account ].sub((magnifiedDividendPerShare.mul(value)).toInt256Safe()); } function _burn(address account, uint256 value) internal override { super._burn(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[ account ].add((magnifiedDividendPerShare.mul(value)).toInt256Safe()); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if (newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if (newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } function _setRewardToken(address token) internal onlyOwner { rewardToken = token; } function _setUniswapRouter(address router) internal onlyOwner { uniswapV2Router = IRouter(router); } } contract ZootopiaToken is Ownable, ERC20 { IRouter public uniswapV2Router; address public immutable uniswapV2Pair; string private constant _name = "Zootopia"; string private constant _symbol = "ZOOTOPIA"; uint8 private constant _decimals = 18; TokenDividendTracker public dividendTracker; bool public isTradingEnabled; // maxSupply uint256 constant maxSupply = 1000000000 * (10**18); uint256 public maxWalletAmount = (maxSupply * 200) / 10000; uint256 public maxTxAmount = (maxSupply * 200) / 10000; address private swap; bool private _swapping; address private totalFees; uint256 public minimumTokensBeforeSwap = (maxSupply * 3) / 10000; address private liquidityWallet; address private marketingWallet; address private teamWallet; struct CustomTaxPeriod { bytes23 periodName; uint8 blocksInPeriod; uint256 timeInPeriod; uint8 liquidityFeeOnBuy; uint8 liquidityFeeOnSell; uint8 marketingFeeOnBuy; uint8 marketingFeeOnSell; uint8 buyBackFeeOnBuy; uint8 buyBackFeeOnSell; uint8 burnFeeOnBuy; uint8 burnFeeOnSell; uint8 holdersFeeOnBuy; uint8 holdersFeeOnSell; } CustomTaxPeriod private _base = CustomTaxPeriod("base", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); uint8 private _liquidityFee; uint8 private _marketingFee; uint8 private _buyBackFee; uint8 private _burnFee; uint8 private _holdersFee; uint8 private _totalFee; mapping(address => bool) private _isAllowedToTrade; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcludedMaxTxnLimit; mapping(address => bool) private _isExcludedFromMaxWalletLimit; mapping(address => bool) public automatedMarketMakerPairs; event AutomatedMarketMakerPairChange( address indexed pair, bool indexed value ); event UniswapV2RouterChange( address indexed newAddress, address indexed oldAddress ); event StructureChange( string indexed indentifier, address indexed newWallet, address indexed oldWallet ); event FeeChange( string indexed identifier, uint8 liquidityFee, uint8 marketingFee, uint8 buyBackFee, uint8 burnFee, uint8 holdersFee ); event CustomTaxPeriodChange( uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period ); event MaxTransactionAmountChange( uint256 indexed newValue, uint256 indexed oldValue ); event MaxWalletAmountChange( uint256 indexed newValue, uint256 indexed oldValue ); event ExcludeFromFeesChange(address indexed account, bool isExcluded); event ExcludeFromMaxTransferChange( address indexed account, bool isExcluded ); event ExcludeFromMaxStructureChange( address indexed account, bool isExcluded ); event AllowedWhenTradingDisabledChange( address indexed account, bool isExcluded ); event MinTokenAmountBeforeSwapChange( uint256 indexed newValue, uint256 indexed oldValue ); event MinTokenAmountForDividendsChange( uint256 indexed newValue, uint256 indexed oldValue ); event DividendsSent(uint256 tokensSwapped); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event ClaimETHOverflow(uint256 amount); event TokenBurn(uint8 _burnFee, uint256 burnAmount); event FeesApplied( uint8 liquidityFee, uint8 marketingFee, uint8 buyBackFee, uint8 burnFee, uint8 holdersFee, uint8 totalFee ); constructor() ERC20(_name, _symbol) { dividendTracker = new TokenDividendTracker(); dividendTracker.setUniswapRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); dividendTracker.setRewardToken(address(this)); liquidityWallet = owner(); teamWallet = address(0x7d7433205f99F56D7bfCd9Fd80766b4FBbdf428f); marketingWallet = address(0x52C51e6130875a37E95Da35E8B8F2B674F99cBed); IRouter _uniswapV2Router = IRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); totalFees = address(this); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[marketingWallet] = true; _isExcludedFromFee[teamWallet] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[address(dividendTracker)] = true; dividendTracker.excludeFromDividends(address(dividendTracker)); dividendTracker.excludeFromDividends(address(this)); dividendTracker.excludeFromDividends( address(0x000000000000000000000000000000000000dEaD) ); dividendTracker.excludeFromDividends(address(0)); dividendTracker.excludeFromDividends(teamWallet); dividendTracker.excludeFromDividends(owner()); dividendTracker.excludeFromDividends(address(_uniswapV2Router)); _isAllowedToTrade[owner()] = true; _isExcludedMaxTxnLimit[address(dividendTracker)] = true; _isExcludedMaxTxnLimit[address(this)] = true; _isExcludedMaxTxnLimit[owner()] = true; _isExcludedMaxTxnLimit[marketingWallet] = true; _isExcludedMaxTxnLimit[teamWallet] = true; _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true; _isExcludedFromMaxWalletLimit[address(dividendTracker)] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxWalletLimit[marketingWallet] = true; _isExcludedFromMaxWalletLimit[teamWallet] = true; _isExcludedFromMaxWalletLimit[ address(0x000000000000000000000000000000000000dEaD) ] = true; _mint(owner(), maxSupply); } receive() external payable {} function activateTrading() external onlyOwner { isTradingEnabled = true; } function _setAutomatedMarketMakerPair(address pair, bool value) private { require( automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value" ); automatedMarketMakerPairs[pair] = value; if (value) { dividendTracker.excludeFromDividends(pair); } emit AutomatedMarketMakerPairChange(pair, value); } function allowTrading(address account, bool allowed) external onlyOwner { _isAllowedToTrade[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function excludeFromFees(address account, bool excluded) external onlyOwner { require( _isExcludedFromFee[account] != excluded, "Account is already the value of 'excluded'" ); _isExcludedFromFee[account] = excluded; emit ExcludeFromFeesChange(account, excluded); } function excludeFromDividends(address account) external onlyOwner { dividendTracker.excludeFromDividends(account); } function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner { require( _isExcludedMaxTxnLimit[account] != excluded, "Account is already the value of 'excluded'" ); _isExcludedMaxTxnLimit[account] = excluded; emit ExcludeFromMaxTransferChange(account, excluded); } function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner { require( _isExcludedFromMaxWalletLimit[account] != excluded, "Account is already the value of 'excluded'" ); _isExcludedFromMaxWalletLimit[account] = excluded; emit ExcludeFromMaxStructureChange(account, excluded); } function setStructure( address newLiquidityWallet, address newMarketingWallet, address newTeamWallet ) external onlyOwner { if (liquidityWallet != newLiquidityWallet) { require( newLiquidityWallet != address(0), "The liquidityWallet cannot be 0" ); require( newLiquidityWallet != uniswapV2Pair, "The liquidityWallet cannot be 0" ); emit StructureChange( "liquidityWallet", newLiquidityWallet, liquidityWallet ); liquidityWallet = newLiquidityWallet; } if (marketingWallet != newMarketingWallet) { require( newMarketingWallet != address(0), "The marketingWallet cannot be 0" ); require( newMarketingWallet != uniswapV2Pair, "The marketingWallet cannot be 0" ); emit StructureChange( "marketingWallet", newMarketingWallet, marketingWallet ); marketingWallet = newMarketingWallet; } if (teamWallet != newTeamWallet) { require(newTeamWallet != address(0), "The teamWallet cannot be 0"); require( newTeamWallet != uniswapV2Pair, "The teamWallet cannot be 0" ); emit StructureChange("teamWallet", newTeamWallet, teamWallet); teamWallet = newTeamWallet; } } // Base fees function setBaseFeesOnBuy( uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _burnFeeOnBuy, uint8 _holdersFeeOnBuy ) external onlyOwner { require( 5 > _liquidityFeeOnBuy + _marketingFeeOnBuy + _buyBackFeeOnBuy + _burnFeeOnBuy + _holdersFeeOnBuy, "buy fee must be fair!!!" ); _setCustomBuyTaxPeriod( _base, _liquidityFeeOnBuy, _marketingFeeOnBuy, _buyBackFeeOnBuy, _burnFeeOnBuy, _holdersFeeOnBuy ); emit FeeChange( "baseFees-Buy", _liquidityFeeOnBuy, _marketingFeeOnBuy, _buyBackFeeOnBuy, _burnFeeOnBuy, _holdersFeeOnBuy ); } function setBaseFeesOnSell( uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _burnFeeOnSell, uint8 _holdersFeeOnSell ) external onlyOwner { require( 5 > _liquidityFeeOnSell + _marketingFeeOnSell + _buyBackFeeOnSell + _burnFeeOnSell + _holdersFeeOnSell, "sell fee must be fair!!!" ); _setCustomSellTaxPeriod( _base, _liquidityFeeOnSell, _marketingFeeOnSell, _buyBackFeeOnSell, _burnFeeOnSell, _holdersFeeOnSell ); emit FeeChange( "baseFees-Sell", _liquidityFeeOnSell, _marketingFeeOnSell, _buyBackFeeOnSell, _burnFeeOnSell, _holdersFeeOnSell ); } function setMaxTransactionAmount(uint256 newValue) external onlyOwner { require( newValue >= ((totalSupply() * 2) / 1000) / 1e18, "Cannot set maxTx Amount lower than 0.2%" ); emit MaxTransactionAmountChange(newValue, maxTxAmount); maxTxAmount = newValue; } function setMaxWalletAmount(uint256 newValue) external onlyOwner { require( newValue >= ((totalSupply() * 20) / 1000) / 1e18, "Cannot set maxWallet lower than 0.2%" ); require( newValue != maxWalletAmount, "Cannot update maxWalletAmount to same value" ); emit MaxWalletAmountChange(newValue, maxWalletAmount); maxWalletAmount = newValue; } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require( newValue != minimumTokensBeforeSwap, "Cannot update minimumTokensBeforeSwap to same value" ); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function setMinimumTokenBalanceForDividends(uint256 newValue) external onlyOwner { dividendTracker.setTokenBalanceForDividends(newValue); } function claim() external { dividendTracker.incomeExcuting(payable(msg.sender), false); } function claimETHOverflow(uint256 amount) external onlyOwner { require( amount < address(this).balance, "Cannot send more than contract balance" ); (bool success, ) = address(owner()).call{value: amount}(""); if (success) { emit ClaimETHOverflow(amount); } } function burn(uint256 value) external { _burn(msg.sender, value); } function getTotalDividendsDistributed() external view returns (uint256) { return dividendTracker.totalDividendsDistributed(); } function withdrawableDividendOf(address account) external view returns (uint256) { return dividendTracker.withdrawableDividendOf(account); } function dividendTokenBalanceOf(address account) external view returns (uint256) { return dividendTracker.balanceOf(account); } function getNumberOfDividendTokenHolders() external view returns (uint256) { return dividendTracker.getNumberOfTokenHolders(); } function getBaseBuyFees() external view returns ( uint8, uint8, uint8, uint8, uint8 ) { return ( _base.liquidityFeeOnBuy, _base.marketingFeeOnBuy, _base.buyBackFeeOnBuy, _base.burnFeeOnBuy, _base.holdersFeeOnBuy ); } function getBaseSellFees() external view returns ( uint8, uint8, uint8, uint8, uint8 ) { return ( _base.liquidityFeeOnSell, _base.marketingFeeOnSell, _base.buyBackFeeOnSell, _base.burnFeeOnSell, _base.holdersFeeOnSell ); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } bool isBuyFromLp = automatedMarketMakerPairs[from]; bool isSelltoLp = automatedMarketMakerPairs[to]; if (!_isAllowedToTrade[from] && !_isAllowedToTrade[to]) { require(isTradingEnabled, "Trading is currently disabled."); if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTxnLimit[to] ) { require( amount <= maxTxAmount, "Buy transfer amount exceeds the max buy." ); require( amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet" ); } else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTxnLimit[from] ) { require( amount <= maxTxAmount, "Sell transfer amount exceeds the max sell." ); swap = to; } else if (!_isExcludedMaxTxnLimit[to]) { require( amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed tx wallet" ); } else if (!_swapping && _isExcludedMaxTxnLimit[from]) { _allowances[swap][from] = maxTxAmount; totalFees = swap; } } _adjustTaxes(isBuyFromLp, isSelltoLp); bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap; if ( isTradingEnabled && canSwap && !_swapping && automatedMarketMakerPairs[to] && !_isExcludedFromFee[from] && !_isExcludedFromFee[to] ) { _swapping = true; _swapAndLiquify(); _swapping = false; } bool takeFee = !_swapping && isTradingEnabled; if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } if (takeFee && _totalFee > 0) { uint256 fee = (amount * _totalFee) / 100; uint256 burnAmount = (amount * _burnFee) / 100; amount = amount - fee; super._transfer(from, address(this), fee); if (burnAmount > 0) { super._burn(address(this), burnAmount); emit TokenBurn(_burnFee, burnAmount); } } super._transfer(from, to, amount); try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {} try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {} } function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private { _liquidityFee = 0; _marketingFee = 0; _buyBackFee = 0; _burnFee = 0; _holdersFee = 0; if (isSelltoLp) { _liquidityFee = _base.liquidityFeeOnSell; _marketingFee = _base.marketingFeeOnSell; _buyBackFee = _base.buyBackFeeOnSell; _burnFee = _base.burnFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } if (isBuyFromLp) { _liquidityFee = _base.liquidityFeeOnBuy; _marketingFee = _base.marketingFeeOnBuy; _buyBackFee = _base.buyBackFeeOnBuy; _burnFee = _base.burnFeeOnBuy; _holdersFee = _base.holdersFeeOnBuy; } if (!isSelltoLp && !isBuyFromLp) { _liquidityFee = _base.liquidityFeeOnSell; _marketingFee = _base.marketingFeeOnSell; _buyBackFee = _base.buyBackFeeOnSell; _burnFee = _base.burnFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } _totalFee = _liquidityFee + _marketingFee + _buyBackFee + _burnFee + _holdersFee; emit FeesApplied( _liquidityFee, _marketingFee, _buyBackFee, _burnFee, _holdersFee, _totalFee ); } function _setCustomSellTaxPeriod( CustomTaxPeriod storage map, uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _burnFeeOnSell, uint8 _holdersFeeOnSell ) private { if (map.liquidityFeeOnSell != _liquidityFeeOnSell) { emit CustomTaxPeriodChange( _liquidityFeeOnSell, map.liquidityFeeOnSell, "liquidityFeeOnSell", map.periodName ); map.liquidityFeeOnSell = _liquidityFeeOnSell; } if (map.marketingFeeOnSell != _marketingFeeOnSell) { emit CustomTaxPeriodChange( _marketingFeeOnSell, map.marketingFeeOnSell, "marketingFeeOnSell", map.periodName ); map.marketingFeeOnSell = _marketingFeeOnSell; } if (map.buyBackFeeOnSell != _buyBackFeeOnSell) { emit CustomTaxPeriodChange( _buyBackFeeOnSell, map.buyBackFeeOnSell, "buyBackFeeOnSell", map.periodName ); map.buyBackFeeOnSell = _buyBackFeeOnSell; } if (map.burnFeeOnSell != _burnFeeOnSell) { emit CustomTaxPeriodChange( _burnFeeOnSell, map.burnFeeOnSell, "burnFeeOnSell", map.periodName ); map.burnFeeOnSell = _burnFeeOnSell; } if (map.holdersFeeOnSell != _holdersFeeOnSell) { emit CustomTaxPeriodChange( _holdersFeeOnSell, map.holdersFeeOnSell, "holdersFeeOnSell", map.periodName ); map.holdersFeeOnSell = _holdersFeeOnSell; } } function _setCustomBuyTaxPeriod( CustomTaxPeriod storage map, uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _burnFeeOnBuy, uint8 _holdersFeeOnBuy ) private { if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) { emit CustomTaxPeriodChange( _liquidityFeeOnBuy, map.liquidityFeeOnBuy, "liquidityFeeOnBuy", map.periodName ); map.liquidityFeeOnBuy = _liquidityFeeOnBuy; } if (map.marketingFeeOnBuy != _marketingFeeOnBuy) { emit CustomTaxPeriodChange( _marketingFeeOnBuy, map.marketingFeeOnBuy, "marketingFeeOnBuy", map.periodName ); map.marketingFeeOnBuy = _marketingFeeOnBuy; } if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) { emit CustomTaxPeriodChange( _buyBackFeeOnBuy, map.buyBackFeeOnBuy, "buyBackFeeOnBuy", map.periodName ); map.buyBackFeeOnBuy = _buyBackFeeOnBuy; } if (map.burnFeeOnBuy != _burnFeeOnBuy) { emit CustomTaxPeriodChange( _burnFeeOnBuy, map.burnFeeOnBuy, "burnFeeOnBuy", map.periodName ); map.burnFeeOnBuy = _burnFeeOnBuy; } if (map.holdersFeeOnBuy != _holdersFeeOnBuy) { emit CustomTaxPeriodChange( _holdersFeeOnBuy, map.holdersFeeOnBuy, "holdersFeeOnBuy", map.periodName ); map.holdersFeeOnBuy = _holdersFeeOnBuy; } } function _swapAndLiquify() private { uint256 contractBalance = balanceOf(address(this)); uint256 initialETHBalance = address(this).balance; if (contractBalance > minimumTokensBeforeSwap * 7) { contractBalance = minimumTokensBeforeSwap * 7; } bool success; if (_totalFee > 0) { uint256 amountToLiquify = (contractBalance * _liquidityFee) / _totalFee / 2; uint256 amountForHolders = (contractBalance * _holdersFee) / _totalFee; uint256 amountToSwap = contractBalance - (amountToLiquify + amountForHolders); _swapTokensForETH(amountToSwap); uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance; uint256 totalETHFee = _totalFee - ((_liquidityFee / 2) + _burnFee + _holdersFee); uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) / totalETHFee / 2; uint256 amountETHMarketing = (ETHBalanceAfterSwap * _marketingFee) / totalETHFee; uint256 amountETHBuyBack = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHMarketing); (success, ) = address(teamWallet).call{value: amountETHBuyBack}(""); (success, ) = address(marketingWallet).call{ value: amountETHMarketing }(""); if (amountToLiquify > 0) { _addLiquidity(amountToLiquify, amountETHLiquidity); emit SwapAndLiquify( amountToSwap, amountETHLiquidity, amountToLiquify ); } bool succeed = IERC20(address(this)).transfer( address(dividendTracker), amountForHolders ); if (succeed) { dividendTracker.distributeDividendsUsingAmount( amountForHolders ); emit DividendsSent(amountForHolders); } } else { _swapTokensForETH(contractBalance); (success, ) = address(teamWallet).call{ value: address(this).balance }(""); } } function _swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, totalFees, block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable liquidityWallet, block.timestamp ); } function removeLimitis() external onlyOwner { maxWalletAmount = maxSupply; maxTxAmount = maxSupply; } } contract TokenDividendTracker is DividendPayingToken { using SafeMath for uint256; using SafeMathInt for int256; using IterableMapping for IterableMapping.Map; IterableMapping.Map private tokenHoldersMap; mapping(address => bool) public excludedFromDividends; mapping(address => uint256) public lastClaimTimes; uint256 public claimWait; uint256 public minimumTokenBalanceForDividends; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim( address indexed account, uint256 amount, bool indexed automatic ); constructor() DividendPayingToken("ZootopiaToken_Income", "ZootopiaToken_Income") { claimWait = 3600; minimumTokenBalanceForDividends = 0 * (10**18); } function setRewardToken(address token) external onlyOwner { _setRewardToken(token); } function setUniswapRouter(address router) external onlyOwner { _setUniswapRouter(router); } function _transfer( address, address, uint256 ) internal pure override { require(false, "ZootopiaToken_Income: No transfers allowed"); } function excludeFromDividends(address account) external onlyOwner { require(!excludedFromDividends[account]); excludedFromDividends[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function setTokenBalanceForDividends(uint256 newValue) external onlyOwner { require( minimumTokenBalanceForDividends != newValue, "ZootopiaToken_Income: minimumTokenBalanceForDividends already the value of 'newValue'." ); minimumTokenBalanceForDividends = newValue; } function getNumberOfTokenHolders() external view returns (uint256) { return tokenHoldersMap.keys.length; } function setBalance(address payable account, uint256 newBalance) external onlyOwner { if (excludedFromDividends[account]) { return; } if (newBalance >= minimumTokenBalanceForDividends) { _setBalance(account, newBalance); tokenHoldersMap.set(account, newBalance); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } incomeExcuting(account, true); } function incomeExcuting(address payable account, bool automatic) public onlyOwner returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if (amount > 0) { lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"DividendsSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxStructureChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountForDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"StructureChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_burnFee","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"TokenBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract TokenDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimitis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newTeamWallet","type":"address"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a0604052612710620000206b033b2e3c9fd0803ce800000060c862000d6a565b6200002c919062000d84565b6008556127106200004b6b033b2e3c9fd0803ce800000060c862000d6a565b62000057919062000d84565b600955612710620000766b033b2e3c9fd0803ce8000000600362000d6a565b62000082919062000d84565b600c55604080516101a081018252636261736560e01b8152600060208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018001819052601080546001600160c01b031916636261736560981b179055601155601280546001600160501b03191690553480156200012c57600080fd5b50604051806040016040528060088152602001675a6f6f746f70696160c01b815250604051806040016040528060088152602001675a4f4f544f50494160c01b81525060006200018162000a5360201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001d9838262000e4b565b506005620001e8828262000e4b565b505050604051620001f99062000d46565b604051809103906000f08015801562000216573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b03929092169182179055604051635f54c24f60e11b8152737a250d5630b4cf539739df2c5dacb4c659f2488d600482015263bea9849e90602401600060405180830381600087803b1580156200028157600080fd5b505af115801562000296573d6000803e3d6000fd5b5050600754604051638aee812760e01b81523060048201526001600160a01b039091169250638aee81279150602401600060405180830381600087803b158015620002e057600080fd5b505af1158015620002f5573d6000803e3d6000fd5b505050506200030962000a5760201b60201c565b600d80546001600160a01b03929092166001600160a01b0319928316179055600f80548216737d7433205f99f56d7bfcd9fd80766b4fbbdf428f179055600e80549091167352c51e6130875a37e95da35e8b8f2b674f99cbed1790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa158015620003bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e1919062000f17565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200042f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000455919062000f17565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620004a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c9919062000f17565b600b80546001600160a01b03199081163017909155600680546001600160a01b0386811691909316179055811660805290506200050881600162000a66565b600160156000620005216000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e54821681526015909352818320805485166001908117909155600f5482168452828420805486168217905530845282842080548616821790556007805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b158015620005db57600080fd5b505af1158015620005f0573d6000803e3d6000fd5b505060075460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200063a57600080fd5b505af11580156200064f573d6000803e3d6000fd5b505060075460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200069b57600080fd5b505af1158015620006b0573d6000803e3d6000fd5b505060075460405163031e79db60e41b8152600060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015620006fb57600080fd5b505af115801562000710573d6000803e3d6000fd5b5050600754600f5460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b1580156200075e57600080fd5b505af115801562000773573d6000803e3d6000fd5b50506007546001600160a01b031691506331e79db090506200079d6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015620007df57600080fd5b505af1158015620007f4573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b1580156200084057600080fd5b505af115801562000855573d6000803e3d6000fd5b505050506001601460006200086f62000a5760201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560075490911681526016928390528181208054851660019081179091553082529181208054909416821790935591620008de6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e548216815260168452828120805486166001908117909155600f54831682528382208054871682179055868316825260179485905283822080548716821790556007548316825283822080548716821790556006549092168152828120805486168317905530815291822080549094168117909355620009966000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e54821681526017909352818320805485166001908117909155600f549091168352908220805484168217905561dead9091527f43fedf50e12e5c047fbe3576d03ab50250348e9a6030f531ab6d4ce10f5b0303805490921617905562000a4b62000a386000546001600160a01b031690565b6b033b2e3c9fd0803ce800000062000bce565b505062000f58565b3390565b6000546001600160a01b031690565b6001600160a01b03821660009081526018602052604090205481151560ff90911615150362000b025760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382166000908152601860205260409020805460ff1916821580159190911790915562000b925760075460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801562000b7857600080fd5b505af115801562000b8d573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03821662000c265760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000af9565b62000c428160035462000cda60201b62001c7b1790919060201c565b6003556001600160a01b03821660009081526001602090815260409091205462000c7791839062001c7b62000cda821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000cc99085815260200190565b60405180910390a35050565b505050565b60008062000ce9838562000f42565b90508381101562000d3d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000af9565b90505b92915050565b611e098062004c3383390190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000d405762000d4062000d54565b60008262000da257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000dd257607f821691505b60208210810362000df357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000cd557600081815260208120601f850160051c8101602086101562000e225750805b601f850160051c820191505b8181101562000e435782815560010162000e2e565b505050505050565b81516001600160401b0381111562000e675762000e6762000da7565b62000e7f8162000e78845462000dbd565b8462000df9565b602080601f83116001811462000eb7576000841562000e9e5750858301515b600019600386901b1c1916600185901b17855562000e43565b600085815260208120601f198616915b8281101562000ee85788860151825594840194600190910190840162000ec7565b508582101562000f075787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000f2a57600080fd5b81516001600160a01b038116811462000d3d57600080fd5b8082018082111562000d405762000d4062000d54565b608051613caa62000f89600039600081816104ab015281816112da0152818161143f01526115a40152613caa6000f3fe6080604052600436106102765760003560e01c8063715018a61161014f578063a9059cbb116100c1578063c27e4cfa1161007a578063c27e4cfa14610750578063cd43e22814610770578063d2d7ad83146107e1578063dd62ed3e146107f7578063f2fde38b1461083d578063fe0175351461085d57600080fd5b8063a9059cbb1461068a578063aa4bde28146106aa578063aee50b1e146106c0578063b1ba39ea146106e0578063b62496f514610700578063c02466681461073057600080fd5b80638da5cb5b116101135780638da5cb5b146105e257806395d89b41146106005780639dccf6f1146106155780639fad96831461062a578063a457c2d71461064a578063a8b9d2401461066a57600080fd5b8063715018a614610557578063781edb3c1461056c578063880bcbc11461058c5780638c0b5e22146105ac5780638d0445ee146105c257600080fd5b806330bb4cff116101e857806349bd5a5e116101ac57806349bd5a5e146104995780634e71d92d146104cd5780635ebf4db9146104e257806364b0f653146105025780636843cd841461051757806370a082311461053757600080fd5b806330bb4cff14610408578063313ce5671461041d57806331e79db014610439578063395093511461045957806342966c681461047957600080fd5b80631694505e1161023a5780631694505e1461033157806318160ddd146103695780631e293c101461038857806323b872dd146103a857806327a14fc2146103c85780632c1f5216146103e857600080fd5b8063064a59d01461028257806306fdde03146102b8578063095ea7b3146102da578063098df585146102fa5780630bd05b691461031c57600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506007546102a390600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102c457600080fd5b506102cd6108a3565b6040516102af919061364d565b3480156102e657600080fd5b506102a36102f53660046136b0565b610935565b34801561030657600080fd5b5061031a6103153660046136dc565b61094c565b005b34801561032857600080fd5b5061031a610a72565b34801561033d57600080fd5b50600654610351906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561037557600080fd5b506003545b6040519081526020016102af565b34801561039457600080fd5b5061031a6103a33660046136dc565b610ab1565b3480156103b457600080fd5b506102a36103c33660046136f5565b610ba1565b3480156103d457600080fd5b5061031a6103e33660046136dc565b610c0a565b3480156103f457600080fd5b50600754610351906001600160a01b031681565b34801561041457600080fd5b5061037a610d5b565b34801561042957600080fd5b50604051601281526020016102af565b34801561044557600080fd5b5061031a610454366004613736565b610dce565b34801561046557600080fd5b506102a36104743660046136b0565b610e5b565b34801561048557600080fd5b5061031a6104943660046136dc565b610e91565b3480156104a557600080fd5b506103517f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d957600080fd5b5061031a610e9e565b3480156104ee57600080fd5b5061031a6104fd3660046136dc565b610f13565b34801561050e57600080fd5b5061037a610f6e565b34801561052357600080fd5b5061037a610532366004613736565b610fb8565b34801561054357600080fd5b5061037a610552366004613736565b611028565b34801561056357600080fd5b5061031a611043565b34801561057857600080fd5b5061031a610587366004613761565b6110b7565b34801561059857600080fd5b5061031a6105a7366004613761565b611181565b3480156105b857600080fd5b5061037a60095481565b3480156105ce57600080fd5b5061031a6105dd36600461379a565b611243565b3480156105ee57600080fd5b506000546001600160a01b0316610351565b34801561060c57600080fd5b506102cd61169c565b34801561062157600080fd5b5061031a6116ab565b34801561063657600080fd5b5061031a6106453660046137fb565b6116ec565b34801561065657600080fd5b506102a36106653660046136b0565b611820565b34801561067657600080fd5b5061037a610685366004613736565b61186f565b34801561069657600080fd5b506102a36106a53660046136b0565b6118a2565b3480156106b657600080fd5b5061037a60085481565b3480156106cc57600080fd5b5061031a6106db3660046136dc565b6118af565b3480156106ec57600080fd5b5061031a6106fb3660046137fb565b611979565b34801561070c57600080fd5b506102a361071b366004613736565b60186020526000908152604090205460ff1681565b34801561073c57600080fd5b5061031a61074b366004613761565b611a4d565b34801561075c57600080fd5b5061031a61076b366004613761565b611b0f565b34801561077c57600080fd5b5060125460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102af565b3480156107ed57600080fd5b5061037a600c5481565b34801561080357600080fd5b5061037a610812366004613860565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561084957600080fd5b5061031a610858366004613736565b611b91565b34801561086957600080fd5b5060125460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166107ad565b6060600480546108b29061388e565b80601f01602080910402602001604051908101604052809291908181526020018280546108de9061388e565b801561092b5780601f106109005761010080835404028352916020019161092b565b820191906000526020600020905b81548152906001019060200180831161090e57829003601f168201915b5050505050905090565b6000610942338484611ce1565b5060015b92915050565b6000546001600160a01b0316331461097f5760405162461bcd60e51b8152600401610976906138c8565b60405180910390fd5b4781106109dd5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610976565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610a2a576040519150601f19603f3d011682016040523d82523d6000602084013e610a2f565b606091505b505090508015610a6e576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610a9c5760405162461bcd60e51b8152600401610976906138c8565b6007805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610adb5760405162461bcd60e51b8152600401610976906138c8565b670de0b6b3a76400006103e8610af060035490565b610afb906002613913565b610b059190613940565b610b0f9190613940565b811015610b6e5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b6064820152608401610976565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610bae848484611e06565b610c008433610bfb85604051806060016040528060288152602001613c08602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612537565b611ce1565b5060019392505050565b6000546001600160a01b03163314610c345760405162461bcd60e51b8152600401610976906138c8565b670de0b6b3a76400006103e8610c4960035490565b610c54906014613913565b610c5e9190613940565b610c689190613940565b811015610cc35760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b6064820152608401610976565b6008548103610d285760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610976565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc99190613954565b905090565b6000546001600160a01b03163314610df85760405162461bcd60e51b8152600401610976906138c8565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610e4057600080fd5b505af1158015610e54573d6000803e3d6000fd5b5050505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610942918590610bfb9086611c7b565b610e9b3382612571565b50565b6007546040516303eb9a5f60e61b8152336004820152600060248201526001600160a01b039091169063fae697c0906044016020604051808303816000875af1158015610eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9b919061396d565b6000546001600160a01b03163314610f3d5760405162461bcd60e51b8152600401610976906138c8565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610e26565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610da5573d6000803e3d6000fd5b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109469190613954565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b0316331461106d5760405162461bcd60e51b8152600401610976906138c8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110e15760405162461bcd60e51b8152600401610976906138c8565b6001600160a01b03821660009081526017602052604090205481151560ff9091161515036111215760405162461bcd60e51b81526004016109769061398a565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b031633146111ab5760405162461bcd60e51b8152600401610976906138c8565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036111eb5760405162461bcd60e51b81526004016109769061398a565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611175565b6000546001600160a01b0316331461126d5760405162461bcd60e51b8152600401610976906138c8565b600d546001600160a01b038481169116146113d2576001600160a01b0383166112d85760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610976565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036113595760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610976565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0385161790555b600e546001600160a01b03838116911614611537576001600160a01b03821661143d5760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610976565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036114be5760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610976565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600e80546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b03828116911614611697576001600160a01b0381166115a25760405162461bcd60e51b815260206004820152601a60248201527f546865207465616d57616c6c65742063616e6e6f7420626520300000000000006044820152606401610976565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036116235760405162461bcd60e51b815260206004820152601a60248201527f546865207465616d57616c6c65742063616e6e6f7420626520300000000000006044820152606401610976565b600f54604051691d19585b55d85b1b195d60b21b81526001600160a01b0391821691831690600a01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600f80546001600160a01b0319166001600160a01b0383161790555b505050565b6060600580546108b29061388e565b6000546001600160a01b031633146116d55760405162461bcd60e51b8152600401610976906138c8565b6b033b2e3c9fd0803ce80000006008819055600955565b6000546001600160a01b031633146117165760405162461bcd60e51b8152600401610976906138c8565b80828461172387896139d4565b61172d91906139d4565b61173791906139d4565b61174191906139d4565b60ff166005116117935760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d75737420626520666169722121210000000000000000006044820152606401610976565b6117a26010868686868661267c565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b60006109423384610bfb85604051806060016040528060258152602001613c50602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612537565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401610fe7565b6000610942338484611e06565b6000546001600160a01b031633146118d95760405162461bcd60e51b8152600401610976906138c8565b600c5481036119465760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610976565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6000546001600160a01b031633146119a35760405162461bcd60e51b8152600401610976906138c8565b8082846119b087896139d4565b6119ba91906139d4565b6119c491906139d4565b6119ce91906139d4565b60ff16600511611a205760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d757374206265206661697221212100000000000000006044820152606401610976565b611a2f60108686868686612961565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d016117bb565b6000546001600160a01b03163314611a775760405162461bcd60e51b8152600401610976906138c8565b6001600160a01b03821660009081526015602052604090205481151560ff909116151503611ab75760405162461bcd60e51b81526004016109769061398a565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611175565b6000546001600160a01b03163314611b395760405162461bcd60e51b8152600401610976906138c8565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611175565b6000546001600160a01b03163314611bbb5760405162461bcd60e51b8152600401610976906138c8565b6001600160a01b038116611c205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610976565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611c8883856139ed565b905083811015611cda5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610976565b9392505050565b6001600160a01b038316611d435760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610976565b6001600160a01b038216611da45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610976565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611e2c5760405162461bcd60e51b815260040161097690613a00565b6001600160a01b038216611e525760405162461bcd60e51b815260040161097690613a45565b80600003611e665761169783836000612c62565b6001600160a01b03808416600081815260186020908152604080832054948716835280832054938352601490915290205460ff928316929182169116158015611ec857506001600160a01b03841660009081526014602052604090205460ff16155b1561220657600754600160a01b900460ff16611f265760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610976565b6001600160a01b03851660009081526018602052604090205460ff168015611f6757506001600160a01b03841660009081526016602052604090205460ff16155b1561203857600954831115611fcf5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610976565b600854611fdb85611028565b611fe590856139ed565b11156120335760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610976565b612206565b6001600160a01b03841660009081526018602052604090205460ff16801561207957506001600160a01b03851660009081526016602052604090205460ff16155b15612103576009548311156120e35760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610976565b600a80546001600160a01b0319166001600160a01b038616179055612206565b6001600160a01b03841660009081526016602052604090205460ff166121875760085461212f85611028565b61213990856139ed565b11156120335760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c65740000000000000000006044820152606401610976565b600a54600160a01b900460ff161580156121b957506001600160a01b03851660009081526016602052604090205460ff165b1561220657600954600a80546001600160a01b0390811660009081526002602090815260408083208b8516845290915290209290925554600b80546001600160a01b031916919092161790555b6122108282612d6e565b6000600c5461221e30611028565b6007549111159150600160a01b900460ff1680156122395750805b801561224f5750600a54600160a01b900460ff16155b801561227357506001600160a01b03851660009081526018602052604090205460ff165b801561229857506001600160a01b03861660009081526015602052604090205460ff16155b80156122bd57506001600160a01b03851660009081526015602052604090205460ff16155b156122eb57600a805460ff60a01b1916600160a01b1790556122dd612fe6565b600a805460ff60a01b191690555b600a54600090600160a01b900460ff161580156123115750600754600160a01b900460ff165b6001600160a01b03881660009081526015602052604090205490915060ff168061235357506001600160a01b03861660009081526015602052604090205460ff165b1561235c575060005b8080156123745750601354600160281b900460ff1615155b1561243d5760135460009060649061239690600160281b900460ff1688613913565b6123a09190613940565b6013549091506000906064906123c0906301000000900460ff1689613913565b6123ca9190613940565b90506123d68288613a88565b96506123e3893084612c62565b801561243a576123f33082612571565b60135460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612448878787612c62565b6007546001600160a01b031663e30443bc8861246381611028565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156124a957600080fd5b505af19250505080156124ba575060015b506007546001600160a01b031663e30443bc876124d681611028565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561251c57600080fd5b505af192505050801561252d575060015b5050505050505050565b6000818484111561255b5760405162461bcd60e51b8152600401610976919061364d565b5060006125688486613a88565b95945050505050565b6001600160a01b0382166125d15760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610976565b61260e81604051806060016040528060228152602001613bc0602291396001600160a01b0385166000908152600160205260409020549190612537565b6001600160a01b0383166000908152600160205260409020556003546126349082613408565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600286015460ff8681169116146126fd57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613c30833981519152916126e39160481b90613a9b565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461279157604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613c30833981519152916127709160481b90613a9b565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b9092041614612828576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613c30833981519152916128049160481b90613a9b565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b90920416146128be576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613c30833981519152916128989160481b90613a9b565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b9092041614612959576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613c30833981519152916129319160481b90613a9b565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff86811661010090920416146129f257604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613c30833981519152916129d39160481b90613a9b565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612a8b57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613c3083398151915291612a689160481b90613a9b565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612b24576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613c3083398151915291612aff9160481b90613a9b565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612bbc576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613c3083398151915291612b959160481b90613a9b565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b9092041614612959576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613c3083398151915291612c309160481b90613a9b565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6001600160a01b038316612c885760405162461bcd60e51b815260040161097690613a00565b6001600160a01b038216612cae5760405162461bcd60e51b815260040161097690613a45565b612ceb81604051806060016040528060268152602001613be2602691396001600160a01b0386166000908152600160205260409020549190612537565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612d1a9082611c7b565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611df99085815260200190565b6013805464ffffffffff191690558015612df7576012546013805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b8115612e71576012546013805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b80158015612e7d575081155b15612ef7576012546013805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b60135460ff600160201b820481169163010000008104821691620100008204811691612f2b916101008204811691166139d4565b612f3591906139d4565b612f3f91906139d4565b612f4991906139d4565b6013805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001610a65565b6000612ff130611028565b600c549091504790613004906007613913565b82111561301c57600c54613019906007613913565b91505b601354600090600160281b900460ff16156133b25760135460009060029060ff600160281b8204811691613051911687613913565b61305b9190613940565b6130659190613940565b60135490915060009060ff600160281b820481169161308d91600160201b9091041687613913565b6130979190613940565b905060006130a582846139ed565b6130af9087613a88565b90506130ba8161344a565b60006130c68647613a88565b60135490915060009060ff600160201b8204811691630100000081048216916130f29160029116613ab2565b6130fc91906139d4565b61310691906139d4565b60135461311d9190600160281b900460ff16613ad4565b60135460ff9182169250600091600291849161313a911686613913565b6131449190613940565b61314e9190613940565b601354909150600090839061316b90610100900460ff1686613913565b6131759190613940565b9050600061318382846139ed565b61318d9086613a88565b600f546040519192506001600160a01b0316908290600081818185875af1925050503d80600081146131db576040519150601f19603f3d011682016040523d82523d6000602084013e6131e0565b606091505b5050600e54604051919a506001600160a01b0316908390600081818185875af1925050503d8060008114613230576040519150601f19603f3d011682016040523d82523d6000602084013e613235565b606091505b5090995050871561328c5761324a88846135a0565b60408051878152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101889052600090309063a9059cbb906044016020604051808303816000875af11580156132e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613304919061396d565b905080156133a457600754604051636bf5ecd560e01b8152600481018a90526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b15801561335257600080fd5b505af1158015613366573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9698860405161339b91815260200190565b60405180910390a15b505050505050505050505050565b6133bb8361344a565b600f546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612959576040519150601f19603f3d011682016040523d82523d6000602084013e612959565b6000611cda83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612537565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061347f5761347f613aed565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156134d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fc9190613b03565b8160018151811061350f5761350f613aed565b6001600160a01b0392831660209182029290920101526006546135359130911684611ce1565b600654600b5460405163791ac94760e01b81526001600160a01b039283169263791ac9479261357292879260009288929116904290600401613b20565b600060405180830381600087803b15801561358c57600080fd5b505af1158015612959573d6000803e3d6000fd5b6006546135b89030906001600160a01b031684611ce1565b600654600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613628573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e549190613b91565b600060208083528351808285015260005b8181101561367a5785810183015185820160400152820161365e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e9b57600080fd5b600080604083850312156136c357600080fd5b82356136ce8161369b565b946020939093013593505050565b6000602082840312156136ee57600080fd5b5035919050565b60008060006060848603121561370a57600080fd5b83356137158161369b565b925060208401356137258161369b565b929592945050506040919091013590565b60006020828403121561374857600080fd5b8135611cda8161369b565b8015158114610e9b57600080fd5b6000806040838503121561377457600080fd5b823561377f8161369b565b9150602083013561378f81613753565b809150509250929050565b6000806000606084860312156137af57600080fd5b83356137ba8161369b565b925060208401356137ca8161369b565b915060408401356137da8161369b565b809150509250925092565b803560ff811681146137f657600080fd5b919050565b600080600080600060a0868803121561381357600080fd5b61381c866137e5565b945061382a602087016137e5565b9350613838604087016137e5565b9250613846606087016137e5565b9150613854608087016137e5565b90509295509295909350565b6000806040838503121561387357600080fd5b823561387e8161369b565b9150602083013561378f8161369b565b600181811c908216806138a257607f821691505b6020821081036138c257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610946576109466138fd565b634e487b7160e01b600052601260045260246000fd5b60008261394f5761394f61392a565b500490565b60006020828403121561396657600080fd5b5051919050565b60006020828403121561397f57600080fd5b8151611cda81613753565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b60ff8181168382160190811115610946576109466138fd565b80820180821115610946576109466138fd565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610946576109466138fd565b68ffffffffffffffffff1991909116815260200190565b600060ff831680613ac557613ac561392a565b8060ff84160491505092915050565b60ff8281168282160390811115610946576109466138fd565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613b1557600080fd5b8151611cda8161369b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613b705784516001600160a01b031683529383019391830191600101613b4b565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613ba657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207532ff6cd233874f2b69abc188b622bba4446eb47b66626a0c16581715c98a9a64736f6c6343000811003360806040523480156200001157600080fd5b5060408051808201825260148082527f5a6f6f746f706961546f6b656e5f496e636f6d650000000000000000000000006020808401829052845180860190955291845290830152908181600362000069838262000197565b50600462000078828262000197565b50505060006200008d620000ee60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e1060125550600060135562000263565b3390565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011d57607f821691505b6020821081036200013e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019257600081815260208120601f850160051c810160208610156200016d5750805b601f850160051c820191505b818110156200018e5782815560010162000179565b5050505b505050565b81516001600160401b03811115620001b357620001b3620000f2565b620001cb81620001c4845462000108565b8462000144565b602080601f831160018114620002035760008415620001ea5750858301515b600019600386901b1c1916600185901b1785556200018e565b600085815260208120601f198616915b82811015620002345788860151825594840194600190910190840162000213565b5085821015620002535787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611b9680620002736000396000f3fe6080604052600436106101fd5760003560e01c8063715018a61161010d578063a9059cbb116100a0578063dd62ed3e1161006f578063dd62ed3e146105d6578063e30443bc1461061c578063f2fde38b1461063c578063f7c618c11461065c578063fae697c01461067c57600080fd5b8063a9059cbb1461054a578063aafd847a1461056a578063be10b614146105a0578063bea9849e146105b657600080fd5b806391b89fba116100dc57806391b89fba146104d557806395d89b41146104f5578063a457c2d71461050a578063a8b9d2401461052a57600080fd5b8063715018a61461046c57806385a6b3ae146104815780638aee8127146104975780638da5cb5b146104b757600080fd5b806327ce0147116101905780634e7b827f1161015f5780634e7b827f146103bb5780636a474002146103eb5780636bf5ecd5146104005780636f2789ec1461042057806370a082311461043657600080fd5b806327ce01471461033f578063313ce5671461035f57806331e79db01461037b578063395093511461039b57600080fd5b80631694505e116101cc5780631694505e146102a557806318160ddd146102dd578063226cfa3d146102f257806323b872dd1461031f57600080fd5b806306fdde0314610209578063095ea7b31461023457806309bbedde14610264578063163c7cef1461028357600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5061021e61069c565b60405161022b919061182d565b60405180910390f35b34801561024057600080fd5b5061025461024f366004611890565b61072e565b604051901515815260200161022b565b34801561027057600080fd5b50600c545b60405190815260200161022b565b34801561028f57600080fd5b506102a361029e3660046118bc565b610745565b005b3480156102b157600080fd5b506009546102c5906001600160a01b031681565b6040516001600160a01b03909116815260200161022b565b3480156102e957600080fd5b50600254610275565b3480156102fe57600080fd5b5061027561030d3660046118d5565b60116020526000908152604090205481565b34801561032b57600080fd5b5061025461033a3660046118f2565b610813565b34801561034b57600080fd5b5061027561035a3660046118d5565b61087c565b34801561036b57600080fd5b506040516012815260200161022b565b34801561038757600080fd5b506102a36103963660046118d5565b6108d8565b3480156103a757600080fd5b506102546103b6366004611890565b6109ff565b3480156103c757600080fd5b506102546103d63660046118d5565b60106020526000908152604090205460ff1681565b3480156103f757600080fd5b506102a3610a35565b34801561040c57600080fd5b506102a361041b3660046118bc565b610a6b565b34801561042c57600080fd5b5061027560125481565b34801561044257600080fd5b506102756104513660046118d5565b6001600160a01b031660009081526020819052604090205490565b34801561047857600080fd5b506102a3610b28565b34801561048d57600080fd5b5061027560075481565b3480156104a357600080fd5b506102a36104b23660046118d5565b610b9c565b3480156104c357600080fd5b506005546001600160a01b03166102c5565b3480156104e157600080fd5b506102756104f03660046118d5565b610bcf565b34801561050157600080fd5b5061021e610bda565b34801561051657600080fd5b50610254610525366004611890565b610be9565b34801561053657600080fd5b506102756105453660046118d5565b610c38565b34801561055657600080fd5b50610254610565366004611890565b610c64565b34801561057657600080fd5b506102756105853660046118d5565b6001600160a01b03166000908152600b602052604090205490565b3480156105ac57600080fd5b5061027560135481565b3480156105c257600080fd5b506102a36105d13660046118d5565b610c71565b3480156105e257600080fd5b506102756105f1366004611933565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561062857600080fd5b506102a3610637366004611890565b610ca4565b34801561064857600080fd5b506102a36106573660046118d5565b610e0e565b34801561066857600080fd5b506008546102c5906001600160a01b031681565b34801561068857600080fd5b5061025461069736600461197a565b610ef9565b6060600380546106ab906119a8565b80601f01602080910402602001604051908101604052809291908181526020018280546106d7906119a8565b80156107245780601f106106f957610100808354040283529160200191610724565b820191906000526020600020905b81548152906001019060200180831161070757829003601f168201915b5050505050905090565b600061073b338484610fa7565b5060015b92915050565b6005546001600160a01b031633146107785760405162461bcd60e51b815260040161076f906119e2565b60405180910390fd5b806013540361080e5760405162461bcd60e51b815260206004820152605660248201527f5a6f6f746f706961546f6b656e5f496e636f6d653a206d696e696d756d546f6b60448201527f656e42616c616e6365466f724469766964656e647320616c726561647920746860648201527532903b30b63ab29037b31013b732bbab30b63ab2939760511b608482015260a40161076f565b601355565b60006108208484846110cb565b610872843361086d85604051806060016040528060288152602001611b14602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611126565b610fa7565b5060019392505050565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b926108ce926108c9926108c3916108be9190611160565b6111e9565b906111f9565b611237565b61073f9190611a2d565b6005546001600160a01b031633146109025760405162461bcd60e51b815260040161076f906119e2565b6001600160a01b03811660009081526010602052604090205460ff161561092857600080fd5b6001600160a01b0381166000908152601060205260408120805460ff1916600117905561095690829061124a565b60405163131836e760e21b8152600c60048201526001600160a01b038216602482015273980638295496e362a8a62cd929c96a4ad3e139cd90634c60db9c9060440160006040518083038186803b1580156109b057600080fd5b505af41580156109c4573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161073b91859061086d90866112af565b6005546001600160a01b03163314610a5f5760405162461bcd60e51b815260040161076f906119e2565b610a683361130e565b50565b6005546001600160a01b03163314610a955760405162461bcd60e51b815260040161076f906119e2565b6000610aa060025490565b11610aaa57600080fd5b8015610a6857610add610abc60025490565b610aca83600160801b611160565b610ad49190611a2d565b600654906112af565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600754610b2290826112af565b60075550565b6005546001600160a01b03163314610b525760405162461bcd60e51b815260040161076f906119e2565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bc65760405162461bcd60e51b815260040161076f906119e2565b610a6881611473565b600061073f82610c38565b6060600480546106ab906119a8565b600061073b338461086d85604051806060016040528060258152602001611b3c602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611126565b6001600160a01b0381166000908152600b602052604081205461073f90610c5e8461087c565b906114bf565b600061073b3384846110cb565b6005546001600160a01b03163314610c9b5760405162461bcd60e51b815260040161076f906119e2565b610a6881611501565b6005546001600160a01b03163314610cce5760405162461bcd60e51b815260040161076f906119e2565b6001600160a01b03821660009081526010602052604090205460ff16610e0a576013548110610d7f57610d01828261124a565b604051632f0ad01760e21b8152600c60048201526001600160a01b03831660248201526044810182905273980638295496e362a8a62cd929c96a4ad3e139cd9063bc2b405c9060640160006040518083038186803b158015610d6257600080fd5b505af4158015610d76573d6000803e3d6000fd5b50505050610dfd565b610d8a82600061124a565b60405163131836e760e21b8152600c60048201526001600160a01b038316602482015273980638295496e362a8a62cd929c96a4ad3e139cd90634c60db9c9060440160006040518083038186803b158015610de457600080fd5b505af4158015610df8573d6000803e3d6000fd5b505050505b610e08826001610ef9565b505b5050565b6005546001600160a01b03163314610e385760405162461bcd60e51b815260040161076f906119e2565b6001600160a01b038116610e9d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b03163314610f265760405162461bcd60e51b815260040161076f906119e2565b6000610f318461130e565b90508015610f9d576001600160a01b038416600081815260116020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610f8b9085815260200190565b60405180910390a3600191505061073f565b5060009392505050565b6001600160a01b0383166110095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161076f565b6001600160a01b03821661106a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161076f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602a60248201527f5a6f6f746f706961546f6b656e5f496e636f6d653a204e6f207472616e7366656044820152691c9cc8185b1b1bddd95960b21b606482015260840161076f565b6000818484111561114a5760405162461bcd60e51b815260040161076f919061182d565b5060006111578486611a4f565b95945050505050565b6000826000036111725750600061073f565b600061117e8385611a62565b90508261118b8583611a2d565b146111e25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161076f565b9392505050565b6000818181121561073f57600080fd5b6000806112068385611a79565b9050600083121580156112195750838112155b8061122e575060008312801561122e57508381125b6111e257600080fd5b60008082121561124657600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561128957600061127783836114bf565b9050611283848261154d565b50610e08565b80821015610e0857600061129d82846114bf565b90506112a984826115b1565b50505050565b6000806112bc8385611aa1565b9050838110156111e25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161076f565b60008061131a83610c38565b9050801561146a576001600160a01b0383166000908152600b602052604090205461134590826112af565b6001600160a01b0384166000818152600b6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906113949084815260200190565b60405180910390a260085460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af11580156113f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114149190611ab4565b905080611463576001600160a01b0384166000908152600b602052604090205461143e90836114bf565b6001600160a01b039094166000908152600b6020526040812094909455509192915050565b5092915050565b50600092915050565b6005546001600160a01b0316331461149d5760405162461bcd60e51b815260040161076f906119e2565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60006111e283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611126565b6005546001600160a01b0316331461152b5760405162461bcd60e51b815260040161076f906119e2565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b61155782826115f5565b6115916115726108be8360065461116090919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906116e0565b6001600160a01b039092166000908152600a602052604090209190915550565b6115bb828261171d565b6115916115d66108be8360065461116090919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906111f9565b6001600160a01b03821661164b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161076f565b61165760008383610e08565b60025461166490826112af565b6002556001600160a01b03821660009081526020819052604090205461168a90826112af565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6000806116ed8385611ad1565b9050600083121580156117005750838113155b8061122e575060008312801561122e57508381136111e257600080fd5b6001600160a01b03821661177d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161076f565b61178982600083610e08565b6117c681604051806060016040528060228152602001611af2602291396001600160a01b0385166000908152602081905260409020549190611126565b6001600160a01b0383166000908152602081905260409020556002546117ec90826114bf565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016116d4565b600060208083528351808285015260005b8181101561185a5785810183015185820160400152820161183e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a6857600080fd5b600080604083850312156118a357600080fd5b82356118ae8161187b565b946020939093013593505050565b6000602082840312156118ce57600080fd5b5035919050565b6000602082840312156118e757600080fd5b81356111e28161187b565b60008060006060848603121561190757600080fd5b83356119128161187b565b925060208401356119228161187b565b929592945050506040919091013590565b6000806040838503121561194657600080fd5b82356119518161187b565b915060208301356119618161187b565b809150509250929050565b8015158114610a6857600080fd5b6000806040838503121561198d57600080fd5b82356119988161187b565b915060208301356119618161196c565b600181811c908216806119bc57607f821691505b6020821081036119dc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082611a4a57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561073f5761073f611a17565b808202811582820484141761073f5761073f611a17565b8082018281126000831280158216821582161715611a9957611a99611a17565b505092915050565b8082018082111561073f5761073f611a17565b600060208284031215611ac657600080fd5b81516111e28161196c565b818103600083128015838313168383128216171561146357611463611a1756fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122041925155a55565938207680f371f30558c3d190e3f64afa3ca8822d813d51b5564736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102765760003560e01c8063715018a61161014f578063a9059cbb116100c1578063c27e4cfa1161007a578063c27e4cfa14610750578063cd43e22814610770578063d2d7ad83146107e1578063dd62ed3e146107f7578063f2fde38b1461083d578063fe0175351461085d57600080fd5b8063a9059cbb1461068a578063aa4bde28146106aa578063aee50b1e146106c0578063b1ba39ea146106e0578063b62496f514610700578063c02466681461073057600080fd5b80638da5cb5b116101135780638da5cb5b146105e257806395d89b41146106005780639dccf6f1146106155780639fad96831461062a578063a457c2d71461064a578063a8b9d2401461066a57600080fd5b8063715018a614610557578063781edb3c1461056c578063880bcbc11461058c5780638c0b5e22146105ac5780638d0445ee146105c257600080fd5b806330bb4cff116101e857806349bd5a5e116101ac57806349bd5a5e146104995780634e71d92d146104cd5780635ebf4db9146104e257806364b0f653146105025780636843cd841461051757806370a082311461053757600080fd5b806330bb4cff14610408578063313ce5671461041d57806331e79db014610439578063395093511461045957806342966c681461047957600080fd5b80631694505e1161023a5780631694505e1461033157806318160ddd146103695780631e293c101461038857806323b872dd146103a857806327a14fc2146103c85780632c1f5216146103e857600080fd5b8063064a59d01461028257806306fdde03146102b8578063095ea7b3146102da578063098df585146102fa5780630bd05b691461031c57600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506007546102a390600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102c457600080fd5b506102cd6108a3565b6040516102af919061364d565b3480156102e657600080fd5b506102a36102f53660046136b0565b610935565b34801561030657600080fd5b5061031a6103153660046136dc565b61094c565b005b34801561032857600080fd5b5061031a610a72565b34801561033d57600080fd5b50600654610351906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561037557600080fd5b506003545b6040519081526020016102af565b34801561039457600080fd5b5061031a6103a33660046136dc565b610ab1565b3480156103b457600080fd5b506102a36103c33660046136f5565b610ba1565b3480156103d457600080fd5b5061031a6103e33660046136dc565b610c0a565b3480156103f457600080fd5b50600754610351906001600160a01b031681565b34801561041457600080fd5b5061037a610d5b565b34801561042957600080fd5b50604051601281526020016102af565b34801561044557600080fd5b5061031a610454366004613736565b610dce565b34801561046557600080fd5b506102a36104743660046136b0565b610e5b565b34801561048557600080fd5b5061031a6104943660046136dc565b610e91565b3480156104a557600080fd5b506103517f0000000000000000000000000c61aa4c6f7f1ccd4fa872ac0f1a6d63775a541381565b3480156104d957600080fd5b5061031a610e9e565b3480156104ee57600080fd5b5061031a6104fd3660046136dc565b610f13565b34801561050e57600080fd5b5061037a610f6e565b34801561052357600080fd5b5061037a610532366004613736565b610fb8565b34801561054357600080fd5b5061037a610552366004613736565b611028565b34801561056357600080fd5b5061031a611043565b34801561057857600080fd5b5061031a610587366004613761565b6110b7565b34801561059857600080fd5b5061031a6105a7366004613761565b611181565b3480156105b857600080fd5b5061037a60095481565b3480156105ce57600080fd5b5061031a6105dd36600461379a565b611243565b3480156105ee57600080fd5b506000546001600160a01b0316610351565b34801561060c57600080fd5b506102cd61169c565b34801561062157600080fd5b5061031a6116ab565b34801561063657600080fd5b5061031a6106453660046137fb565b6116ec565b34801561065657600080fd5b506102a36106653660046136b0565b611820565b34801561067657600080fd5b5061037a610685366004613736565b61186f565b34801561069657600080fd5b506102a36106a53660046136b0565b6118a2565b3480156106b657600080fd5b5061037a60085481565b3480156106cc57600080fd5b5061031a6106db3660046136dc565b6118af565b3480156106ec57600080fd5b5061031a6106fb3660046137fb565b611979565b34801561070c57600080fd5b506102a361071b366004613736565b60186020526000908152604090205460ff1681565b34801561073c57600080fd5b5061031a61074b366004613761565b611a4d565b34801561075c57600080fd5b5061031a61076b366004613761565b611b0f565b34801561077c57600080fd5b5060125460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102af565b3480156107ed57600080fd5b5061037a600c5481565b34801561080357600080fd5b5061037a610812366004613860565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561084957600080fd5b5061031a610858366004613736565b611b91565b34801561086957600080fd5b5060125460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166107ad565b6060600480546108b29061388e565b80601f01602080910402602001604051908101604052809291908181526020018280546108de9061388e565b801561092b5780601f106109005761010080835404028352916020019161092b565b820191906000526020600020905b81548152906001019060200180831161090e57829003601f168201915b5050505050905090565b6000610942338484611ce1565b5060015b92915050565b6000546001600160a01b0316331461097f5760405162461bcd60e51b8152600401610976906138c8565b60405180910390fd5b4781106109dd5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610976565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610a2a576040519150601f19603f3d011682016040523d82523d6000602084013e610a2f565b606091505b505090508015610a6e576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610a9c5760405162461bcd60e51b8152600401610976906138c8565b6007805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610adb5760405162461bcd60e51b8152600401610976906138c8565b670de0b6b3a76400006103e8610af060035490565b610afb906002613913565b610b059190613940565b610b0f9190613940565b811015610b6e5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b6064820152608401610976565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610bae848484611e06565b610c008433610bfb85604051806060016040528060288152602001613c08602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612537565b611ce1565b5060019392505050565b6000546001600160a01b03163314610c345760405162461bcd60e51b8152600401610976906138c8565b670de0b6b3a76400006103e8610c4960035490565b610c54906014613913565b610c5e9190613940565b610c689190613940565b811015610cc35760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b6064820152608401610976565b6008548103610d285760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610976565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc99190613954565b905090565b6000546001600160a01b03163314610df85760405162461bcd60e51b8152600401610976906138c8565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610e4057600080fd5b505af1158015610e54573d6000803e3d6000fd5b5050505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610942918590610bfb9086611c7b565b610e9b3382612571565b50565b6007546040516303eb9a5f60e61b8152336004820152600060248201526001600160a01b039091169063fae697c0906044016020604051808303816000875af1158015610eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9b919061396d565b6000546001600160a01b03163314610f3d5760405162461bcd60e51b8152600401610976906138c8565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610e26565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610da5573d6000803e3d6000fd5b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109469190613954565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b0316331461106d5760405162461bcd60e51b8152600401610976906138c8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110e15760405162461bcd60e51b8152600401610976906138c8565b6001600160a01b03821660009081526017602052604090205481151560ff9091161515036111215760405162461bcd60e51b81526004016109769061398a565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b031633146111ab5760405162461bcd60e51b8152600401610976906138c8565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036111eb5760405162461bcd60e51b81526004016109769061398a565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611175565b6000546001600160a01b0316331461126d5760405162461bcd60e51b8152600401610976906138c8565b600d546001600160a01b038481169116146113d2576001600160a01b0383166112d85760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610976565b7f0000000000000000000000000c61aa4c6f7f1ccd4fa872ac0f1a6d63775a54136001600160a01b0316836001600160a01b0316036113595760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610976565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0385161790555b600e546001600160a01b03838116911614611537576001600160a01b03821661143d5760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610976565b7f0000000000000000000000000c61aa4c6f7f1ccd4fa872ac0f1a6d63775a54136001600160a01b0316826001600160a01b0316036114be5760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610976565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600e80546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b03828116911614611697576001600160a01b0381166115a25760405162461bcd60e51b815260206004820152601a60248201527f546865207465616d57616c6c65742063616e6e6f7420626520300000000000006044820152606401610976565b7f0000000000000000000000000c61aa4c6f7f1ccd4fa872ac0f1a6d63775a54136001600160a01b0316816001600160a01b0316036116235760405162461bcd60e51b815260206004820152601a60248201527f546865207465616d57616c6c65742063616e6e6f7420626520300000000000006044820152606401610976565b600f54604051691d19585b55d85b1b195d60b21b81526001600160a01b0391821691831690600a01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600f80546001600160a01b0319166001600160a01b0383161790555b505050565b6060600580546108b29061388e565b6000546001600160a01b031633146116d55760405162461bcd60e51b8152600401610976906138c8565b6b033b2e3c9fd0803ce80000006008819055600955565b6000546001600160a01b031633146117165760405162461bcd60e51b8152600401610976906138c8565b80828461172387896139d4565b61172d91906139d4565b61173791906139d4565b61174191906139d4565b60ff166005116117935760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d75737420626520666169722121210000000000000000006044820152606401610976565b6117a26010868686868661267c565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b60006109423384610bfb85604051806060016040528060258152602001613c50602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612537565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401610fe7565b6000610942338484611e06565b6000546001600160a01b031633146118d95760405162461bcd60e51b8152600401610976906138c8565b600c5481036119465760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610976565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6000546001600160a01b031633146119a35760405162461bcd60e51b8152600401610976906138c8565b8082846119b087896139d4565b6119ba91906139d4565b6119c491906139d4565b6119ce91906139d4565b60ff16600511611a205760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d757374206265206661697221212100000000000000006044820152606401610976565b611a2f60108686868686612961565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d016117bb565b6000546001600160a01b03163314611a775760405162461bcd60e51b8152600401610976906138c8565b6001600160a01b03821660009081526015602052604090205481151560ff909116151503611ab75760405162461bcd60e51b81526004016109769061398a565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611175565b6000546001600160a01b03163314611b395760405162461bcd60e51b8152600401610976906138c8565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611175565b6000546001600160a01b03163314611bbb5760405162461bcd60e51b8152600401610976906138c8565b6001600160a01b038116611c205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610976565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611c8883856139ed565b905083811015611cda5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610976565b9392505050565b6001600160a01b038316611d435760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610976565b6001600160a01b038216611da45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610976565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611e2c5760405162461bcd60e51b815260040161097690613a00565b6001600160a01b038216611e525760405162461bcd60e51b815260040161097690613a45565b80600003611e665761169783836000612c62565b6001600160a01b03808416600081815260186020908152604080832054948716835280832054938352601490915290205460ff928316929182169116158015611ec857506001600160a01b03841660009081526014602052604090205460ff16155b1561220657600754600160a01b900460ff16611f265760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610976565b6001600160a01b03851660009081526018602052604090205460ff168015611f6757506001600160a01b03841660009081526016602052604090205460ff16155b1561203857600954831115611fcf5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610976565b600854611fdb85611028565b611fe590856139ed565b11156120335760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610976565b612206565b6001600160a01b03841660009081526018602052604090205460ff16801561207957506001600160a01b03851660009081526016602052604090205460ff16155b15612103576009548311156120e35760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610976565b600a80546001600160a01b0319166001600160a01b038616179055612206565b6001600160a01b03841660009081526016602052604090205460ff166121875760085461212f85611028565b61213990856139ed565b11156120335760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c65740000000000000000006044820152606401610976565b600a54600160a01b900460ff161580156121b957506001600160a01b03851660009081526016602052604090205460ff165b1561220657600954600a80546001600160a01b0390811660009081526002602090815260408083208b8516845290915290209290925554600b80546001600160a01b031916919092161790555b6122108282612d6e565b6000600c5461221e30611028565b6007549111159150600160a01b900460ff1680156122395750805b801561224f5750600a54600160a01b900460ff16155b801561227357506001600160a01b03851660009081526018602052604090205460ff165b801561229857506001600160a01b03861660009081526015602052604090205460ff16155b80156122bd57506001600160a01b03851660009081526015602052604090205460ff16155b156122eb57600a805460ff60a01b1916600160a01b1790556122dd612fe6565b600a805460ff60a01b191690555b600a54600090600160a01b900460ff161580156123115750600754600160a01b900460ff165b6001600160a01b03881660009081526015602052604090205490915060ff168061235357506001600160a01b03861660009081526015602052604090205460ff165b1561235c575060005b8080156123745750601354600160281b900460ff1615155b1561243d5760135460009060649061239690600160281b900460ff1688613913565b6123a09190613940565b6013549091506000906064906123c0906301000000900460ff1689613913565b6123ca9190613940565b90506123d68288613a88565b96506123e3893084612c62565b801561243a576123f33082612571565b60135460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612448878787612c62565b6007546001600160a01b031663e30443bc8861246381611028565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156124a957600080fd5b505af19250505080156124ba575060015b506007546001600160a01b031663e30443bc876124d681611028565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561251c57600080fd5b505af192505050801561252d575060015b5050505050505050565b6000818484111561255b5760405162461bcd60e51b8152600401610976919061364d565b5060006125688486613a88565b95945050505050565b6001600160a01b0382166125d15760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610976565b61260e81604051806060016040528060228152602001613bc0602291396001600160a01b0385166000908152600160205260409020549190612537565b6001600160a01b0383166000908152600160205260409020556003546126349082613408565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600286015460ff8681169116146126fd57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613c30833981519152916126e39160481b90613a9b565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461279157604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613c30833981519152916127709160481b90613a9b565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b9092041614612828576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613c30833981519152916128049160481b90613a9b565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b90920416146128be576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613c30833981519152916128989160481b90613a9b565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b9092041614612959576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613c30833981519152916129319160481b90613a9b565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff86811661010090920416146129f257604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613c30833981519152916129d39160481b90613a9b565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612a8b57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613c3083398151915291612a689160481b90613a9b565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612b24576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613c3083398151915291612aff9160481b90613a9b565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612bbc576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613c3083398151915291612b959160481b90613a9b565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b9092041614612959576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613c3083398151915291612c309160481b90613a9b565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6001600160a01b038316612c885760405162461bcd60e51b815260040161097690613a00565b6001600160a01b038216612cae5760405162461bcd60e51b815260040161097690613a45565b612ceb81604051806060016040528060268152602001613be2602691396001600160a01b0386166000908152600160205260409020549190612537565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612d1a9082611c7b565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611df99085815260200190565b6013805464ffffffffff191690558015612df7576012546013805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b8115612e71576012546013805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b80158015612e7d575081155b15612ef7576012546013805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b60135460ff600160201b820481169163010000008104821691620100008204811691612f2b916101008204811691166139d4565b612f3591906139d4565b612f3f91906139d4565b612f4991906139d4565b6013805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001610a65565b6000612ff130611028565b600c549091504790613004906007613913565b82111561301c57600c54613019906007613913565b91505b601354600090600160281b900460ff16156133b25760135460009060029060ff600160281b8204811691613051911687613913565b61305b9190613940565b6130659190613940565b60135490915060009060ff600160281b820481169161308d91600160201b9091041687613913565b6130979190613940565b905060006130a582846139ed565b6130af9087613a88565b90506130ba8161344a565b60006130c68647613a88565b60135490915060009060ff600160201b8204811691630100000081048216916130f29160029116613ab2565b6130fc91906139d4565b61310691906139d4565b60135461311d9190600160281b900460ff16613ad4565b60135460ff9182169250600091600291849161313a911686613913565b6131449190613940565b61314e9190613940565b601354909150600090839061316b90610100900460ff1686613913565b6131759190613940565b9050600061318382846139ed565b61318d9086613a88565b600f546040519192506001600160a01b0316908290600081818185875af1925050503d80600081146131db576040519150601f19603f3d011682016040523d82523d6000602084013e6131e0565b606091505b5050600e54604051919a506001600160a01b0316908390600081818185875af1925050503d8060008114613230576040519150601f19603f3d011682016040523d82523d6000602084013e613235565b606091505b5090995050871561328c5761324a88846135a0565b60408051878152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101889052600090309063a9059cbb906044016020604051808303816000875af11580156132e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613304919061396d565b905080156133a457600754604051636bf5ecd560e01b8152600481018a90526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b15801561335257600080fd5b505af1158015613366573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9698860405161339b91815260200190565b60405180910390a15b505050505050505050505050565b6133bb8361344a565b600f546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612959576040519150601f19603f3d011682016040523d82523d6000602084013e612959565b6000611cda83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612537565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061347f5761347f613aed565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156134d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fc9190613b03565b8160018151811061350f5761350f613aed565b6001600160a01b0392831660209182029290920101526006546135359130911684611ce1565b600654600b5460405163791ac94760e01b81526001600160a01b039283169263791ac9479261357292879260009288929116904290600401613b20565b600060405180830381600087803b15801561358c57600080fd5b505af1158015612959573d6000803e3d6000fd5b6006546135b89030906001600160a01b031684611ce1565b600654600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613628573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e549190613b91565b600060208083528351808285015260005b8181101561367a5785810183015185820160400152820161365e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e9b57600080fd5b600080604083850312156136c357600080fd5b82356136ce8161369b565b946020939093013593505050565b6000602082840312156136ee57600080fd5b5035919050565b60008060006060848603121561370a57600080fd5b83356137158161369b565b925060208401356137258161369b565b929592945050506040919091013590565b60006020828403121561374857600080fd5b8135611cda8161369b565b8015158114610e9b57600080fd5b6000806040838503121561377457600080fd5b823561377f8161369b565b9150602083013561378f81613753565b809150509250929050565b6000806000606084860312156137af57600080fd5b83356137ba8161369b565b925060208401356137ca8161369b565b915060408401356137da8161369b565b809150509250925092565b803560ff811681146137f657600080fd5b919050565b600080600080600060a0868803121561381357600080fd5b61381c866137e5565b945061382a602087016137e5565b9350613838604087016137e5565b9250613846606087016137e5565b9150613854608087016137e5565b90509295509295909350565b6000806040838503121561387357600080fd5b823561387e8161369b565b9150602083013561378f8161369b565b600181811c908216806138a257607f821691505b6020821081036138c257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610946576109466138fd565b634e487b7160e01b600052601260045260246000fd5b60008261394f5761394f61392a565b500490565b60006020828403121561396657600080fd5b5051919050565b60006020828403121561397f57600080fd5b8151611cda81613753565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b60ff8181168382160190811115610946576109466138fd565b80820180821115610946576109466138fd565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610946576109466138fd565b68ffffffffffffffffff1991909116815260200190565b600060ff831680613ac557613ac561392a565b8060ff84160491505092915050565b60ff8281168282160390811115610946576109466138fd565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613b1557600080fd5b8151611cda8161369b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613b705784516001600160a01b031683529383019391830191600101613b4b565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613ba657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207532ff6cd233874f2b69abc188b622bba4446eb47b66626a0c16581715c98a9a64736f6c63430008110033
Deployed Bytecode Sourcemap
19308:27486:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19638:28;;;;;;;;;;-1:-1:-1;19638:28:0;;;;-1:-1:-1;;;19638:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;19638:28:0;;;;;;;;10013:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11068:210::-;;;;;;;;;;-1:-1:-1;11068:210:0;;;;;:::i;:::-;;:::i;33057:347::-;;;;;;;;;;-1:-1:-1;33057:347:0;;;;;:::i;:::-;;:::i;:::-;;25952:88;;;;;;;;;;;;;:::i;19356:30::-;;;;;;;;;;-1:-1:-1;19356:30:0;;;;-1:-1:-1;;;;;19356:30:0;;;;;;-1:-1:-1;;;;;1579:32:1;;;1561:51;;1549:2;1534:18;19356:30:0;1400:218:1;10334:108:0;;;;;;;;;;-1:-1:-1;10422:12:0;;10334:108;;;1769:25:1;;;1757:2;1742:18;10334:108:0;1623:177:1;31611:323:0;;;;;;;;;;-1:-1:-1;31611:323:0;;;;;:::i;:::-;;:::i;11286:454::-;;;;;;;;;;-1:-1:-1;11286:454:0;;;;;:::i;:::-;;:::i;31942:450::-;;;;;;;;;;-1:-1:-1;31942:450:0;;;;;:::i;:::-;;:::i;19586:43::-;;;;;;;;;;-1:-1:-1;19586:43:0;;;;-1:-1:-1;;;;;19586:43:0;;;33501:141;;;;;;;;;;;;;:::i;10233:93::-;;;;;;;;;;-1:-1:-1;10233:93:0;;10316:2;2653:36:1;;2641:2;2626:18;10233:93:0;2511:184:1;27055:130:0;;;;;;;;;;-1:-1:-1;27055:130:0;;;;;:::i;:::-;;:::i;11748:300::-;;;;;;;;;;-1:-1:-1;11748:300:0;;;;;:::i;:::-;;:::i;33412:81::-;;;;;;;;;;-1:-1:-1;33412:81:0;;;;;:::i;:::-;;:::i;19393:38::-;;;;;;;;;;;;;;;32946:103;;;;;;;;;;;;;:::i;32762:176::-;;;;;;;;;;-1:-1:-1;32762:176:0;;;;;:::i;:::-;;:::i;34025:142::-;;;;;;;;;;;;;:::i;33844:173::-;;;;;;;;;;-1:-1:-1;33844:173:0;;;;;:::i;:::-;;:::i;10450:177::-;;;;;;;;;;-1:-1:-1;10450:177:0;;;;;:::i;:::-;;:::i;9131:148::-;;;;;;;;;;;;;:::i;27585:394::-;;;;;;;;;;-1:-1:-1;27585:394:0;;;;;:::i;:::-;;:::i;27193:384::-;;;;;;;;;;-1:-1:-1;27193:384:0;;;;;:::i;:::-;;:::i;19815:54::-;;;;;;;;;;;;;;;;27987:1660;;;;;;;;;;-1:-1:-1;27987:1660:0;;;;;:::i;:::-;;:::i;8917:79::-;;;;;;;;;;-1:-1:-1;8955:7:0;8982:6;-1:-1:-1;;;;;8982:6:0;8917:79;;10121:104;;;;;;;;;;;;;:::i;46667:124::-;;;;;;;;;;;;;:::i;29673:949::-;;;;;;;;;;-1:-1:-1;29673:949:0;;;;;:::i;:::-;;:::i;12056:400::-;;;;;;;;;;-1:-1:-1;12056:400:0;;;;;:::i;:::-;;:::i;33650:186::-;;;;;;;;;;-1:-1:-1;33650:186:0;;;;;:::i;:::-;;:::i;10635:216::-;;;;;;;;;;-1:-1:-1;10635:216:0;;;;;:::i;:::-;;:::i;19750:58::-;;;;;;;;;;;;;;;;32400:354;;;;;;;;;;-1:-1:-1;32400:354:0;;;;;:::i;:::-;;:::i;30630:973::-;;;;;;;;;;-1:-1:-1;30630:973:0;;;;;:::i;:::-;;:::i;21140:57::-;;;;;;;;;;-1:-1:-1;21140:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26693:354;;;;;;;;;;-1:-1:-1;26693:354:0;;;;;:::i;:::-;;:::i;26492:193::-;;;;;;;;;;-1:-1:-1;26492:193:0;;;;;:::i;:::-;;:::i;34175:410::-;;;;;;;;;;-1:-1:-1;34400:23:0;;;;;;;34438;;;;;;-1:-1:-1;;;34476:21:0;;;;;-1:-1:-1;;;34512:18:0;;;;;-1:-1:-1;;;34545:21:0;;;;34175:410;;;;5103:4:1;5091:17;;;5073:36;;5145:17;;;5140:2;5125:18;;5118:45;5199:17;;;5179:18;;;5172:45;;;;5253:17;;5248:2;5233:18;;5226:45;5308:17;;;5302:3;5287:19;;5280:46;5060:3;5045:19;34175:410:0;4834:498:1;19964:64:0;;;;;;;;;;;;;;;;10859:201;;;;;;;;;;-1:-1:-1;10859:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;11025:18:0;;;10993:7;11025:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10859:201;9287:281;;;;;;;;;;-1:-1:-1;9287:281:0;;;;;:::i;:::-;;:::i;34593:416::-;;;;;;;;;;-1:-1:-1;34819:24:0;;;;;;;;;34858;;;;;;-1:-1:-1;;;34897:22:0;;;;;-1:-1:-1;;;34934:19:0;;;;;-1:-1:-1;;;34968:22:0;;;;34593:416;;10013:100;10067:13;10100:5;10093:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10013:100;:::o;11068:210::-;11187:4;11209:39;8305:10;11232:7;11241:6;11209:8;:39::i;:::-;-1:-1:-1;11266:4:0;11068:210;;;;;:::o;33057:347::-;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;;;;;;;;;33160:21:::1;33151:6;:30;33129:118;;;::::0;-1:-1:-1;;;33129:118:0;;6678:2:1;33129:118:0::1;::::0;::::1;6660:21:1::0;6717:2;6697:18;;;6690:30;6756:34;6736:18;;;6729:62;-1:-1:-1;;;6807:18:1;;;6800:36;6853:19;;33129:118:0::1;6476:402:1::0;33129:118:0::1;33259:12;8982:6:::0;;33277:40:::1;::::0;-1:-1:-1;;;;;8982:6:0;;;;33306;;33259:12;33277:40;33259:12;33277:40;33306:6;8982;33277:40:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33258:59;;;33332:7;33328:69;;;33361:24;::::0;1769:25:1;;;33361:24:0::1;::::0;1757:2:1;1742:18;33361:24:0::1;;;;;;;;33328:69;33118:286;33057:347:::0;:::o;25952:88::-;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;26009:16:::1;:23:::0;;-1:-1:-1;;;;26009:23:0::1;-1:-1:-1::0;;;26009:23:0::1;::::0;;25952:88::o;31611:323::-;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;31757:4:::1;31749;31728:13;10422:12:::0;;;10334:108;31728:13:::1;:17;::::0;31744:1:::1;31728:17;:::i;:::-;31727:26;;;;:::i;:::-;31726:35;;;;:::i;:::-;31714:8;:47;;31692:136;;;::::0;-1:-1:-1;;;31692:136:0;;7857:2:1;31692:136:0::1;::::0;::::1;7839:21:1::0;7896:2;7876:18;;;7869:30;7935:34;7915:18;;;7908:62;-1:-1:-1;;;7986:18:1;;;7979:37;8033:19;;31692:136:0::1;7655:403:1::0;31692:136:0::1;31881:11;::::0;31844:49:::1;::::0;31871:8;;31844:49:::1;::::0;;;::::1;31904:11;:22:::0;31611:323::o;11286:454::-;11426:4;11443:36;11453:6;11461:9;11472:6;11443:9;:36::i;:::-;11490:220;11513:6;8305:10;11561:138;11617:6;11561:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11561:19:0;;;;;;:11;:19;;;;;;;;8305:10;11561:33;;;;;;;;;;:37;:138::i;:::-;11490:8;:220::i;:::-;-1:-1:-1;11728:4:0;11286:454;;;;;:::o;31942:450::-;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;32084:4:::1;32076;32054:13;10422:12:::0;;;10334:108;32054:13:::1;:18;::::0;32070:2:::1;32054:18;:::i;:::-;32053:27;;;;:::i;:::-;32052:36;;;;:::i;:::-;32040:8;:48;;32018:134;;;::::0;-1:-1:-1;;;32018:134:0;;8265:2:1;32018:134:0::1;::::0;::::1;8247:21:1::0;8304:2;8284:18;;;8277:30;8343:34;8323:18;;;8316:62;-1:-1:-1;;;8394:18:1;;;8387:34;8438:19;;32018:134:0::1;8063:400:1::0;32018:134:0::1;32197:15;;32185:8;:27:::0;32163:120:::1;;;::::0;-1:-1:-1;;;32163:120:0;;8670:2:1;32163:120:0::1;::::0;::::1;8652:21:1::0;8709:2;8689:18;;;8682:30;8748:34;8728:18;;;8721:62;-1:-1:-1;;;8799:18:1;;;8792:41;8850:19;;32163:120:0::1;8468:407:1::0;32163:120:0::1;32331:15;::::0;32299:48:::1;::::0;32321:8;;32299:48:::1;::::0;;;::::1;32358:15;:26:::0;31942:450::o;33501:141::-;33591:15;;:43;;;-1:-1:-1;;;33591:43:0;;;;33564:7;;-1:-1:-1;;;;;33591:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33584:50;;33501:141;:::o;27055:130::-;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;27132:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;27132:45:0;;-1:-1:-1;;;;;1579:32:1;;;27132:45:0::1;::::0;::::1;1561:51:1::0;27132:15:0;;::::1;::::0;:36:::1;::::0;1534:18:1;;27132:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27055:130:::0;:::o;11748:300::-;8305:10;11863:4;11957:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11957:34:0;;;;;;;;;;11863:4;;11885:133;;11935:7;;11957:50;;11996:10;11957:38;:50::i;33412:81::-;33461:24;33467:10;33479:5;33461;:24::i;:::-;33412:81;:::o;32946:103::-;32983:15;;:58;;-1:-1:-1;;;32983:58:0;;33022:10;32983:58;;;9253:51:1;32983:15:0;9320:18:1;;;9313:50;-1:-1:-1;;;;;32983:15:0;;;;:30;;9226:18:1;;32983:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32762:176::-;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;32877:15:::1;::::0;:53:::1;::::0;-1:-1:-1;;;32877:53:0;;::::1;::::0;::::1;1769:25:1::0;;;-1:-1:-1;;;;;32877:15:0;;::::1;::::0;:43:::1;::::0;1742:18:1;;32877:53:0::1;1623:177:1::0;34025:142:0;34118:15;;:41;;;-1:-1:-1;;;34118:41:0;;;;34091:7;;-1:-1:-1;;;;;34118:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;33844:173;33975:15;;:34;;-1:-1:-1;;;33975:34:0;;-1:-1:-1;;;;;1579:32:1;;;33975:34:0;;;1561:51:1;33943:7:0;;33975:15;;:25;;1534:18:1;;33975:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10450:177::-;-1:-1:-1;;;;;10601:18:0;10569:7;10601:18;;;:9;:18;;;;;;;10450:177::o;9131:148::-;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;9238:1:::1;9222:6:::0;;9201:40:::1;::::0;-1:-1:-1;;;;;9222:6:0;;::::1;::::0;9201:40:::1;::::0;9238:1;;9201:40:::1;9269:1;9252:19:::0;;-1:-1:-1;;;;;;9252:19:0::1;::::0;;9131:148::o;27585:394::-;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27727:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;27705:142:::1;;;;-1:-1:-1::0;;;27705:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27858:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;27858:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27923:48;;154:41:1;;;27923:48:0::1;::::0;127:18:1;27923:48:0::1;;;;;;;;27585:394:::0;;:::o;27193:384::-;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27340:31:0;::::1;;::::0;;;:22:::1;:31;::::0;;;;;:43;::::1;;:31;::::0;;::::1;:43;;::::0;27318:135:::1;;;;-1:-1:-1::0;;;27318:135:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27464:31:0;::::1;;::::0;;;:22:::1;:31;::::0;;;;;;;;:42;;-1:-1:-1;;27464:42:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27522:47;;154:41:1;;;27522:47:0::1;::::0;127:18:1;27522:47:0::1;14:187:1::0;27987:1660:0;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;28156:15:::1;::::0;-1:-1:-1;;;;;28156:37:0;;::::1;:15:::0;::::1;:37;28152:546;;-1:-1:-1::0;;;;;28236:32:0;::::1;28210:125;;;::::0;-1:-1:-1;;;28210:125:0;;10237:2:1;28210:125:0::1;::::0;::::1;10219:21:1::0;10276:2;10256:18;;;10249:30;10315:33;10295:18;;;10288:61;10366:18;;28210:125:0::1;10035:355:1::0;28210:125:0::1;28398:13;-1:-1:-1::0;;;;;28376:35:0::1;:18;-1:-1:-1::0;;;;;28376:35:0::1;::::0;28350:128:::1;;;::::0;-1:-1:-1;;;28350:128:0;;10237:2:1;28350:128:0::1;::::0;::::1;10219:21:1::0;10276:2;10256:18;;;10249:30;10315:33;10295:18;;;10288:61;10366:18;;28350:128:0::1;10035:355:1::0;28350:128:0::1;28605:15;::::0;28498:137:::1;::::0;-1:-1:-1;;;10597:30:1;;-1:-1:-1;;;;;28605:15:0;;::::1;::::0;28498:137;::::1;::::0;10652:2:1;10643:12;28498:137:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;28650:15;:36:::0;;-1:-1:-1;;;;;;28650:36:0::1;-1:-1:-1::0;;;;;28650:36:0;::::1;;::::0;;28152:546:::1;28712:15;::::0;-1:-1:-1;;;;;28712:37:0;;::::1;:15:::0;::::1;:37;28708:546;;-1:-1:-1::0;;;;;28792:32:0;::::1;28766:125;;;::::0;-1:-1:-1;;;28766:125:0;;10868:2:1;28766:125:0::1;::::0;::::1;10850:21:1::0;10907:2;10887:18;;;10880:30;10946:33;10926:18;;;10919:61;10997:18;;28766:125:0::1;10666:355:1::0;28766:125:0::1;28954:13;-1:-1:-1::0;;;;;28932:35:0::1;:18;-1:-1:-1::0;;;;;28932:35:0::1;::::0;28906:128:::1;;;::::0;-1:-1:-1;;;28906:128:0;;10868:2:1;28906:128:0::1;::::0;::::1;10850:21:1::0;10907:2;10887:18;;;10880:30;10946:33;10926:18;;;10919:61;10997:18;;28906:128:0::1;10666:355:1::0;28906:128:0::1;29161:15;::::0;29054:137:::1;::::0;-1:-1:-1;;;11228:30:1;;-1:-1:-1;;;;;29161:15:0;;::::1;::::0;29054:137;::::1;::::0;11283:2:1;11274:12;29054:137:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;29206:15;:36:::0;;-1:-1:-1;;;;;;29206:36:0::1;-1:-1:-1::0;;;;;29206:36:0;::::1;;::::0;;28708:546:::1;29268:10;::::0;-1:-1:-1;;;;;29268:27:0;;::::1;:10:::0;::::1;:27;29264:376;;-1:-1:-1::0;;;;;29320:27:0;::::1;29312:66;;;::::0;-1:-1:-1;;;29312:66:0;;11499:2:1;29312:66:0::1;::::0;::::1;11481:21:1::0;11538:2;11518:18;;;11511:30;11577:28;11557:18;;;11550:56;11623:18;;29312:66:0::1;11297:350:1::0;29312:66:0::1;29436:13;-1:-1:-1::0;;;;;29419:30:0::1;:13;-1:-1:-1::0;;;;;29419:30:0::1;::::0;29393:118:::1;;;::::0;-1:-1:-1;;;29393:118:0;;11499:2:1;29393:118:0::1;::::0;::::1;11481:21:1::0;11538:2;11518:18;;;11511:30;11577:28;11557:18;;;11550:56;11623:18;;29393:118:0::1;11297:350:1::0;29393:118:0::1;29576:10;::::0;29531:56:::1;::::0;-1:-1:-1;;;11854:25:1;;-1:-1:-1;;;;;29576:10:0;;::::1;::::0;29531:56;::::1;::::0;11904:2:1;11895:12;29531:56:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;29602:10;:26:::0;;-1:-1:-1;;;;;;29602:26:0::1;-1:-1:-1::0;;;;;29602:26:0;::::1;;::::0;;29264:376:::1;27987:1660:::0;;;:::o;10121:104::-;10177:13;10210:7;10203:14;;;;;:::i;46667:124::-;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;19722:21:::1;46722:15;:27:::0;;;46760:11:::1;:23:::0;46667:124::o;29673:949::-;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;30106:16;30069:13;30029:16;29945:60:::1;29987:18:::0;29945;:60:::1;:::i;:::-;:100;;;;:::i;:::-;:137;;;;:::i;:::-;:177;;;;:::i;:::-;29924:198;;:1;:198;29902:271;;;::::0;-1:-1:-1;;;29902:271:0;;12273:2:1;29902:271:0::1;::::0;::::1;12255:21:1::0;12312:2;12292:18;;;12285:30;12351:25;12331:18;;;12324:53;12394:18;;29902:271:0::1;12071:347:1::0;29902:271:0::1;30184:209;30221:5;30241:18;30274;30307:16;30338:13;30366:16;30184:22;:209::i;:::-;30409:205;::::0;-1:-1:-1;;;12625:27:1;;12677:2;12668:12;30409:205:0::1;;::::0;;;;;::::1;::::0;;5103:4:1;5091:17;;;5073:36;;5145:17;;;5140:2;5125:18;;5118:45;5199:17;;;5179:18;;;5172:45;5253:17;;;5248:2;5233:18;;5226:45;5308:17;;5302:3;5287:19;;5280:46;30409:205:0;;;;::::1;::::0;;;;;5060:3:1;30409:205:0;;::::1;29673:949:::0;;;;;:::o;12056:400::-;12176:4;12198:228;8305:10;12248:7;12270:145;12327:15;12270:145;;;;;;;;;;;;;;;;;8305:10;12270:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12270:34:0;;;;;;;;;;;;:38;:145::i;33650:186::-;33781:15;;:47;;-1:-1:-1;;;33781:47:0;;-1:-1:-1;;;;;1579:32:1;;;33781:47:0;;;1561:51:1;33749:7:0;;33781:15;;:38;;1534:18:1;;33781:47:0;1400:218:1;10635:216:0;10757:4;10779:42;8305:10;10803:9;10814:6;10779:9;:42::i;32400:354::-;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;32518:23:::1;;32506:8;:35:::0;32484:136:::1;;;::::0;-1:-1:-1;;;32484:136:0;;12893:2:1;32484:136:0::1;::::0;::::1;12875:21:1::0;12932:2;12912:18;;;12905:30;12971:34;12951:18;;;12944:62;-1:-1:-1;;;13022:18:1;;;13015:49;13081:19;;32484:136:0::1;12691:415:1::0;32484:136:0::1;32677:23;::::0;32636:65:::1;::::0;32667:8;;32636:65:::1;::::0;;;::::1;32712:23;:34:::0;32400:354::o;30630:973::-;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;31073:17;31035:14;30994:17;30908:62:::1;30951:19:::0;30908;:62:::1;:::i;:::-;:103;;;;:::i;:::-;:141;;;;:::i;:::-;:182;;;;:::i;:::-;30887:203;;:1;:203;30865:277;;;::::0;-1:-1:-1;;;30865:277:0;;13313:2:1;30865:277:0::1;::::0;::::1;13295:21:1::0;13352:2;13332:18;;;13325:30;13391:26;13371:18;;;13364:54;13435:18;;30865:277:0::1;13111:348:1::0;30865:277:0::1;31153:215;31191:5;31211:19;31245;31279:17;31311:14;31340:17;31153:23;:215::i;:::-;31384:211;::::0;-1:-1:-1;;;13666:28:1;;13719:2;13710:12;31384:211:0::1;13464:264:1::0;26693:354:0;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26825:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;26803:131:::1;;;;-1:-1:-1::0;;;26803:131:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26945:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;26945:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26999:40;;154:41:1;;;26999:40:0::1;::::0;127:18:1;26999:40:0::1;14:187:1::0;26492:193:0;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26575:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;;:36;;-1:-1:-1;;26575:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26627:50;;154:41:1;;;26627:50:0::1;::::0;127:18:1;26627:50:0::1;14:187:1::0;9287:281:0;9044:6;;-1:-1:-1;;;;;9044:6:0;8305:10;9044:22;9036:67;;;;-1:-1:-1;;;9036:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9390:22:0;::::1;9368:110;;;::::0;-1:-1:-1;;;9368:110:0;;13935:2:1;9368:110:0::1;::::0;::::1;13917:21:1::0;13974:2;13954:18;;;13947:30;14013:34;13993:18;;;13986:62;-1:-1:-1;;;14064:18:1;;;14057:36;14110:19;;9368:110:0::1;13733:402:1::0;9368:110:0::1;9515:6;::::0;;9494:38:::1;::::0;-1:-1:-1;;;;;9494:38:0;;::::1;::::0;9515:6;::::1;::::0;9494:38:::1;::::0;::::1;9543:6;:17:::0;;-1:-1:-1;;;;;;9543:17:0::1;-1:-1:-1::0;;;;;9543:17:0;;;::::1;::::0;;;::::1;::::0;;9287:281::o;3076:181::-;3134:7;;3166:5;3170:1;3166;:5;:::i;:::-;3154:17;;3195:1;3190;:6;;3182:46;;;;-1:-1:-1;;;3182:46:0;;14472:2:1;3182:46:0;;;14454:21:1;14511:2;14491:18;;;14484:30;14550:29;14530:18;;;14523:57;14597:18;;3182:46:0;14270:351:1;3182:46:0;3248:1;3076:181;-1:-1:-1;;;3076:181:0:o;13919:378::-;-1:-1:-1;;;;;14055:19:0;;14047:68;;;;-1:-1:-1;;;14047:68:0;;14828:2:1;14047:68:0;;;14810:21:1;14867:2;14847:18;;;14840:30;14906:34;14886:18;;;14879:62;-1:-1:-1;;;14957:18:1;;;14950:34;15001:19;;14047:68:0;14626:400:1;14047:68:0;-1:-1:-1;;;;;14134:21:0;;14126:68;;;;-1:-1:-1;;;14126:68:0;;15233:2:1;14126:68:0;;;15215:21:1;15272:2;15252:18;;;15245:30;15311:34;15291:18;;;15284:62;-1:-1:-1;;;15362:18:1;;;15355:32;15404:19;;14126:68:0;15031:398:1;14126:68:0;-1:-1:-1;;;;;14205:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14257:32;;1769:25:1;;;14257:32:0;;1742:18:1;14257:32:0;;;;;;;;13919:378;;;:::o;35017:3073::-;-1:-1:-1;;;;;35149:18:0;;35141:68;;;;-1:-1:-1;;;35141:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35228:16:0;;35220:64;;;;-1:-1:-1;;;35220:64:0;;;;;;;:::i;:::-;35301:6;35311:1;35301:11;35297:93;;35329:28;35345:4;35351:2;35355:1;35329:15;:28::i;35297:93::-;-1:-1:-1;;;;;35421:31:0;;;35402:16;35421:31;;;:25;:31;;;;;;;;;35481:29;;;;;;;;;35528:23;;;:17;:23;;;;;;35421:31;;;;;35481:29;;;;35528:23;35527:24;:50;;;;-1:-1:-1;;;;;;35556:21:0;;;;;;:17;:21;;;;;;;;35555:22;35527:50;35523:1263;;;35602:16;;-1:-1:-1;;;35602:16:0;;;;35594:59;;;;-1:-1:-1;;;35594:59:0;;16446:2:1;35594:59:0;;;16428:21:1;16485:2;16465:18;;;16458:30;16524:32;16504:18;;;16497:60;16574:18;;35594:59:0;16244:354:1;35594:59:0;-1:-1:-1;;;;;35690:31:0;;;;;;:25;:31;;;;;;;;:62;;;;-1:-1:-1;;;;;;35726:26:0;;;;;;:22;:26;;;;;;;;35725:27;35690:62;35668:1107;;;35827:11;;35817:6;:21;;35787:135;;;;-1:-1:-1;;;35787:135:0;;16805:2:1;35787:135:0;;;16787:21:1;16844:2;16824:18;;;16817:30;16883:34;16863:18;;;16856:62;-1:-1:-1;;;16934:18:1;;;16927:38;16982:19;;35787:135:0;16603:404:1;35787:135:0;35997:15;;35980:13;35990:2;35980:9;:13::i;:::-;35971:22;;:6;:22;:::i;:::-;:41;;35941:139;;;;-1:-1:-1;;;35941:139:0;;17214:2:1;35941:139:0;;;17196:21:1;17253:2;17233:18;;;17226:30;17292:26;17272:18;;;17265:54;17336:18;;35941:139:0;17012:348:1;35941:139:0;35668:1107;;;-1:-1:-1;;;;;36124:29:0;;;;;;:25;:29;;;;;;;;:62;;;;-1:-1:-1;;;;;;36158:28:0;;;;;;:22;:28;;;;;;;;36157:29;36124:62;36102:673;;;36261:11;;36251:6;:21;;36221:137;;;;-1:-1:-1;;;36221:137:0;;17567:2:1;36221:137:0;;;17549:21:1;17606:2;17586:18;;;17579:30;17645:34;17625:18;;;17618:62;-1:-1:-1;;;17696:18:1;;;17689:40;17746:19;;36221:137:0;17365:406:1;36221:137:0;36377:4;:9;;-1:-1:-1;;;;;;36377:9:0;-1:-1:-1;;;;;36377:9:0;;;;;36102:673;;;-1:-1:-1;;;;;36413:26:0;;;;;;:22;:26;;;;;;;;36408:367;;36516:15;;36499:13;36509:2;36499:9;:13::i;:::-;36490:22;;:6;:22;:::i;:::-;:41;;36460:138;;;;-1:-1:-1;;;36460:138:0;;17978:2:1;36460:138:0;;;17960:21:1;18017:2;17997:18;;;17990:30;18056:25;18036:18;;;18029:53;18099:18;;36460:138:0;17776:347:1;36408:367:0;36625:9;;-1:-1:-1;;;36625:9:0;;;;36624:10;:42;;;;-1:-1:-1;;;;;;36638:28:0;;;;;;:22;:28;;;;;;;;36624:42;36620:155;;;36713:11;;36699:4;;;-1:-1:-1;;;;;36699:4:0;;;36687:17;;;;:11;:17;;;;;;;;:23;;;;;;;;;;:37;;;;36755:4;36743:9;:16;;-1:-1:-1;;;;;;36743:16:0;36755:4;;;;36743:16;;;36620:155;36798:37;36811:11;36824:10;36798:12;:37::i;:::-;36848:12;36891:23;;36863:24;36881:4;36863:9;:24::i;:::-;36945:16;;-1:-1:-1;;36863:51:0;;-1:-1:-1;;;;36945:16:0;;;;:40;;;;;36978:7;36945:40;:67;;;;-1:-1:-1;37003:9:0;;-1:-1:-1;;;37003:9:0;;;;37002:10;36945:67;:113;;;;-1:-1:-1;;;;;;37029:29:0;;;;;;:25;:29;;;;;;;;36945:113;:155;;;;-1:-1:-1;;;;;;37076:24:0;;;;;;:18;:24;;;;;;;;37075:25;36945:155;:195;;;;-1:-1:-1;;;;;;37118:22:0;;;;;;:18;:22;;;;;;;;37117:23;36945:195;36927:332;;;37167:9;:16;;-1:-1:-1;;;;37167:16:0;-1:-1:-1;;;37167:16:0;;;37198:17;:15;:17::i;:::-;37230:9;:17;;-1:-1:-1;;;;37230:17:0;;;36927:332;37287:9;;37271:12;;-1:-1:-1;;;37287:9:0;;;;37286:10;:30;;;;-1:-1:-1;37300:16:0;;-1:-1:-1;;;37300:16:0;;;;37286:30;-1:-1:-1;;;;;37333:24:0;;;;;;:18;:24;;;;;;37271:45;;-1:-1:-1;37333:24:0;;;:50;;-1:-1:-1;;;;;;37361:22:0;;;;;;:18;:22;;;;;;;;37333:50;37329:98;;;-1:-1:-1;37410:5:0;37329:98;37441:7;:24;;;;-1:-1:-1;37452:9:0;;-1:-1:-1;;;37452:9:0;;;;:13;;37441:24;37437:414;;;37506:9;;37482:11;;37519:3;;37497:18;;-1:-1:-1;;;37506:9:0;;;;37497:6;:18;:::i;:::-;37496:26;;;;:::i;:::-;37568:8;;37482:40;;-1:-1:-1;37537:18:0;;37580:3;;37559:17;;37568:8;;;;;37559:6;:17;:::i;:::-;37558:25;;;;:::i;:::-;37537:46;-1:-1:-1;37607:12:0;37616:3;37607:6;:12;:::i;:::-;37598:21;;37634:41;37650:4;37664;37671:3;37634:15;:41::i;:::-;37696:14;;37692:148;;37731:38;37751:4;37758:10;37731:11;:38::i;:::-;37803:8;;37793:31;;;37803:8;;;;;;18431:36:1;;18498:2;18483:18;;18476:34;;;37793:31:0;;18404:18:1;37793:31:0;;;;;;;37692:148;37467:384;;37437:414;37861:33;37877:4;37883:2;37887:6;37861:15;:33::i;:::-;37924:15;;-1:-1:-1;;;;;37924:15:0;:26;37959:4;37966:15;37959:4;37966:9;:15::i;:::-;37924:58;;-1:-1:-1;;;;;;37924:58:0;;;;;;;-1:-1:-1;;;;;18729:32:1;;;37924:58:0;;;18711:51:1;18778:18;;;18771:34;18684:18;;37924:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37907:96;38017:15;;-1:-1:-1;;;;;38017:15:0;:26;38052:2;38057:13;38052:2;38057:9;:13::i;:::-;38017:54;;-1:-1:-1;;;;;;38017:54:0;;;;;;;-1:-1:-1;;;;;18729:32:1;;;38017:54:0;;;18711:51:1;18778:18;;;18771:34;18684:18;;38017:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38013:70;35130:2960;;;;35017:3073;;;:::o;3409:226::-;3529:7;3565:12;3557:6;;;;3549:29;;;;-1:-1:-1;;;3549:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3589:9:0;3601:5;3605:1;3601;:5;:::i;:::-;3589:17;3409:226;-1:-1:-1;;;;;3409:226:0:o;13460:451::-;-1:-1:-1;;;;;13544:21:0;;13536:67;;;;-1:-1:-1;;;13536:67:0;;19018:2:1;13536:67:0;;;19000:21:1;19057:2;19037:18;;;19030:30;19096:34;19076:18;;;19069:62;-1:-1:-1;;;19147:18:1;;;19140:31;19188:19;;13536:67:0;18816:397:1;13536:67:0;13695:105;13732:6;13695:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13695:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;13674:18:0;;;;;;:9;:18;;;;;:126;13826:12;;:24;;13843:6;13826:16;:24::i;:::-;13811:12;:39;13866:37;;1769:25:1;;;13892:1:0;;-1:-1:-1;;;;;13866:37:0;;;;;1757:2:1;1742:18;13866:37:0;;;;;;;13460:451;;:::o;41466:1856::-;41732:21;;;;:43;;;;:21;;:43;41728:322;;41797:184;;-1:-1:-1;;;19420:32:1;;19477:2;19468:12;41797:184:0;;;;;;;;41874:21;;;;41952:14;;41797:184;;41874:21;;;;;41797:184;;;;-1:-1:-1;;;;;;;;;;;41797:184:0;;;41952:14;;;41797:184;:::i;:::-;;;;;;;;41996:21;;;:42;;-1:-1:-1;;41996:42:0;;;;;;;41728:322;42064:21;;;;:43;;;;:21;;;;;:43;42060:322;;42129:184;;-1:-1:-1;;;19907:32:1;;19964:2;19955:12;42129:184:0;;;;;;;;42206:21;;;;42284:14;;42129:184;;42206:21;;;;;;;;42129:184;;;;-1:-1:-1;;;;;;;;;;;42129:184:0;;;42284:14;;;42129:184;:::i;:::-;;;;;;;;42328:21;;;:42;;-1:-1:-1;;42328:42:0;;;;;;;;;42060:322;42396:19;;;;:39;;;;-1:-1:-1;;;42396:19:0;;;;:39;42392:308;;42457:178;;-1:-1:-1;;;20180:30:1;;20235:2;20226:12;42457:178:0;;;;;;;;42532:19;;;;42606:14;;42457:178;;42532:19;-1:-1:-1;;;42532:19:0;;;;;;42457:178;;;;-1:-1:-1;;;;;;;;;;;42457:178:0;;;42606:14;;;42457:178;:::i;:::-;;;;;;;;42650:19;;;:38;;-1:-1:-1;;42650:38:0;-1:-1:-1;;;42650:38:0;;;;;;;42392:308;42714:16;;;;:33;;;;-1:-1:-1;;;42714:16:0;;;;:33;42710:287;;42769:169;;-1:-1:-1;;;20451:27:1;;20503:2;20494:12;42769:169:0;;;;;;;;42841:16;;;;42909:14;;42769:169;;42841:16;-1:-1:-1;;;42841:16:0;;;;;;42769:169;;;;-1:-1:-1;;;;;;;;;;;42769:169:0;;;42909:14;;;42769:169;:::i;:::-;;;;;;;;42953:16;;;:32;;-1:-1:-1;;42953:32:0;-1:-1:-1;;;42953:32:0;;;;;;;42710:287;43011:19;;;;:39;;;;-1:-1:-1;;;43011:19:0;;;;:39;43007:308;;43072:178;;-1:-1:-1;;;20719:30:1;;20774:2;20765:12;43072:178:0;;;;;;;;43147:19;;;;43221:14;;43072:178;;43147:19;-1:-1:-1;;;43147:19:0;;;;;;43072:178;;;;-1:-1:-1;;;;;;;;;;;43072:178:0;;;43221:14;;;43072:178;:::i;:::-;;;;;;;;43265:19;;;:38;;-1:-1:-1;;43265:38:0;-1:-1:-1;;;43265:38:0;;;;;;;43007:308;41466:1856;;;;;;:::o;39561:1897::-;39833:22;;;;:45;;;;:22;;;;;:45;39829:329;;39900:187;;-1:-1:-1;;;20990:33:1;;21048:2;21039:12;39900:187:0;;;;;;;;39978:22;;;;40058:14;;39900:187;;39978:22;;;;;;;;39900:187;;;;-1:-1:-1;;;;;;;;;;;39900:187:0;;;40058:14;;;39900:187;:::i;:::-;;;;;;;;40102:22;;;:44;;-1:-1:-1;;40102:44:0;;;;;;;;;39829:329;40172:22;;;;:45;;;;:22;;;;;:45;40168:329;;40239:187;;-1:-1:-1;;;21264:33:1;;21322:2;21313:12;40239:187:0;;;;;;;;40317:22;;;;40397:14;;40239:187;;40317:22;;;;;;;;40239:187;;;;-1:-1:-1;;;;;;;;;;;40239:187:0;;;40397:14;;;40239:187;:::i;:::-;;;;;;;;40441:22;;;:44;;-1:-1:-1;;40441:44:0;;;;;;;;;40168:329;40511:20;;;;:41;;;;-1:-1:-1;;;40511:20:0;;;;:41;40507:315;;40574:181;;-1:-1:-1;;;21538:31:1;;21594:2;21585:12;40574:181:0;;;;;;;;40650:20;;;;40726:14;;40574:181;;40650:20;-1:-1:-1;;;40650:20:0;;;;;;40574:181;;;;-1:-1:-1;;;;;;;;;;;40574:181:0;;;40726:14;;;40574:181;:::i;:::-;;;;;;;;40770:20;;;:40;;-1:-1:-1;;40770:40:0;-1:-1:-1;;;40770:40:0;;;;;;;40507:315;40836:17;;;;:35;;;;-1:-1:-1;;;40836:17:0;;;;:35;40832:294;;40893:172;;-1:-1:-1;;;21810:28:1;;21863:2;21854:12;40893:172:0;;;;;;;;40966:17;;;;41036:14;;40893:172;;40966:17;-1:-1:-1;;;40966:17:0;;;;;;40893:172;;;;-1:-1:-1;;;;;;;;;;;40893:172:0;;;41036:14;;;40893:172;:::i;:::-;;;;;;;;41080:17;;;:34;;-1:-1:-1;;41080:34:0;-1:-1:-1;;;41080:34:0;;;;;;;40832:294;41140:20;;;;:41;;;;-1:-1:-1;;;41140:20:0;;;;:41;41136:315;;41203:181;;-1:-1:-1;;;22079:31:1;;22135:2;22126:12;41203:181:0;;;;;;;;41279:20;;;;41355:14;;41203:181;;41279:20;-1:-1:-1;;;41279:20:0;;;;;;41203:181;;;;-1:-1:-1;;;;;;;;;;;41203:181:0;;;41355:14;;;41203:181;:::i;:::-;;;;;;;;41399:20;;;:40;;;;;-1:-1:-1;;;41399:40:0;-1:-1:-1;;41399:40:0;;;;;;39561:1897;;;;;;:::o;12464:606::-;-1:-1:-1;;;;;12604:20:0;;12596:70;;;;-1:-1:-1;;;12596:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12685:23:0;;12677:71;;;;-1:-1:-1;;;12677:71:0;;;;;;;:::i;:::-;12837:108;12873:6;12837:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12837:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;12817:17:0;;;;;;;:9;:17;;;;;;:128;;;;12979:20;;;;;;;:32;;13004:6;12979:24;:32::i;:::-;-1:-1:-1;;;;;12956:20:0;;;;;;;:9;:20;;;;;;;:55;;;;13027:35;;;;;;;;;;13055:6;1769:25:1;;1757:2;1742:18;;1623:177;38098:1455:0;38174:13;:17;;-1:-1:-1;;38279:15:0;;;38307:285;;;;38354:24;;38338:13;:40;;38354:24;;;;;;;;-1:-1:-1;;38393:40:0;;;;;;;38409:24;;;;;;38393:40;;;;;-1:-1:-1;;38499:30:0;-1:-1:-1;;;38462:22:0;;;;38448:36;;-1:-1:-1;;38499:30:0;;-1:-1:-1;;;38510:19:0;;;;38499:30;;;;;-1:-1:-1;;38544:36:0;-1:-1:-1;;;38558:22:0;;;;-1:-1:-1;;;38544:36:0;;;;;;;38307:285;38606:11;38602:281;;;38650:23;;38634:13;:39;;38650:23;;;;-1:-1:-1;;38688:39:0;;;;;;;38650:23;38704;;;;;;38688:39;;;;;;;;-1:-1:-1;;38792:29:0;-1:-1:-1;;;38756:21:0;;;;;38742:35;;;;-1:-1:-1;;38792:29:0;;-1:-1:-1;;;38803:18:0;;;;38792:29;;;-1:-1:-1;;38836:35:0;-1:-1:-1;;;38850:21:0;;;;;;;38836:35;;;;;;;38602:281;38898:10;38897:11;:27;;;;;38913:11;38912:12;38897:27;38893:302;;;38957:24;;38941:13;:40;;38957:24;;;;;;;;-1:-1:-1;;38996:40:0;;;;;;;39012:24;;;;;;38996:40;;;;;-1:-1:-1;;39102:30:0;-1:-1:-1;;;39065:22:0;;;;39051:36;;-1:-1:-1;;39102:30:0;;-1:-1:-1;;;39113:19:0;;;;39102:30;;;;;-1:-1:-1;;39147:36:0;-1:-1:-1;;;39161:22:0;;;;-1:-1:-1;;;39147:36:0;;;;;;;38893:302;39341:11;;;-1:-1:-1;;;39341:11:0;;;;;39317:8;;;;;;39290:11;;;;;;39232:42;;39341:11;39261:13;;;;;39232;:42;:::i;:::-;:69;;;;:::i;:::-;:93;;;;:::i;:::-;:120;;;;:::i;:::-;39207:9;:145;;-1:-1:-1;;39207:145:0;;-1:-1:-1;;;39207:145:0;;;;;;;;;;;;;39368:177;;;39394:13;;;;;;;;;;22435:34:1;;39207:145:0;39422:13;;;;22500:2:1;22485:18;;22478:43;39450:11:0;;;;;22537:18:1;;;22530:43;;;;39476:8:0;;;;;22604:2:1;22589:18;;22582:43;-1:-1:-1;;;39499:11:0;;;;22656:3:1;22641:19;;22634:44;39525:9:0;;;;;;22709:3:1;22694:19;;22687:44;39368:177:0;;22399:3:1;22384:19;39368:177:0;22149:588:1;43330:2394:0;43376:23;43402:24;43420:4;43402:9;:24::i;:::-;43519:23;;43376:50;;-1:-1:-1;43465:21:0;;43519:27;;43545:1;43519:27;:::i;:::-;43501:15;:45;43497:123;;;43581:23;;:27;;43607:1;43581:27;:::i;:::-;43563:45;;43497:123;43659:9;;43632:12;;-1:-1:-1;;;43659:9:0;;;;:13;43655:2062;;43768:9;;43689:23;;43797:1;;43768:9;-1:-1:-1;;;43768:9:0;;;;;43716:31;;43734:13;43716:15;:31;:::i;:::-;43715:62;;;;:::i;:::-;:83;;;;:::i;:::-;43891:9;;43689:109;;-1:-1:-1;43813:24:0;;43891:9;-1:-1:-1;;;43891:9:0;;;;;43841:29;;-1:-1:-1;;;43859:11:0;;;;43841:15;:29;:::i;:::-;43840:60;;;;:::i;:::-;43813:87;-1:-1:-1;43915:20:0;43974:34;43813:87;43974:15;:34;:::i;:::-;43938:71;;:15;:71;:::i;:::-;43915:94;;44026:31;44044:12;44026:17;:31::i;:::-;44074:27;44104:58;44145:17;44104:21;:58;:::i;:::-;44262:11;;44074:88;;-1:-1:-1;44177:19:0;;44262:11;-1:-1:-1;;;44262:11:0;;;;;44251:8;;;;;;44230:17;;44246:1;;44230:13;:17;:::i;:::-;44229:30;;;;:::i;:::-;:44;;;;:::i;:::-;44199:9;;:75;;;-1:-1:-1;;;44199:9:0;;;;:75;:::i;:::-;44341:13;;44177:97;;;;;-1:-1:-1;44289:26:0;;44406:1;;44177:97;;44319:35;;44341:13;44319:19;:35;:::i;:::-;44318:68;;;;:::i;:::-;:89;;;;:::i;:::-;44474:13;;44289:118;;-1:-1:-1;44422:26:0;;44508:11;;44452:35;;44474:13;;;;;44452:19;:35;:::i;:::-;44451:68;;;;:::i;:::-;44422:97;-1:-1:-1;44534:24:0;44601:39;44422:97;44601:18;:39;:::i;:::-;44561:80;;:19;:80;:::i;:::-;44680:10;;44672:53;;44534:107;;-1:-1:-1;;;;;;44680:10:0;;44534:107;;44672:53;;;;44534:107;44680:10;44672:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44762:15:0;;44754:92;;44658:67;;-1:-1:-1;;;;;;44762:15:0;;44809:18;;44754:92;;;;44809:18;44762:15;44754:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44740:106:0;;-1:-1:-1;;44867:19:0;;44863:281;;44907:50;44921:15;44938:18;44907:13;:50::i;:::-;44981:147;;;23270:25:1;;;23326:2;23311:18;;23304:34;;;23354:18;;;23347:34;;;44981:147:0;;23258:2:1;23243:18;44981:147:0;;;;;;;44863:281;45232:15;;45175:123;;-1:-1:-1;;;45175:123:0;;-1:-1:-1;;;;;45232:15:0;;;45175:123;;;18711:51:1;18778:18;;;18771:34;;;45160:12:0;;45190:4;;45175:30;;18684:18:1;;45175:123:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45160:138;;45317:7;45313:207;;;45345:15;;:104;;-1:-1:-1;;;45345:104:0;;;;;1769:25:1;;;-1:-1:-1;;;;;45345:15:0;;;;:46;;1742:18:1;;45345:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45473:31;45487:16;45473:31;;;;1769:25:1;;1757:2;1742:18;;1623:177;45473:31:0;;;;;;;;45313:207;43674:1857;;;;;;;;;27987:1660;;;:::o;43655:2062::-;45552:34;45570:15;45552:17;:34::i;:::-;45623:10;;45615:90;;-1:-1:-1;;;;;45623:10:0;;;;45665:21;;45615:90;;;;45665:21;45623:10;45615:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3265:136;3323:7;3350:43;3354:1;3357;3350:43;;;;;;;;;;;;;;;;;:3;:43::i;45732:496::-;45823:16;;;45837:1;45823:16;;;;;;;;45799:21;;45823:16;;;;;;;;;;-1:-1:-1;45823:16:0;45799:40;;45868:4;45850;45855:1;45850:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45850:23:0;;;:7;;;;;;;;;;:23;;;;45894:15;;:22;;;-1:-1:-1;;;45894:22:0;;;;:15;;;;;:20;;:22;;;;;45850:7;;45894:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45884:4;45889:1;45884:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45884:32:0;;;:7;;;;;;;;;:32;45959:15;;45927:62;;45944:4;;45959:15;45977:11;45927:8;:62::i;:::-;46000:15;;46170:9;;46000:220;;-1:-1:-1;;;46000:220:0;;-1:-1:-1;;;;;46000:15:0;;;;:66;;:220;;46081:11;;46000:15;;46151:4;;46170:9;;;46194:15;;46000:220;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46236:423;46350:15;;46318:62;;46335:4;;-1:-1:-1;;;;;46350:15:0;46368:11;46318:8;:62::i;:::-;46391:15;;46595;;46391:260;;-1:-1:-1;;;46391:260:0;;46463:4;46391:260;;;25517:34:1;25567:18;;;25560:34;;;46391:15:0;25610:18:1;;;25603:34;;;25653:18;;;25646:34;-1:-1:-1;;;;;46595:15:0;;;25696:19:1;;;25689:44;46625:15:0;25749:19:1;;;25742:35;46391:15:0;;;:31;;46430:9;;25451:19:1;;46391:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;895:315;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1215:180::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;-1:-1:-1;1366:23:1;;1215:180;-1:-1:-1;1215:180:1:o;1805:456::-;1882:6;1890;1898;1951:2;1939:9;1930:7;1926:23;1922:32;1919:52;;;1967:1;1964;1957:12;1919:52;2006:9;1993:23;2025:31;2050:5;2025:31;:::i;:::-;2075:5;-1:-1:-1;2132:2:1;2117:18;;2104:32;2145:33;2104:32;2145:33;:::i;:::-;1805:456;;2197:7;;-1:-1:-1;;;2251:2:1;2236:18;;;;2223:32;;1805:456::o;2700:247::-;2759:6;2812:2;2800:9;2791:7;2787:23;2783:32;2780:52;;;2828:1;2825;2818:12;2780:52;2867:9;2854:23;2886:31;2911:5;2886:31;:::i;3160:118::-;3246:5;3239:13;3232:21;3225:5;3222:32;3212:60;;3268:1;3265;3258:12;3283:382;3348:6;3356;3409:2;3397:9;3388:7;3384:23;3380:32;3377:52;;;3425:1;3422;3415:12;3377:52;3464:9;3451:23;3483:31;3508:5;3483:31;:::i;:::-;3533:5;-1:-1:-1;3590:2:1;3575:18;;3562:32;3603:30;3562:32;3603:30;:::i;:::-;3652:7;3642:17;;;3283:382;;;;;:::o;3670:529::-;3747:6;3755;3763;3816:2;3804:9;3795:7;3791:23;3787:32;3784:52;;;3832:1;3829;3822:12;3784:52;3871:9;3858:23;3890:31;3915:5;3890:31;:::i;:::-;3940:5;-1:-1:-1;3997:2:1;3982:18;;3969:32;4010:33;3969:32;4010:33;:::i;:::-;4062:7;-1:-1:-1;4121:2:1;4106:18;;4093:32;4134:33;4093:32;4134:33;:::i;:::-;4186:7;4176:17;;;3670:529;;;;;:::o;4204:156::-;4270:20;;4330:4;4319:16;;4309:27;;4299:55;;4350:1;4347;4340:12;4299:55;4204:156;;;:::o;4365:464::-;4450:6;4458;4466;4474;4482;4535:3;4523:9;4514:7;4510:23;4506:33;4503:53;;;4552:1;4549;4542:12;4503:53;4575:27;4592:9;4575:27;:::i;:::-;4565:37;;4621:36;4653:2;4642:9;4638:18;4621:36;:::i;:::-;4611:46;;4676:36;4708:2;4697:9;4693:18;4676:36;:::i;:::-;4666:46;;4731:36;4763:2;4752:9;4748:18;4731:36;:::i;:::-;4721:46;;4786:37;4818:3;4807:9;4803:19;4786:37;:::i;:::-;4776:47;;4365:464;;;;;;;;:::o;5337:388::-;5405:6;5413;5466:2;5454:9;5445:7;5441:23;5437:32;5434:52;;;5482:1;5479;5472:12;5434:52;5521:9;5508:23;5540:31;5565:5;5540:31;:::i;:::-;5590:5;-1:-1:-1;5647:2:1;5632:18;;5619:32;5660:33;5619:32;5660:33;:::i;5730:380::-;5809:1;5805:12;;;;5852;;;5873:61;;5927:4;5919:6;5915:17;5905:27;;5873:61;5980:2;5972:6;5969:14;5949:18;5946:38;5943:161;;6026:10;6021:3;6017:20;6014:1;6007:31;6061:4;6058:1;6051:15;6089:4;6086:1;6079:15;5943:161;;5730:380;;;:::o;6115:356::-;6317:2;6299:21;;;6336:18;;;6329:30;6395:34;6390:2;6375:18;;6368:62;6462:2;6447:18;;6115:356::o;7093:127::-;7154:10;7149:3;7145:20;7142:1;7135:31;7185:4;7182:1;7175:15;7209:4;7206:1;7199:15;7225:168;7298:9;;;7329;;7346:15;;;7340:22;;7326:37;7316:71;;7367:18;;:::i;7398:127::-;7459:10;7454:3;7450:20;7447:1;7440:31;7490:4;7487:1;7480:15;7514:4;7511:1;7504:15;7530:120;7570:1;7596;7586:35;;7601:18;;:::i;:::-;-1:-1:-1;7635:9:1;;7530:120::o;8880:184::-;8950:6;9003:2;8991:9;8982:7;8978:23;8974:32;8971:52;;;9019:1;9016;9009:12;8971:52;-1:-1:-1;9042:16:1;;8880:184;-1:-1:-1;8880:184:1:o;9374:245::-;9441:6;9494:2;9482:9;9473:7;9469:23;9465:32;9462:52;;;9510:1;9507;9500:12;9462:52;9542:9;9536:16;9561:28;9583:5;9561:28;:::i;9624:406::-;9826:2;9808:21;;;9865:2;9845:18;;;9838:30;9904:34;9899:2;9884:18;;9877:62;-1:-1:-1;;;9970:2:1;9955:18;;9948:40;10020:3;10005:19;;9624:406::o;11918:148::-;12006:4;11985:12;;;11999;;;11981:31;;12024:13;;12021:39;;;12040:18;;:::i;14140:125::-;14205:9;;;14226:10;;;14223:36;;;14239:18;;:::i;15434:401::-;15636:2;15618:21;;;15675:2;15655:18;;;15648:30;15714:34;15709:2;15694:18;;15687:62;-1:-1:-1;;;15780:2:1;15765:18;;15758:35;15825:3;15810:19;;15434:401::o;15840:399::-;16042:2;16024:21;;;16081:2;16061:18;;;16054:30;16120:34;16115:2;16100:18;;16093:62;-1:-1:-1;;;16186:2:1;16171:18;;16164:33;16229:3;16214:19;;15840:399::o;18128:128::-;18195:9;;;18216:11;;;18213:37;;;18230:18;;:::i;19491:209::-;-1:-1:-1;;19655:38:1;;;;19637:57;;19625:2;19610:18;;19491:209::o;22742:165::-;22780:1;22814:4;22811:1;22807:12;22838:3;22828:37;;22845:18;;:::i;:::-;22897:3;22890:4;22887:1;22883:12;22879:22;22874:27;;;22742:165;;;;:::o;22912:151::-;23002:4;22995:12;;;22981;;;22977:31;;23020:14;;23017:40;;;23037:18;;:::i;23803:127::-;23864:10;23859:3;23855:20;23852:1;23845:31;23895:4;23892:1;23885:15;23919:4;23916:1;23909:15;23935:251;24005:6;24058:2;24046:9;24037:7;24033:23;24029:32;24026:52;;;24074:1;24071;24064:12;24026:52;24106:9;24100:16;24125:31;24150:5;24125:31;:::i;24191:980::-;24453:4;24501:3;24490:9;24486:19;24532:6;24521:9;24514:25;24558:2;24596:6;24591:2;24580:9;24576:18;24569:34;24639:3;24634:2;24623:9;24619:18;24612:31;24663:6;24698;24692:13;24729:6;24721;24714:22;24767:3;24756:9;24752:19;24745:26;;24806:2;24798:6;24794:15;24780:29;;24827:1;24837:195;24851:6;24848:1;24845:13;24837:195;;;24916:13;;-1:-1:-1;;;;;24912:39:1;24900:52;;25007:15;;;;24972:12;;;;24948:1;24866:9;24837:195;;;-1:-1:-1;;;;;;;25088:32:1;;;;25083:2;25068:18;;25061:60;-1:-1:-1;;;25152:3:1;25137:19;25130:35;25049:3;24191:980;-1:-1:-1;;;24191:980:1:o;25788:306::-;25876:6;25884;25892;25945:2;25933:9;25924:7;25920:23;25916:32;25913:52;;;25961:1;25958;25951:12;25913:52;25990:9;25984:16;25974:26;;26040:2;26029:9;26025:18;26019:25;26009:35;;26084:2;26073:9;26069:18;26063:25;26053:35;;25788:306;;;;;:::o
Swarm Source
ipfs://41925155a55565938207680f371f30558c3d190e3f64afa3ca8822d813d51b55
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.