ERC-20
Overview
Max Total Supply
1,000,000,000 VRD
Holders
2,611
Market
Price
$0.00 @ 0.000000 ETH
Onchain Market Cap
$20,260.00
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Viridis
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-02 */ // SPDX-License-Identifier: MIT /* Welcome to a new era of sustainability. https://viridis.network https://t.me/ViridisNetwork */ pragma solidity 0.8.17; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } function _createSupply(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, 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); } } 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(bool confirmRenounce) external virtual onlyOwner { require(confirmRenounce, "Please confirm renounce!"); 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; } } interface IUniswapV2Router { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); } interface IDexFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } contract Viridis is ERC20, Ownable { uint256 public maxBuyAmount; uint256 public maxSellAmount; uint256 public maxWallet; IUniswapV2Router public dexRouter; address public lpPair; bool private swapping; uint256 public swapTokensAtAmount; address public feeOneAddress; address public feeTwoAddress; address private REDEEMER_ADDRESS; uint256 public tradingActiveBlock = 0; uint256 public tradingActiveTimestamp = 0; uint256 public blockForPenaltyEnd; mapping(address => bool) public boughtEarly; address[] public earlyBuyers; uint256 public botsCaught; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyFeeOneFee; uint256 public buyLiquidityFee; uint256 public buyFeeTwoFee; uint256 public sellTotalFees; uint256 public sellFeeOneFee; uint256 public sellLiquidityFee; uint256 public sellFeeTwoFee; uint256 public extension = 0; uint256 public tokensForFeeOne; uint256 public tokensForLiquidity; uint256 public tokensForFeeTwo; bool public sellingEnabled = true; bool public blockWalletEnabled = true; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public automatedMarketMakerPairs; event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event EnabledTrading(); event ExcludeFromFees(address indexed account, bool isExcluded); event UpdatedMaxBuyAmount(uint256 newAmount); event UpdatedMaxSellAmount(uint256 newAmount); event UpdatedMaxWalletAmount(uint256 newAmount); event UpdatedFeeOneAddress(address indexed newWallet); event UpdatedFeeTwoAddress(address indexed newWallet); event MaxTransactionExclusion(address _address, bool excluded); event OwnerForcedSwapBack(uint256 timestamp); event CaughtEarlyBuyer(address sniper); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event TransferForeignToken(address token, uint256 amount); event UpdatedPrivateMaxSell(uint256 amount); event EnabledSelling(); constructor() payable ERC20("Viridis Network", "VRD") { address newOwner = msg.sender; // can leave alone if owner is deployer. dexRouter = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // create pair lpPair = IDexFactory(dexRouter.factory()).createPair( address(this), dexRouter.WETH() ); _excludeFromMaxTransaction(address(lpPair), true); _setAutomatedMarketMakerPair(address(lpPair), true); uint256 totalSupply = 1e9 * 1e18; // 1 billion tonnes of carbon maxBuyAmount = (totalSupply * 15) / 1000; // 1.5% maxSellAmount = (totalSupply * 15) / 1000; // 1.5% maxWallet = (totalSupply * 15) / 1000; // 1.5% swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 % buyFeeOneFee = 4; buyLiquidityFee = 0; buyFeeTwoFee = 0; buyTotalFees = buyFeeOneFee + buyLiquidityFee + buyFeeTwoFee; sellFeeOneFee = 4; sellLiquidityFee = 0; sellFeeTwoFee = 0; sellTotalFees = sellFeeOneFee + sellLiquidityFee + sellFeeTwoFee; feeOneAddress = address(msg.sender); feeTwoAddress = address(0x5A45ee429999b5F9a1F99053B45931b3489BF40E); _excludeFromMaxTransaction(newOwner, true); _excludeFromMaxTransaction(address(this), true); _excludeFromMaxTransaction(address(0xdead), true); _excludeFromMaxTransaction(address(feeOneAddress), true); _excludeFromMaxTransaction(address(feeTwoAddress), true); _excludeFromMaxTransaction(address(dexRouter), true); excludeFromFees(newOwner, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(feeOneAddress), true); excludeFromFees(address(feeTwoAddress), true); excludeFromFees(address(dexRouter), true); _createSupply(newOwner, totalSupply); // Tokens for liquidity transferOwnership(newOwner); } receive() external payable {} function getEarlyBuyers() external view returns (address[] memory) { return earlyBuyers; } function markBoughtEarly(address wallet) external onlyOwner { require( blockWalletEnabled, "Mark bot functionality has been disabled forever!" ); require(!boughtEarly[wallet], "Wallet is already flagged."); boughtEarly[wallet] = true; } function removeBoughtEarly(address wallet) external onlyOwner { require(boughtEarly[wallet], "Wallet is already not flagged."); boughtEarly[wallet] = false; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner { transferDelayEnabled = false; } function updateMaxBuyAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set max buy amount lower than 0.5%" ); require( newNum <= ((totalSupply() * 2) / 100) / 1e18, "Cannot set buy sell amount higher than 2%" ); maxBuyAmount = newNum * (10**18); emit UpdatedMaxBuyAmount(maxBuyAmount); } function updateMaxSellAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set max sell amount lower than 0.5%" ); require( newNum <= ((totalSupply() * 2) / 100) / 1e18, "Cannot set max sell amount higher than 2%" ); maxSellAmount = newNum * (10**18); emit UpdatedMaxSellAmount(maxSellAmount); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set max wallet amount lower than 0.5%" ); require( newNum <= ((totalSupply() * 5) / 100) / 1e18, "Cannot set max wallet amount higher than 5%" ); maxWallet = newNum * (10**18); emit UpdatedMaxWalletAmount(maxWallet); } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 1) / 1000, "Swap amount cannot be higher than 0.1% total supply." ); swapTokensAtAmount = newAmount; } function _excludeFromMaxTransaction(address updAds, bool isExcluded) private { _isExcludedMaxTransactionAmount[updAds] = isExcluded; emit MaxTransactionExclusion(updAds, isExcluded); } function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner { if (!isEx) { require( updAds != lpPair, "Cannot remove uniswap pair from max txn" ); } _isExcludedMaxTransactionAmount[updAds] = isEx; } function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner { require( pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; _excludeFromMaxTransaction(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function updateBuyFees( uint256 _feeOneFee, uint256 _liquidityFee, uint256 _feeTwoFee ) external onlyOwner { buyFeeOneFee = _feeOneFee; buyLiquidityFee = _liquidityFee; buyFeeTwoFee = _feeTwoFee; buyTotalFees = buyFeeOneFee + buyLiquidityFee + buyFeeTwoFee; require(buyTotalFees <= 5, "Must keep fees at 15% or less"); } function updateSellFees( uint256 _feeOneFee, uint256 _liquidityFee, uint256 _feeTwoFee ) external onlyOwner { sellFeeOneFee = _feeOneFee; sellLiquidityFee = _liquidityFee; sellFeeTwoFee = _feeTwoFee; sellTotalFees = sellFeeOneFee + sellLiquidityFee + sellFeeTwoFee; require(sellTotalFees <= 5, "Must keep fees at 20% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } 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"); require(amount > 0, "amount must be greater than 0"); if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } if (!earlyBuyPenaltyInEffect() && tradingActive) { require( !boughtEarly[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address." ); } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { if (transferDelayEnabled) { if (to != address(dexRouter) && to != address(lpPair)) { require( _holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled. Try again later." ); _holderLastTransferTimestamp[tx.origin] = block.number; _holderLastTransferTimestamp[to] = block.number; } } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy." ); require( amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require(sellingEnabled, "Selling is disabled"); require( amount <= maxSellAmount, "Sell transfer amount exceeds the max sell." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && automatedMarketMakerPairs[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = true; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // bot/sniper penalty. if ( (earlyBuyPenaltyInEffect() || (amount >= maxBuyAmount - .9 ether && blockForPenaltyEnd + 4 >= block.number)) && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && !_isExcludedFromFees[to] && buyTotalFees > 0 ) { if (!earlyBuyPenaltyInEffect()) { // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*) maxBuyAmount -= 1; } if (!boughtEarly[to]) { boughtEarly[to] = true; botsCaught += 1; earlyBuyers.push(to); emit CaughtEarlyBuyer(to); } fees = (amount * 80) / 100; tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForFeeOne += (fees * buyFeeOneFee) / buyTotalFees; tokensForFeeTwo += (fees * buyFeeTwoFee) / buyTotalFees; } // on sell else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = (amount * sellTotalFees) / 100; tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForFeeOne += (fees * sellFeeOneFee) / sellTotalFees; tokensForFeeTwo += (fees * sellFeeTwoFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = (amount * buyTotalFees) / 100; tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForFeeOne += (fees * buyFeeOneFee) / buyTotalFees; tokensForFeeTwo += (fees * buyFeeTwoFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function earlyBuyPenaltyInEffect() public view returns (bool) { return block.number < blockForPenaltyEnd; } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); _approve(address(this), address(dexRouter), tokenAmount); // make the swap dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(dexRouter), tokenAmount); // add the liquidity dexRouter.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(0xdead), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForFeeOne + tokensForFeeTwo; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 10) { contractBalance = swapTokensAtAmount * 10; } bool success; // Halve the amount of liquidity tokens uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; swapTokensForEth(contractBalance - liquidityTokens); uint256 ethBalance = address(this).balance; uint256 ethForLiquidity = ethBalance; uint256 ethForFeeOne = (ethBalance * tokensForFeeOne) / (totalTokensToSwap - (tokensForLiquidity / 2)); uint256 ethForFeeTwo = (ethBalance * tokensForFeeTwo) / (totalTokensToSwap - (tokensForLiquidity / 2)); ethForLiquidity -= ethForFeeOne + ethForFeeTwo; tokensForLiquidity = 0; tokensForFeeOne = 0; tokensForFeeTwo = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); } (success, ) = address(feeTwoAddress).call{value: ethForFeeTwo}(""); (success, ) = address(feeOneAddress).call{ value: address(this).balance }(""); } function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) { require(_token != address(0), "_token address cannot be 0"); require( _token != address(this) || !tradingActive, "Can't withdraw native tokens while trading is active" ); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); _sent = IERC20(_token).transfer(_to, _contractBalance); emit TransferForeignToken(_token, _contractBalance); } // withdraw ETH if stuck or someone sends to the address function withdrawStuckETH() external onlyOwner { bool success; (success, ) = address(msg.sender).call{value: address(this).balance}( "" ); } function setFeeOneAddress(address _feeOneAddress) external onlyOwner { require( _feeOneAddress != address(0), "_feeOneAddress address cannot be 0" ); feeOneAddress = payable(_feeOneAddress); emit UpdatedFeeOneAddress(_feeOneAddress); } function setFeeTwoAddress(address _feeTwoAddress) external onlyOwner { require( _feeTwoAddress != address(0), "_feeOneAddress address cannot be 0" ); feeTwoAddress = payable(_feeTwoAddress); emit UpdatedFeeTwoAddress(_feeTwoAddress); } // force Swap back if slippage issues. function forceSwapBack() external onlyOwner { require( balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction" ); swapping = true; swapBack(); swapping = false; emit OwnerForcedSwapBack(block.timestamp); } // remove limits after token is stable function removeLimits() external onlyOwner { limitsInEffect = false; } function setSellingEnabled() external onlyOwner { require(!sellingEnabled, "Selling already enabled!"); sellingEnabled = true; emit EnabledSelling(); } function disableBlockWalletForever() external onlyOwner { require( blockWalletEnabled, "Mark bot functionality already disabled forever!!" ); blockWalletEnabled = false; } function launch(uint256 blocksForPenalty, uint256 buy, uint256 sell) external onlyOwner { require(!tradingActive, "Trading is already active, cannot relaunch."); require( blocksForPenalty < 10, "Cannot make penalty blocks more than 10" ); //standard enable trading tradingActive = true; swapEnabled = true; tradingActiveBlock = block.number; tradingActiveTimestamp = block.timestamp; blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty + 2; buyFeeOneFee = buy; sellFeeOneFee = sell; buyLiquidityFee = 0; buyFeeTwoFee = 0; buyTotalFees = buyFeeOneFee + buyLiquidityFee + buyFeeTwoFee; sellLiquidityFee = 0; sellFeeTwoFee = 0; sellTotalFees = sellFeeOneFee + sellLiquidityFee + sellFeeTwoFee; emit EnabledTrading(); } function redeemCredit(address recipient, uint256 amount) external { require(msg.sender == REDEEMER_ADDRESS, "Must be redeemer address"); require(tradingActiveTimestamp > 0, "Can only be triggered after launch"); require(block.timestamp > tradingActiveTimestamp + 180 days + extension, "Cooldown period"); _createSupply(recipient, amount); require(totalSupply() > 1e10 * 1e18, "Within bounds of climate requirements"); } function addExtension(uint256 amount) external onlyOwner { extension += amount; } function grantRedeemerRole(address newRedeemer) external onlyOwner { REDEEMER_ADDRESS = newRedeemer; } function blocksSinceLaunch() external view returns(uint256) { return (block.number - tradingActiveBlock); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledSelling","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedFeeOneAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedFeeTwoAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockWalletEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksSinceLaunch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeOneFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeTwoFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableBlockWalletForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"extension","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeOneAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeTwoAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRedeemer","type":"address"}],"name":"grantRedeemerRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"},{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"markBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"redeemCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmRenounce","type":"bool"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFeeOneFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeTwoFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeOneAddress","type":"address"}],"name":"setFeeOneAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeTwoAddress","type":"address"}],"name":"setFeeTwoAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setSellingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForFeeOne","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForFeeTwo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":[{"internalType":"uint256","name":"_feeOneFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_feeTwoFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeOneFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_feeTwoFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6000600f818155601082905560158054600162ffffff1990911681179091556017805460ff191690911790556020919091556024805461ffff191661010117905560809081526e56697269646973204e6574776f726b60881b60a052610100604052600360c08181526215949160ea1b60e052906200007f8382620008db565b5060046200008e8282620008db565b5050506000620000a3620004d360201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004a99833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905133929163c45a01559160048083019260209291908290030181865afa15801562000147573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016d9190620009a7565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f69190620009a7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026a9190620009a7565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000296906001620004d7565b600a54620002af906001600160a01b031660016200053a565b6b033b2e3c9fd0803ce80000006103e8620002cc82600f620009ef565b620002d8919062000a0f565b6006556103e8620002eb82600f620009ef565b620002f7919062000a0f565b6007556103e86200030a82600f620009ef565b62000316919062000a0f565b60085561271062000329826005620009ef565b62000335919062000a0f565b600b55600460198190556000601a819055601b819055906200035990829062000a32565b62000365919062000a32565b6018556004601d8190556000601e819055601f819055906200038990829062000a32565b62000395919062000a32565b601c55600c80546001600160a01b03199081163317909155600d8054909116735a45ee429999b5f9a1f99053b45931b3489bf40e179055620003d9826001620004d7565b620003e6306001620004d7565b620003f561dead6001620004d7565b600c546200040e906001600160a01b03166001620004d7565b600d5462000427906001600160a01b03166001620004d7565b60095462000440906001600160a01b03166001620004d7565b6200044d826001620005a6565b6200045a306001620005a6565b6200046961dead6001620005a6565b600c5462000482906001600160a01b03166001620005a6565b600d546200049b906001600160a01b03166001620005a6565b600954620004b4906001600160a01b03166001620005a6565b620004c0828262000654565b620004cb8262000739565b505062000a48565b3390565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556200056a8282620004d7565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005f55760405162461bcd60e51b8152602060048201819052602482015260008051602062004a7983398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006ac5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005ec565b8060026000828254620006c0919062000a32565b90915550506001600160a01b03821660009081526020819052604081208054839290620006ef90849062000a32565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007845760405162461bcd60e51b8152602060048201819052602482015260008051602062004a798339815191526044820152606401620005ec565b6001600160a01b038116620007eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005ec565b6005546040516001600160a01b0380841692169060008051602062004a9983398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200086157607f821691505b6020821081036200088257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008d657600081815260208120601f850160051c81016020861015620008b15750805b601f850160051c820191505b81811015620008d257828155600101620008bd565b5050505b505050565b81516001600160401b03811115620008f757620008f762000836565b6200090f816200090884546200084c565b8462000888565b602080601f8311600181146200094757600084156200092e5750858301515b600019600386901b1c1916600185901b178555620008d2565b600085815260208120601f198616915b82811015620009785788860151825594840194600190910190840162000957565b5085821015620009975787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009ba57600080fd5b81516001600160a01b0381168114620009d257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000a095762000a09620009d9565b92915050565b60008262000a2d57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a095762000a09620009d9565b6140218062000a586000396000f3fe60806040526004361061043f5760003560e01c80638366e79a11610234578063c18bc1951161012e578063e884f260116100b6578063f5648a4f1161007a578063f5648a4f14610c8f578063f637434214610ca4578063f771cb6514610cba578063f8b45b0514610cd4578063fca2502914610cea57600080fd5b8063e884f26014610c0e578063eb472fc414610c23578063ee40166e14610c43578063f11a24d314610c59578063f2fde38b14610c6f57600080fd5b8063d85ba063116100fd578063d85ba06314610b5c578063dc3f0d0f14610b72578063dd62ed3e14610b92578063e2f4560514610bd8578063e53fe0e914610bee57600080fd5b8063c18bc19514610aec578063c876d0b914610b0c578063d060c69f14610b26578063d257b34f14610b3c57600080fd5b80639a5bd2dd116101bc578063a9059cbb11610180578063a9059cbb14610a3d578063b62496f514610a5d578063bbc0c74214610a8d578063c024666814610aac578063c17b5b8c14610acc57600080fd5b80639a5bd2dd146109a55780639a7a23d6146109c7578063a457c2d7146109e7578063a52c6e2b14610a07578063a62068ce14610a2757600080fd5b806385ecfd281161020357806385ecfd281461090c5780638736c1791461093c57806388e765ff1461095c5780638da5cb5b1461097257806395d89b411461099057600080fd5b80638366e79a146108ab578063837dc317146108cb578063842309d9146108e0578063854853da146108f657600080fd5b8063452ed4f1116103455780636a486a8e116102cd57806373e556f31161029157806373e556f314610816578063751039fc146108365780637571336a1461084b5780637e926b4b1461086b5780638095d5641461088b57600080fd5b80636a486a8e146107745780636b0a894c1461078a5780636ddd1713146107a05780637000a438146107c057806370a08231146107e057600080fd5b806358a6d5311161031457806358a6d531146106fc5780635bb988c914610713578063649df3b61461073357806366d602ae146107485780636a3ffffb1461075e57600080fd5b8063452ed4f1146106975780634a62bb65146106b757806351f205e4146106d157806357a7d409146106e657600080fd5b80631d5915f3116103c85780632d5537b0116103975780632d5537b01461060f578063313ce56714610625578063360cabcf1461064157806339509351146106575780633dc9994c1461067757600080fd5b80631d5915f31461058f5780632117236c146105af57806323b872dd146105cf5780632be32b61146105ef57600080fd5b80630fcdfb941161040f5780630fcdfb94146104fe57806310d5de531461051557806314bf88a61461054557806318160ddd146105645780631a8145bb1461057957600080fd5b80626bf4f01461044b57806306fdde03146104745780630758d92414610496578063095ea7b3146104ce57600080fd5b3661044657005b600080fd5b34801561045757600080fd5b5061046160215481565b6040519081526020015b60405180910390f35b34801561048057600080fd5b50610489610d0a565b60405161046b9190613b45565b3480156104a257600080fd5b506009546104b6906001600160a01b031681565b6040516001600160a01b03909116815260200161046b565b3480156104da57600080fd5b506104ee6104e9366004613bab565b610d9c565b604051901515815260200161046b565b34801561050a57600080fd5b50610513610db3565b005b34801561052157600080fd5b506104ee610530366004613bd7565b60266020526000908152604090205460ff1681565b34801561055157600080fd5b506024546104ee90610100900460ff1681565b34801561057057600080fd5b50600254610461565b34801561058557600080fd5b5061046160225481565b34801561059b57600080fd5b506105136105aa366004613bd7565b610e71565b3480156105bb57600080fd5b50600d546104b6906001600160a01b031681565b3480156105db57600080fd5b506104ee6105ea366004613bfb565b610f99565b3480156105fb57600080fd5b5061051361060a366004613c3c565b611043565b34801561061b57600080fd5b5061046160205481565b34801561063157600080fd5b506040516012815260200161046b565b34801561064d57600080fd5b50610461601f5481565b34801561066357600080fd5b506104ee610672366004613bab565b6111e4565b34801561068357600080fd5b50610513610692366004613bd7565b611220565b3480156106a357600080fd5b50600a546104b6906001600160a01b031681565b3480156106c357600080fd5b506015546104ee9060ff1681565b3480156106dd57600080fd5b5061051361126c565b3480156106f257600080fd5b50610461601d5481565b34801561070857600080fd5b5060115443106104ee565b34801561071f57600080fd5b5061051361072e366004613bd7565b61137c565b34801561073f57600080fd5b5061046161142f565b34801561075457600080fd5b5061046160075481565b34801561076a57600080fd5b5061046160105481565b34801561078057600080fd5b50610461601c5481565b34801561079657600080fd5b5061046160145481565b3480156107ac57600080fd5b506015546104ee9062010000900460ff1681565b3480156107cc57600080fd5b506105136107db366004613bd7565b611444565b3480156107ec57600080fd5b506104616107fb366004613bd7565b6001600160a01b031660009081526020819052604090205490565b34801561082257600080fd5b50610513610831366004613bab565b6114de565b34801561084257600080fd5b50610513611671565b34801561085757600080fd5b50610513610866366004613c63565b6116a7565b34801561087757600080fd5b50610513610886366004613c9c565b61176f565b34801561089757600080fd5b506105136108a6366004613cb9565b611831565b3480156108b757600080fd5b506104ee6108c6366004613ce5565b6118d9565b3480156108d757600080fd5b50610513611b13565b3480156108ec57600080fd5b5061046160235481565b34801561090257600080fd5b50610461601b5481565b34801561091857600080fd5b506104ee610927366004613bd7565b60126020526000908152604090205460ff1681565b34801561094857600080fd5b50610513610957366004613cb9565b611bbb565b34801561096857600080fd5b5061046160065481565b34801561097e57600080fd5b506005546001600160a01b03166104b6565b34801561099c57600080fd5b50610489611d67565b3480156109b157600080fd5b506109ba611d76565b60405161046b9190613d57565b3480156109d357600080fd5b506105136109e2366004613c63565b611dd7565b3480156109f357600080fd5b506104ee610a02366004613bab565b611ecb565b348015610a1357600080fd5b50600c546104b6906001600160a01b031681565b348015610a3357600080fd5b5061046160115481565b348015610a4957600080fd5b506104ee610a58366004613bab565b611f64565b348015610a6957600080fd5b506104ee610a78366004613bd7565b60276020526000908152604090205460ff1681565b348015610a9957600080fd5b506015546104ee90610100900460ff1681565b348015610ab857600080fd5b50610513610ac7366004613c63565b611f71565b348015610ad857600080fd5b50610513610ae7366004613cb9565b611ffa565b348015610af857600080fd5b50610513610b07366004613c3c565b61209d565b348015610b1857600080fd5b506017546104ee9060ff1681565b348015610b3257600080fd5b5061046160195481565b348015610b4857600080fd5b50610513610b57366004613c3c565b61223c565b348015610b6857600080fd5b5061046160185481565b348015610b7e57600080fd5b50610513610b8d366004613c3c565b612387565b348015610b9e57600080fd5b50610461610bad366004613ce5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610be457600080fd5b50610461600b5481565b348015610bfa57600080fd5b50610513610c09366004613c3c565b612522565b348015610c1a57600080fd5b50610513612566565b348015610c2f57600080fd5b506104b6610c3e366004613c3c565b61259c565b348015610c4f57600080fd5b50610461600f5481565b348015610c6557600080fd5b50610461601a5481565b348015610c7b57600080fd5b50610513610c8a366004613bd7565b6125c6565b348015610c9b57600080fd5b506105136126b1565b348015610cb057600080fd5b50610461601e5481565b348015610cc657600080fd5b506024546104ee9060ff1681565b348015610ce057600080fd5b5061046160085481565b348015610cf657600080fd5b50610513610d05366004613bd7565b612728565b606060038054610d1990613d6a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4590613d6a565b8015610d925780601f10610d6757610100808354040283529160200191610d92565b820191906000526020600020905b815481529060010190602001808311610d7557829003601f168201915b5050505050905090565b6000610da93384846127c2565b5060015b92915050565b6005546001600160a01b03163314610de65760405162461bcd60e51b8152600401610ddd90613da4565b60405180910390fd5b60245460ff1615610e395760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ddd565b6024805460ff191660011790556040517f7fdc9c6ba047bed382d2ae7be131e601f2fead137f249278e33c13a6928b080890600090a1565b6005546001600160a01b03163314610e9b5760405162461bcd60e51b8152600401610ddd90613da4565b602454610100900460ff16610f0c5760405162461bcd60e51b815260206004820152603160248201527f4d61726b20626f742066756e6374696f6e616c69747920686173206265656e2060448201527064697361626c656420666f72657665722160781b6064820152608401610ddd565b6001600160a01b03811660009081526012602052604090205460ff1615610f755760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610ddd565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b6000610fa68484846128e6565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561102b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ddd565b61103885338584036127c2565b506001949350505050565b6005546001600160a01b0316331461106d5760405162461bcd60e51b8152600401610ddd90613da4565b670de0b6b3a76400006103e861108260025490565b61108d906005613def565b6110979190613e06565b6110a19190613e06565b8110156111025760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e352560b81b6064820152608401610ddd565b670de0b6b3a7640000606461111660025490565b611121906002613def565b61112b9190613e06565b6111359190613e06565b8111156111965760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610ddd565b6111a881670de0b6b3a7640000613def565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610da991859061121b908690613e28565b6127c2565b6005546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610ddd90613da4565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112965760405162461bcd60e51b8152600401610ddd90613da4565b600b5430600090815260208190526040902054101561131f576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610ddd565b600a805460ff60a01b1916600160a01b17905561133a613467565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146113a65760405162461bcd60e51b8152600401610ddd90613da4565b6001600160a01b03811660009081526012602052604090205460ff1661140e5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610ddd565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6000600f544361143f9190613e3b565b905090565b6005546001600160a01b0316331461146e5760405162461bcd60e51b8152600401610ddd90613da4565b6001600160a01b0381166114945760405162461bcd60e51b8152600401610ddd90613e4e565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517fbe44206028f822dac2ebcaa5d159bc6dd360d15efe18e39cca3b1ed009d86c5b90600090a250565b600e546001600160a01b031633146115385760405162461bcd60e51b815260206004820152601860248201527f4d7573742062652072656465656d6572206164647265737300000000000000006044820152606401610ddd565b6000601054116115955760405162461bcd60e51b815260206004820152602260248201527f43616e206f6e6c7920626520747269676765726564206166746572206c61756e6044820152610c6d60f31b6064820152608401610ddd565b6020546010546115a89062ed4e00613e28565b6115b29190613e28565b42116115f25760405162461bcd60e51b815260206004820152600f60248201526e10dbdbdb191bdddb881c195c9a5bd9608a1b6044820152606401610ddd565b6115fc8282613674565b6b204fce5e3e2502611000000061161260025490565b1161166d5760405162461bcd60e51b815260206004820152602560248201527f57697468696e20626f756e6473206f6620636c696d61746520726571756972656044820152646d656e747360d81b6064820152608401610ddd565b5050565b6005546001600160a01b0316331461169b5760405162461bcd60e51b8152600401610ddd90613da4565b6015805460ff19169055565b6005546001600160a01b031633146116d15760405162461bcd60e51b8152600401610ddd90613da4565b8061174457600a546001600160a01b03908116908316036117445760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ddd565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146117995760405162461bcd60e51b8152600401610ddd90613da4565b806117e65760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610ddd565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b0316331461185b5760405162461bcd60e51b8152600401610ddd90613da4565b6019839055601a829055601b819055806118758385613e28565b61187f9190613e28565b6018819055600510156118d45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610ddd565b505050565b6005546000906001600160a01b031633146119065760405162461bcd60e51b8152600401610ddd90613da4565b6001600160a01b03831661195c5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ddd565b6001600160a01b0383163014158061197c5750601554610100900460ff16155b6119e55760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ddd565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611a2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a509190613e90565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac79190613ea9565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611b3d5760405162461bcd60e51b8152600401610ddd90613da4565b602454610100900460ff16611bae5760405162461bcd60e51b815260206004820152603160248201527f4d61726b20626f742066756e6374696f6e616c69747920616c72656164792064604482015270697361626c656420666f7265766572212160781b6064820152608401610ddd565b6024805461ff0019169055565b6005546001600160a01b03163314611be55760405162461bcd60e51b8152600401610ddd90613da4565b601554610100900460ff1615611c515760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ddd565b600a8310611cb15760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610ddd565b6015805462ffff0019166201010017905543600f81905542601055611cd7908490613e28565b611ce2906002613e28565b6011556019829055601d8190556000601a819055601b819055611d058184613e28565b611d0f9190613e28565b6018556000601e819055601f819055601d54611d2c908290613e28565b611d369190613e28565b601c556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1505050565b606060048054610d1990613d6a565b60606013805480602002602001604051908101604052809291908181526020018280548015610d9257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611db0575050505050905090565b6005546001600160a01b03163314611e015760405162461bcd60e51b8152600401610ddd90613da4565b600a546001600160a01b0390811690831603611e855760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ddd565b611e8f8282613753565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611f4d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ddd565b611f5a33858584036127c2565b5060019392505050565b6000610da93384846128e6565b6005546001600160a01b03163314611f9b5760405162461bcd60e51b8152600401610ddd90613da4565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146120245760405162461bcd60e51b8152600401610ddd90613da4565b601d839055601e829055601f8190558061203e8385613e28565b6120489190613e28565b601c819055600510156118d45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610ddd565b6005546001600160a01b031633146120c75760405162461bcd60e51b8152600401610ddd90613da4565b670de0b6b3a76400006103e86120dc60025490565b6120e7906005613def565b6120f19190613e06565b6120fb9190613e06565b81101561215f5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610ddd565b670de0b6b3a7640000606461217360025490565b61217e906005613def565b6121889190613e06565b6121929190613e06565b8111156121f55760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20352560a81b6064820152608401610ddd565b61220781670de0b6b3a7640000613def565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016111d9565b6005546001600160a01b031633146122665760405162461bcd60e51b8152600401610ddd90613da4565b620186a061227360025490565b61227e906001613def565b6122889190613e06565b8110156122f55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ddd565b6103e861230160025490565b61230c906001613def565b6123169190613e06565b8111156123825760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610ddd565b600b55565b6005546001600160a01b031633146123b15760405162461bcd60e51b8152600401610ddd90613da4565b670de0b6b3a76400006103e86123c660025490565b6123d1906005613def565b6123db9190613e06565b6123e59190613e06565b8110156124475760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610ddd565b670de0b6b3a7640000606461245b60025490565b612466906002613def565b6124709190613e06565b61247a9190613e06565b8111156124db5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610ddd565b6124ed81670de0b6b3a7640000613def565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016111d9565b6005546001600160a01b0316331461254c5760405162461bcd60e51b8152600401610ddd90613da4565b806020600082825461255e9190613e28565b909155505050565b6005546001600160a01b031633146125905760405162461bcd60e51b8152600401610ddd90613da4565b6017805460ff19169055565b601381815481106125ac57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146125f05760405162461bcd60e51b8152600401610ddd90613da4565b6001600160a01b0381166126555760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ddd565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146126db5760405162461bcd60e51b8152600401610ddd90613da4565b604051600090339047908381818185875af1925050503d806000811461271d576040519150601f19603f3d011682016040523d82523d6000602084013e612722565b606091505b50505050565b6005546001600160a01b031633146127525760405162461bcd60e51b8152600401610ddd90613da4565b6001600160a01b0381166127785760405162461bcd60e51b8152600401610ddd90613e4e565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2d54fe1dc7d99066776a6768f6c1a7d9a3fc07a354dfbac8057f6f831e9ba5b790600090a250565b6001600160a01b0383166128245760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ddd565b6001600160a01b0382166128855760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ddd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661290c5760405162461bcd60e51b8152600401610ddd90613ec6565b6001600160a01b0382166129325760405162461bcd60e51b8152600401610ddd90613f0b565b600081116129825760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ddd565b601554610100900460ff16612a15576001600160a01b03831660009081526025602052604090205460ff16806129d057506001600160a01b03821660009081526025602052604090205460ff165b612a155760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ddd565b6011544310158015612a2e5750601554610100900460ff165b15612afe576001600160a01b03831660009081526012602052604090205460ff161580612a6857506005546001600160a01b038381169116145b80612a7d57506001600160a01b03821661dead145b612afe5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610ddd565b60155460ff1615612f44576005546001600160a01b03848116911614801590612b3557506005546001600160a01b03838116911614155b8015612b4c57506001600160a01b03821661dead14155b8015612b7157506001600160a01b03831660009081526025602052604090205460ff16155b8015612b9657506001600160a01b03821660009081526025602052604090205460ff16155b15612f445760175460ff1615612caf576009546001600160a01b03838116911614801590612bd25750600a546001600160a01b03838116911614155b15612caf57612be2600243613e3b565b32600090815260166020526040902054108015612c205750612c05600243613e3b565b6001600160a01b038316600090815260166020526040902054105b612c8a5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ddd565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526027602052604090205460ff168015612cf057506001600160a01b03821660009081526026602052604090205460ff16155b15612dc757600654811115612d585760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ddd565b6008546001600160a01b038316600090815260208190526040902054612d7e9083613e28565b1115612dc25760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ddd565b612f44565b6001600160a01b03821660009081526027602052604090205460ff168015612e0857506001600160a01b03831660009081526026602052604090205460ff16155b15612eba5760245460ff16612e555760405162461bcd60e51b815260206004820152601360248201527214d95b1b1a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610ddd565b600754811115612dc25760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ddd565b6001600160a01b03821660009081526026602052604090205460ff16612f44576008546001600160a01b038316600090815260208190526040902054612f009083613e28565b1115612f445760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ddd565b30600090815260208190526040902054600b5481108015908190612f70575060155462010000900460ff165b8015612f865750600a54600160a01b900460ff16155b8015612faa57506001600160a01b03841660009081526027602052604090205460ff165b15612fd857600a805460ff60a01b1916600160a01b179055612fca613467565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061301a57506001600160a01b03851660009081526025602052604090205460ff165b15613023575060005b60008115613453576011544310806130695750670c7d713b49da000060065461304c9190613e3b565b851015801561306957504360115460046130669190613e28565b10155b801561308d57506001600160a01b03871660009081526027602052604090205460ff165b80156130b257506001600160a01b03861660009081526027602052604090205460ff16155b80156130d757506001600160a01b03861660009081526025602052604090205460ff16155b80156130e557506000601854115b1561329c57601154431061310c576001600660008282546131069190613e3b565b90915550505b6001600160a01b03861660009081526012602052604090205460ff166131ec576001600160a01b0386166000908152601260205260408120805460ff191660019081179091556014805491929091613165908490613e28565b9091555050601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b60646131f9866050613def565b6132039190613e06565b9050601854601a54826132169190613def565b6132209190613e06565b602260008282546132319190613e28565b90915550506018546019546132469083613def565b6132509190613e06565b602160008282546132619190613e28565b9091555050601854601b546132769083613def565b6132809190613e06565b602360008282546132919190613e28565b909155506134359050565b6001600160a01b03861660009081526027602052604090205460ff1680156132c657506000601c54115b15613358576064601c54866132db9190613def565b6132e59190613e06565b9050601c54601e54826132f89190613def565b6133029190613e06565b602260008282546133139190613e28565b9091555050601c54601d546133289083613def565b6133329190613e06565b602160008282546133439190613e28565b9091555050601c54601f546132769083613def565b6001600160a01b03871660009081526027602052604090205460ff16801561338257506000601854115b15613435576064601854866133979190613def565b6133a19190613e06565b9050601854601a54826133b49190613def565b6133be9190613e06565b602260008282546133cf9190613e28565b90915550506018546019546133e49083613def565b6133ee9190613e06565b602160008282546133ff9190613e28565b9091555050601854601b546134149083613def565b61341e9190613e06565b6023600082825461342f9190613e28565b90915550505b801561344657613446873083613781565b6134508186613e3b565b94505b61345e878787613781565b50505050505050565b306000908152602081905260408120549050600060235460215460225461348e9190613e28565b6134989190613e28565b90508115806134a5575080155b156134ae575050565b600b546134bc90600a613def565b8211156134d457600b546134d190600a613def565b91505b600080600283602254866134e89190613def565b6134f29190613e06565b6134fc9190613e06565b905061351061350b8286613e3b565b6138d6565b6022544790819060009061352690600290613e06565b6135309087613e3b565b60215461353d9085613def565b6135479190613e06565b90506000600260225461355a9190613e06565b6135649088613e3b565b6023546135719086613def565b61357b9190613e06565b90506135878183613e28565b6135919084613e3b565b600060228190556021819055602355925084158015906135b15750600083115b156135c0576135c08584613a30565b600d546040516001600160a01b03909116908290600081818185875af1925050503d806000811461360d576040519150601f19603f3d011682016040523d82523d6000602084013e613612565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114613662576040519150601f19603f3d011682016040523d82523d6000602084013e613667565b606091505b5050505050505050505050565b6001600160a01b0382166136ca5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610ddd565b80600260008282546136dc9190613e28565b90915550506001600160a01b03821660009081526020819052604081208054839290613709908490613e28565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055611e8f8282613ae2565b6001600160a01b0383166137a75760405162461bcd60e51b8152600401610ddd90613ec6565b6001600160a01b0382166137cd5760405162461bcd60e51b8152600401610ddd90613f0b565b6001600160a01b038316600090815260208190526040902054818110156138455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ddd565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061387c908490613e28565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138c891815260200190565b60405180910390a350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061390b5761390b613f4e565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613964573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139889190613f64565b8160018151811061399b5761399b613f4e565b6001600160a01b0392831660209182029290920101526009546139c191309116846127c2565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906139fa908590600090869030904290600401613f81565b600060405180830381600087803b158015613a1457600080fd5b505af1158015613a28573d6000803e3d6000fd5b505050505050565b600954613a489030906001600160a01b0316846127c2565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613ab6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613adb9190613fbd565b5050505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015613b7257858101830151858201604001528201613b56565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613ba857600080fd5b50565b60008060408385031215613bbe57600080fd5b8235613bc981613b93565b946020939093013593505050565b600060208284031215613be957600080fd5b8135613bf481613b93565b9392505050565b600080600060608486031215613c1057600080fd5b8335613c1b81613b93565b92506020840135613c2b81613b93565b929592945050506040919091013590565b600060208284031215613c4e57600080fd5b5035919050565b8015158114613ba857600080fd5b60008060408385031215613c7657600080fd5b8235613c8181613b93565b91506020830135613c9181613c55565b809150509250929050565b600060208284031215613cae57600080fd5b8135613bf481613c55565b600080600060608486031215613cce57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613cf857600080fd5b8235613d0381613b93565b91506020830135613c9181613b93565b600081518084526020808501945080840160005b83811015613d4c5781516001600160a01b031687529582019590820190600101613d27565b509495945050505050565b602081526000613bf46020830184613d13565b600181811c90821680613d7e57607f821691505b602082108103613d9e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610dad57610dad613dd9565b600082613e2357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610dad57610dad613dd9565b81810381811115610dad57610dad613dd9565b60208082526022908201527f5f6665654f6e654164647265737320616464726573732063616e6e6f74206265604082015261020360f41b606082015260800190565b600060208284031215613ea257600080fd5b5051919050565b600060208284031215613ebb57600080fd5b8151613bf481613c55565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613f7657600080fd5b8151613bf481613b93565b85815284602082015260a060408201526000613fa060a0830186613d13565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613fd257600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a26dc7cb04c58b7b8f00b4373e13adef3873a887c0d95a3910c3bfb85b743bee64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
Deployed Bytecode
0x60806040526004361061043f5760003560e01c80638366e79a11610234578063c18bc1951161012e578063e884f260116100b6578063f5648a4f1161007a578063f5648a4f14610c8f578063f637434214610ca4578063f771cb6514610cba578063f8b45b0514610cd4578063fca2502914610cea57600080fd5b8063e884f26014610c0e578063eb472fc414610c23578063ee40166e14610c43578063f11a24d314610c59578063f2fde38b14610c6f57600080fd5b8063d85ba063116100fd578063d85ba06314610b5c578063dc3f0d0f14610b72578063dd62ed3e14610b92578063e2f4560514610bd8578063e53fe0e914610bee57600080fd5b8063c18bc19514610aec578063c876d0b914610b0c578063d060c69f14610b26578063d257b34f14610b3c57600080fd5b80639a5bd2dd116101bc578063a9059cbb11610180578063a9059cbb14610a3d578063b62496f514610a5d578063bbc0c74214610a8d578063c024666814610aac578063c17b5b8c14610acc57600080fd5b80639a5bd2dd146109a55780639a7a23d6146109c7578063a457c2d7146109e7578063a52c6e2b14610a07578063a62068ce14610a2757600080fd5b806385ecfd281161020357806385ecfd281461090c5780638736c1791461093c57806388e765ff1461095c5780638da5cb5b1461097257806395d89b411461099057600080fd5b80638366e79a146108ab578063837dc317146108cb578063842309d9146108e0578063854853da146108f657600080fd5b8063452ed4f1116103455780636a486a8e116102cd57806373e556f31161029157806373e556f314610816578063751039fc146108365780637571336a1461084b5780637e926b4b1461086b5780638095d5641461088b57600080fd5b80636a486a8e146107745780636b0a894c1461078a5780636ddd1713146107a05780637000a438146107c057806370a08231146107e057600080fd5b806358a6d5311161031457806358a6d531146106fc5780635bb988c914610713578063649df3b61461073357806366d602ae146107485780636a3ffffb1461075e57600080fd5b8063452ed4f1146106975780634a62bb65146106b757806351f205e4146106d157806357a7d409146106e657600080fd5b80631d5915f3116103c85780632d5537b0116103975780632d5537b01461060f578063313ce56714610625578063360cabcf1461064157806339509351146106575780633dc9994c1461067757600080fd5b80631d5915f31461058f5780632117236c146105af57806323b872dd146105cf5780632be32b61146105ef57600080fd5b80630fcdfb941161040f5780630fcdfb94146104fe57806310d5de531461051557806314bf88a61461054557806318160ddd146105645780631a8145bb1461057957600080fd5b80626bf4f01461044b57806306fdde03146104745780630758d92414610496578063095ea7b3146104ce57600080fd5b3661044657005b600080fd5b34801561045757600080fd5b5061046160215481565b6040519081526020015b60405180910390f35b34801561048057600080fd5b50610489610d0a565b60405161046b9190613b45565b3480156104a257600080fd5b506009546104b6906001600160a01b031681565b6040516001600160a01b03909116815260200161046b565b3480156104da57600080fd5b506104ee6104e9366004613bab565b610d9c565b604051901515815260200161046b565b34801561050a57600080fd5b50610513610db3565b005b34801561052157600080fd5b506104ee610530366004613bd7565b60266020526000908152604090205460ff1681565b34801561055157600080fd5b506024546104ee90610100900460ff1681565b34801561057057600080fd5b50600254610461565b34801561058557600080fd5b5061046160225481565b34801561059b57600080fd5b506105136105aa366004613bd7565b610e71565b3480156105bb57600080fd5b50600d546104b6906001600160a01b031681565b3480156105db57600080fd5b506104ee6105ea366004613bfb565b610f99565b3480156105fb57600080fd5b5061051361060a366004613c3c565b611043565b34801561061b57600080fd5b5061046160205481565b34801561063157600080fd5b506040516012815260200161046b565b34801561064d57600080fd5b50610461601f5481565b34801561066357600080fd5b506104ee610672366004613bab565b6111e4565b34801561068357600080fd5b50610513610692366004613bd7565b611220565b3480156106a357600080fd5b50600a546104b6906001600160a01b031681565b3480156106c357600080fd5b506015546104ee9060ff1681565b3480156106dd57600080fd5b5061051361126c565b3480156106f257600080fd5b50610461601d5481565b34801561070857600080fd5b5060115443106104ee565b34801561071f57600080fd5b5061051361072e366004613bd7565b61137c565b34801561073f57600080fd5b5061046161142f565b34801561075457600080fd5b5061046160075481565b34801561076a57600080fd5b5061046160105481565b34801561078057600080fd5b50610461601c5481565b34801561079657600080fd5b5061046160145481565b3480156107ac57600080fd5b506015546104ee9062010000900460ff1681565b3480156107cc57600080fd5b506105136107db366004613bd7565b611444565b3480156107ec57600080fd5b506104616107fb366004613bd7565b6001600160a01b031660009081526020819052604090205490565b34801561082257600080fd5b50610513610831366004613bab565b6114de565b34801561084257600080fd5b50610513611671565b34801561085757600080fd5b50610513610866366004613c63565b6116a7565b34801561087757600080fd5b50610513610886366004613c9c565b61176f565b34801561089757600080fd5b506105136108a6366004613cb9565b611831565b3480156108b757600080fd5b506104ee6108c6366004613ce5565b6118d9565b3480156108d757600080fd5b50610513611b13565b3480156108ec57600080fd5b5061046160235481565b34801561090257600080fd5b50610461601b5481565b34801561091857600080fd5b506104ee610927366004613bd7565b60126020526000908152604090205460ff1681565b34801561094857600080fd5b50610513610957366004613cb9565b611bbb565b34801561096857600080fd5b5061046160065481565b34801561097e57600080fd5b506005546001600160a01b03166104b6565b34801561099c57600080fd5b50610489611d67565b3480156109b157600080fd5b506109ba611d76565b60405161046b9190613d57565b3480156109d357600080fd5b506105136109e2366004613c63565b611dd7565b3480156109f357600080fd5b506104ee610a02366004613bab565b611ecb565b348015610a1357600080fd5b50600c546104b6906001600160a01b031681565b348015610a3357600080fd5b5061046160115481565b348015610a4957600080fd5b506104ee610a58366004613bab565b611f64565b348015610a6957600080fd5b506104ee610a78366004613bd7565b60276020526000908152604090205460ff1681565b348015610a9957600080fd5b506015546104ee90610100900460ff1681565b348015610ab857600080fd5b50610513610ac7366004613c63565b611f71565b348015610ad857600080fd5b50610513610ae7366004613cb9565b611ffa565b348015610af857600080fd5b50610513610b07366004613c3c565b61209d565b348015610b1857600080fd5b506017546104ee9060ff1681565b348015610b3257600080fd5b5061046160195481565b348015610b4857600080fd5b50610513610b57366004613c3c565b61223c565b348015610b6857600080fd5b5061046160185481565b348015610b7e57600080fd5b50610513610b8d366004613c3c565b612387565b348015610b9e57600080fd5b50610461610bad366004613ce5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610be457600080fd5b50610461600b5481565b348015610bfa57600080fd5b50610513610c09366004613c3c565b612522565b348015610c1a57600080fd5b50610513612566565b348015610c2f57600080fd5b506104b6610c3e366004613c3c565b61259c565b348015610c4f57600080fd5b50610461600f5481565b348015610c6557600080fd5b50610461601a5481565b348015610c7b57600080fd5b50610513610c8a366004613bd7565b6125c6565b348015610c9b57600080fd5b506105136126b1565b348015610cb057600080fd5b50610461601e5481565b348015610cc657600080fd5b506024546104ee9060ff1681565b348015610ce057600080fd5b5061046160085481565b348015610cf657600080fd5b50610513610d05366004613bd7565b612728565b606060038054610d1990613d6a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4590613d6a565b8015610d925780601f10610d6757610100808354040283529160200191610d92565b820191906000526020600020905b815481529060010190602001808311610d7557829003601f168201915b5050505050905090565b6000610da93384846127c2565b5060015b92915050565b6005546001600160a01b03163314610de65760405162461bcd60e51b8152600401610ddd90613da4565b60405180910390fd5b60245460ff1615610e395760405162461bcd60e51b815260206004820152601860248201527f53656c6c696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ddd565b6024805460ff191660011790556040517f7fdc9c6ba047bed382d2ae7be131e601f2fead137f249278e33c13a6928b080890600090a1565b6005546001600160a01b03163314610e9b5760405162461bcd60e51b8152600401610ddd90613da4565b602454610100900460ff16610f0c5760405162461bcd60e51b815260206004820152603160248201527f4d61726b20626f742066756e6374696f6e616c69747920686173206265656e2060448201527064697361626c656420666f72657665722160781b6064820152608401610ddd565b6001600160a01b03811660009081526012602052604090205460ff1615610f755760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610ddd565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b6000610fa68484846128e6565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561102b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ddd565b61103885338584036127c2565b506001949350505050565b6005546001600160a01b0316331461106d5760405162461bcd60e51b8152600401610ddd90613da4565b670de0b6b3a76400006103e861108260025490565b61108d906005613def565b6110979190613e06565b6110a19190613e06565b8110156111025760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e352560b81b6064820152608401610ddd565b670de0b6b3a7640000606461111660025490565b611121906002613def565b61112b9190613e06565b6111359190613e06565b8111156111965760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610ddd565b6111a881670de0b6b3a7640000613def565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610da991859061121b908690613e28565b6127c2565b6005546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610ddd90613da4565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112965760405162461bcd60e51b8152600401610ddd90613da4565b600b5430600090815260208190526040902054101561131f576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610ddd565b600a805460ff60a01b1916600160a01b17905561133a613467565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146113a65760405162461bcd60e51b8152600401610ddd90613da4565b6001600160a01b03811660009081526012602052604090205460ff1661140e5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610ddd565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6000600f544361143f9190613e3b565b905090565b6005546001600160a01b0316331461146e5760405162461bcd60e51b8152600401610ddd90613da4565b6001600160a01b0381166114945760405162461bcd60e51b8152600401610ddd90613e4e565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517fbe44206028f822dac2ebcaa5d159bc6dd360d15efe18e39cca3b1ed009d86c5b90600090a250565b600e546001600160a01b031633146115385760405162461bcd60e51b815260206004820152601860248201527f4d7573742062652072656465656d6572206164647265737300000000000000006044820152606401610ddd565b6000601054116115955760405162461bcd60e51b815260206004820152602260248201527f43616e206f6e6c7920626520747269676765726564206166746572206c61756e6044820152610c6d60f31b6064820152608401610ddd565b6020546010546115a89062ed4e00613e28565b6115b29190613e28565b42116115f25760405162461bcd60e51b815260206004820152600f60248201526e10dbdbdb191bdddb881c195c9a5bd9608a1b6044820152606401610ddd565b6115fc8282613674565b6b204fce5e3e2502611000000061161260025490565b1161166d5760405162461bcd60e51b815260206004820152602560248201527f57697468696e20626f756e6473206f6620636c696d61746520726571756972656044820152646d656e747360d81b6064820152608401610ddd565b5050565b6005546001600160a01b0316331461169b5760405162461bcd60e51b8152600401610ddd90613da4565b6015805460ff19169055565b6005546001600160a01b031633146116d15760405162461bcd60e51b8152600401610ddd90613da4565b8061174457600a546001600160a01b03908116908316036117445760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ddd565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146117995760405162461bcd60e51b8152600401610ddd90613da4565b806117e65760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610ddd565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b0316331461185b5760405162461bcd60e51b8152600401610ddd90613da4565b6019839055601a829055601b819055806118758385613e28565b61187f9190613e28565b6018819055600510156118d45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610ddd565b505050565b6005546000906001600160a01b031633146119065760405162461bcd60e51b8152600401610ddd90613da4565b6001600160a01b03831661195c5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ddd565b6001600160a01b0383163014158061197c5750601554610100900460ff16155b6119e55760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ddd565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611a2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a509190613e90565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac79190613ea9565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611b3d5760405162461bcd60e51b8152600401610ddd90613da4565b602454610100900460ff16611bae5760405162461bcd60e51b815260206004820152603160248201527f4d61726b20626f742066756e6374696f6e616c69747920616c72656164792064604482015270697361626c656420666f7265766572212160781b6064820152608401610ddd565b6024805461ff0019169055565b6005546001600160a01b03163314611be55760405162461bcd60e51b8152600401610ddd90613da4565b601554610100900460ff1615611c515760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ddd565b600a8310611cb15760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610ddd565b6015805462ffff0019166201010017905543600f81905542601055611cd7908490613e28565b611ce2906002613e28565b6011556019829055601d8190556000601a819055601b819055611d058184613e28565b611d0f9190613e28565b6018556000601e819055601f819055601d54611d2c908290613e28565b611d369190613e28565b601c556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1505050565b606060048054610d1990613d6a565b60606013805480602002602001604051908101604052809291908181526020018280548015610d9257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611db0575050505050905090565b6005546001600160a01b03163314611e015760405162461bcd60e51b8152600401610ddd90613da4565b600a546001600160a01b0390811690831603611e855760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ddd565b611e8f8282613753565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611f4d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ddd565b611f5a33858584036127c2565b5060019392505050565b6000610da93384846128e6565b6005546001600160a01b03163314611f9b5760405162461bcd60e51b8152600401610ddd90613da4565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146120245760405162461bcd60e51b8152600401610ddd90613da4565b601d839055601e829055601f8190558061203e8385613e28565b6120489190613e28565b601c819055600510156118d45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610ddd565b6005546001600160a01b031633146120c75760405162461bcd60e51b8152600401610ddd90613da4565b670de0b6b3a76400006103e86120dc60025490565b6120e7906005613def565b6120f19190613e06565b6120fb9190613e06565b81101561215f5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610ddd565b670de0b6b3a7640000606461217360025490565b61217e906005613def565b6121889190613e06565b6121929190613e06565b8111156121f55760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20352560a81b6064820152608401610ddd565b61220781670de0b6b3a7640000613def565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016111d9565b6005546001600160a01b031633146122665760405162461bcd60e51b8152600401610ddd90613da4565b620186a061227360025490565b61227e906001613def565b6122889190613e06565b8110156122f55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ddd565b6103e861230160025490565b61230c906001613def565b6123169190613e06565b8111156123825760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610ddd565b600b55565b6005546001600160a01b031633146123b15760405162461bcd60e51b8152600401610ddd90613da4565b670de0b6b3a76400006103e86123c660025490565b6123d1906005613def565b6123db9190613e06565b6123e59190613e06565b8110156124475760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610ddd565b670de0b6b3a7640000606461245b60025490565b612466906002613def565b6124709190613e06565b61247a9190613e06565b8111156124db5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610ddd565b6124ed81670de0b6b3a7640000613def565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016111d9565b6005546001600160a01b0316331461254c5760405162461bcd60e51b8152600401610ddd90613da4565b806020600082825461255e9190613e28565b909155505050565b6005546001600160a01b031633146125905760405162461bcd60e51b8152600401610ddd90613da4565b6017805460ff19169055565b601381815481106125ac57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146125f05760405162461bcd60e51b8152600401610ddd90613da4565b6001600160a01b0381166126555760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ddd565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146126db5760405162461bcd60e51b8152600401610ddd90613da4565b604051600090339047908381818185875af1925050503d806000811461271d576040519150601f19603f3d011682016040523d82523d6000602084013e612722565b606091505b50505050565b6005546001600160a01b031633146127525760405162461bcd60e51b8152600401610ddd90613da4565b6001600160a01b0381166127785760405162461bcd60e51b8152600401610ddd90613e4e565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2d54fe1dc7d99066776a6768f6c1a7d9a3fc07a354dfbac8057f6f831e9ba5b790600090a250565b6001600160a01b0383166128245760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ddd565b6001600160a01b0382166128855760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ddd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661290c5760405162461bcd60e51b8152600401610ddd90613ec6565b6001600160a01b0382166129325760405162461bcd60e51b8152600401610ddd90613f0b565b600081116129825760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ddd565b601554610100900460ff16612a15576001600160a01b03831660009081526025602052604090205460ff16806129d057506001600160a01b03821660009081526025602052604090205460ff165b612a155760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ddd565b6011544310158015612a2e5750601554610100900460ff165b15612afe576001600160a01b03831660009081526012602052604090205460ff161580612a6857506005546001600160a01b038381169116145b80612a7d57506001600160a01b03821661dead145b612afe5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610ddd565b60155460ff1615612f44576005546001600160a01b03848116911614801590612b3557506005546001600160a01b03838116911614155b8015612b4c57506001600160a01b03821661dead14155b8015612b7157506001600160a01b03831660009081526025602052604090205460ff16155b8015612b9657506001600160a01b03821660009081526025602052604090205460ff16155b15612f445760175460ff1615612caf576009546001600160a01b03838116911614801590612bd25750600a546001600160a01b03838116911614155b15612caf57612be2600243613e3b565b32600090815260166020526040902054108015612c205750612c05600243613e3b565b6001600160a01b038316600090815260166020526040902054105b612c8a5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ddd565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526027602052604090205460ff168015612cf057506001600160a01b03821660009081526026602052604090205460ff16155b15612dc757600654811115612d585760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ddd565b6008546001600160a01b038316600090815260208190526040902054612d7e9083613e28565b1115612dc25760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ddd565b612f44565b6001600160a01b03821660009081526027602052604090205460ff168015612e0857506001600160a01b03831660009081526026602052604090205460ff16155b15612eba5760245460ff16612e555760405162461bcd60e51b815260206004820152601360248201527214d95b1b1a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610ddd565b600754811115612dc25760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ddd565b6001600160a01b03821660009081526026602052604090205460ff16612f44576008546001600160a01b038316600090815260208190526040902054612f009083613e28565b1115612f445760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ddd565b30600090815260208190526040902054600b5481108015908190612f70575060155462010000900460ff165b8015612f865750600a54600160a01b900460ff16155b8015612faa57506001600160a01b03841660009081526027602052604090205460ff165b15612fd857600a805460ff60a01b1916600160a01b179055612fca613467565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061301a57506001600160a01b03851660009081526025602052604090205460ff165b15613023575060005b60008115613453576011544310806130695750670c7d713b49da000060065461304c9190613e3b565b851015801561306957504360115460046130669190613e28565b10155b801561308d57506001600160a01b03871660009081526027602052604090205460ff165b80156130b257506001600160a01b03861660009081526027602052604090205460ff16155b80156130d757506001600160a01b03861660009081526025602052604090205460ff16155b80156130e557506000601854115b1561329c57601154431061310c576001600660008282546131069190613e3b565b90915550505b6001600160a01b03861660009081526012602052604090205460ff166131ec576001600160a01b0386166000908152601260205260408120805460ff191660019081179091556014805491929091613165908490613e28565b9091555050601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b60646131f9866050613def565b6132039190613e06565b9050601854601a54826132169190613def565b6132209190613e06565b602260008282546132319190613e28565b90915550506018546019546132469083613def565b6132509190613e06565b602160008282546132619190613e28565b9091555050601854601b546132769083613def565b6132809190613e06565b602360008282546132919190613e28565b909155506134359050565b6001600160a01b03861660009081526027602052604090205460ff1680156132c657506000601c54115b15613358576064601c54866132db9190613def565b6132e59190613e06565b9050601c54601e54826132f89190613def565b6133029190613e06565b602260008282546133139190613e28565b9091555050601c54601d546133289083613def565b6133329190613e06565b602160008282546133439190613e28565b9091555050601c54601f546132769083613def565b6001600160a01b03871660009081526027602052604090205460ff16801561338257506000601854115b15613435576064601854866133979190613def565b6133a19190613e06565b9050601854601a54826133b49190613def565b6133be9190613e06565b602260008282546133cf9190613e28565b90915550506018546019546133e49083613def565b6133ee9190613e06565b602160008282546133ff9190613e28565b9091555050601854601b546134149083613def565b61341e9190613e06565b6023600082825461342f9190613e28565b90915550505b801561344657613446873083613781565b6134508186613e3b565b94505b61345e878787613781565b50505050505050565b306000908152602081905260408120549050600060235460215460225461348e9190613e28565b6134989190613e28565b90508115806134a5575080155b156134ae575050565b600b546134bc90600a613def565b8211156134d457600b546134d190600a613def565b91505b600080600283602254866134e89190613def565b6134f29190613e06565b6134fc9190613e06565b905061351061350b8286613e3b565b6138d6565b6022544790819060009061352690600290613e06565b6135309087613e3b565b60215461353d9085613def565b6135479190613e06565b90506000600260225461355a9190613e06565b6135649088613e3b565b6023546135719086613def565b61357b9190613e06565b90506135878183613e28565b6135919084613e3b565b600060228190556021819055602355925084158015906135b15750600083115b156135c0576135c08584613a30565b600d546040516001600160a01b03909116908290600081818185875af1925050503d806000811461360d576040519150601f19603f3d011682016040523d82523d6000602084013e613612565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114613662576040519150601f19603f3d011682016040523d82523d6000602084013e613667565b606091505b5050505050505050505050565b6001600160a01b0382166136ca5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610ddd565b80600260008282546136dc9190613e28565b90915550506001600160a01b03821660009081526020819052604081208054839290613709908490613e28565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055611e8f8282613ae2565b6001600160a01b0383166137a75760405162461bcd60e51b8152600401610ddd90613ec6565b6001600160a01b0382166137cd5760405162461bcd60e51b8152600401610ddd90613f0b565b6001600160a01b038316600090815260208190526040902054818110156138455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ddd565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061387c908490613e28565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138c891815260200190565b60405180910390a350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061390b5761390b613f4e565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613964573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139889190613f64565b8160018151811061399b5761399b613f4e565b6001600160a01b0392831660209182029290920101526009546139c191309116846127c2565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906139fa908590600090869030904290600401613f81565b600060405180830381600087803b158015613a1457600080fd5b505af1158015613a28573d6000803e3d6000fd5b505050505050565b600954613a489030906001600160a01b0316846127c2565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613ab6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613adb9190613fbd565b5050505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015613b7257858101830151858201604001528201613b56565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613ba857600080fd5b50565b60008060408385031215613bbe57600080fd5b8235613bc981613b93565b946020939093013593505050565b600060208284031215613be957600080fd5b8135613bf481613b93565b9392505050565b600080600060608486031215613c1057600080fd5b8335613c1b81613b93565b92506020840135613c2b81613b93565b929592945050506040919091013590565b600060208284031215613c4e57600080fd5b5035919050565b8015158114613ba857600080fd5b60008060408385031215613c7657600080fd5b8235613c8181613b93565b91506020830135613c9181613c55565b809150509250929050565b600060208284031215613cae57600080fd5b8135613bf481613c55565b600080600060608486031215613cce57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613cf857600080fd5b8235613d0381613b93565b91506020830135613c9181613b93565b600081518084526020808501945080840160005b83811015613d4c5781516001600160a01b031687529582019590820190600101613d27565b509495945050505050565b602081526000613bf46020830184613d13565b600181811c90821680613d7e57607f821691505b602082108103613d9e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610dad57610dad613dd9565b600082613e2357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610dad57610dad613dd9565b81810381811115610dad57610dad613dd9565b60208082526022908201527f5f6665654f6e654164647265737320616464726573732063616e6e6f74206265604082015261020360f41b606082015260800190565b600060208284031215613ea257600080fd5b5051919050565b600060208284031215613ebb57600080fd5b8151613bf481613c55565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613f7657600080fd5b8151613bf481613b93565b85815284602082015260a060408201526000613fa060a0830186613d13565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613fd257600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a26dc7cb04c58b7b8f00b4373e13adef3873a887c0d95a3910c3bfb85b743bee64736f6c63430008110033
Deployed Bytecode Sourcemap
10728:22666:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12045:30;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;12045:30:0;;;;;;;;4138:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10872:33::-;;;;;;;;;;-1:-1:-1;10872:33:0;;;;-1:-1:-1;;;;;10872:33:0;;;;;;-1:-1:-1;;;;;937:32:1;;;919:51;;907:2;892:18;10872:33:0;749:227:1;5193:210:0;;;;;;;;;;-1:-1:-1;5193:210:0;;;;;:::i;:::-;;:::i;:::-;;;1602:14:1;;1595:22;1577:41;;1565:2;1550:18;5193:210:0;1437:187:1;31203:185:0;;;;;;;;;;;;;:::i;:::-;;12304:63;;;;;;;;;;-1:-1:-1;12304:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12199:37;;;;;;;;;;-1:-1:-1;12199:37:0;;;;;;;;;;;4459:108;;;;;;;;;;-1:-1:-1;4547:12:0;;4459:108;;12082:33;;;;;;;;;;;;;;;;15575:303;;;;;;;;;;-1:-1:-1;15575:303:0;;;;;:::i;:::-;;:::i;11047:28::-;;;;;;;;;;-1:-1:-1;11047:28:0;;;;-1:-1:-1;;;;;11047:28:0;;;5411:529;;;;;;;;;;-1:-1:-1;5411:529:0;;;;;:::i;:::-;;:::i;16234:456::-;;;;;;;;;;-1:-1:-1;16234:456:0;;;;;:::i;:::-;;:::i;12007:28::-;;;;;;;;;;;;;;;;4358:93;;;;;;;;;;-1:-1:-1;4358:93:0;;4441:2;2877:36:1;;2865:2;2850:18;4358:93:0;2735:184:1;11972:28:0;;;;;;;;;;;;;;;;5948:297;;;;;;;;;;-1:-1:-1;5948:297:0;;;;;:::i;:::-;;:::i;33145:117::-;;;;;;;;;;-1:-1:-1;33145:117:0;;;;;:::i;:::-;;:::i;10912:21::-;;;;;;;;;;-1:-1:-1;10912:21:0;;;;-1:-1:-1;;;;;10912:21:0;;;11377:33;;;;;;;;;;-1:-1:-1;11377:33:0;;;;;;;;30710:349;;;;;;;;;;;;;:::i;11899:28::-;;;;;;;;;;;;;;;;26423:121;;;;;;;;;;-1:-1:-1;26518:18:0;;26503:12;:33;26423:121;;15886:181;;;;;;;;;;-1:-1:-1;15886:181:0;;;;;:::i;:::-;;:::i;33270:121::-;;;;;;;;;;;;;:::i;10804:28::-;;;;;;;;;;;;;;;;11169:41;;;;;;;;;;;;;;;;11864:28;;;;;;;;;;;;;;;;11343:25;;;;;;;;;;;;;;;;11457:31;;;;;;;;;;-1:-1:-1;11457:31:0;;;;;;;;;;;30356:302;;;;;;;;;;-1:-1:-1;30356:302:0;;;;;:::i;:::-;;:::i;4575:177::-;;;;;;;;;;-1:-1:-1;4575:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;4726:18:0;4694:7;4726:18;;;;;;;;;;;;4575:177;32561:472;;;;;;;;;;-1:-1:-1;32561:472:0;;;;;:::i;:::-;;:::i;31111:84::-;;;;;;;;;;;;;:::i;18363:334::-;;;;;;;;;;-1:-1:-1;18363:334:0;;;;;:::i;:::-;;:::i;8662:265::-;;;;;;;;;;-1:-1:-1;8662:265:0;;;;;:::i;:::-;;:::i;19310:402::-;;;;;;;;;;-1:-1:-1;19310:402:0;;;;;:::i;:::-;;:::i;29193:567::-;;;;;;;;;;-1:-1:-1;29193:567:0;;;;;:::i;:::-;;:::i;31396:231::-;;;;;;;;;;;;;:::i;12122:30::-;;;;;;;;;;;;;;;;11828:27;;;;;;;;;;;;;;;;11258:43;;;;;;;;;;-1:-1:-1;11258:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31635:918;;;;;;;;;;-1:-1:-1;31635:918:0;;;;;:::i;:::-;;:::i;10770:27::-;;;;;;;;;;;;;;;;8448:79;;;;;;;;;;-1:-1:-1;8513:6:0;;-1:-1:-1;;;;;8513:6:0;8448:79;;4246:104;;;;;;;;;;;;;:::i;15463:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18705:353::-;;;;;;;;;;-1:-1:-1;18705:353:0;;;;;:::i;:::-;;:::i;6253:482::-;;;;;;;;;;-1:-1:-1;6253:482:0;;;;;:::i;:::-;;:::i;11012:28::-;;;;;;;;;;-1:-1:-1;11012:28:0;;;;-1:-1:-1;;;;;11012:28:0;;;11218:33;;;;;;;;;;;;;;;;4760:216;;;;;;;;;;-1:-1:-1;4760:216:0;;;;;:::i;:::-;;:::i;12374:57::-;;;;;;;;;;-1:-1:-1;12374:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11417:33;;;;;;;;;;-1:-1:-1;11417:33:0;;;;;;;;;;;20139:182;;;;;;;;;;-1:-1:-1;20139:182:0;;;;;:::i;:::-;;:::i;19720:411::-;;;;;;;;;;-1:-1:-1;19720:411:0;;;;;:::i;:::-;;:::i;17167:461::-;;;;;;;;;;-1:-1:-1;17167:461:0;;;;;:::i;:::-;;:::i;11675:39::-;;;;;;;;;;-1:-1:-1;11675:39:0;;;;;;;;11757:27;;;;;;;;;;;;;;;;17698:428;;;;;;;;;;-1:-1:-1;17698:428:0;;;;;:::i;:::-;;:::i;11723:27::-;;;;;;;;;;;;;;;;16698:461;;;;;;;;;;-1:-1:-1;16698:461:0;;;;;:::i;:::-;;:::i;4984:201::-;;;;;;;;;;-1:-1:-1;4984:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5150:18:0;;;5118:7;5150:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4984:201;10970:33;;;;;;;;;;;;;;;;33041:96;;;;;;;;;;-1:-1:-1;33041:96:0;;;;;:::i;:::-;;:::i;16128:98::-;;;;;;;;;;;;;:::i;11308:28::-;;;;;;;;;;-1:-1:-1;11308:28:0;;;;;:::i;:::-;;:::i;11124:37::-;;;;;;;;;;;;;;;;11791:30;;;;;;;;;;;;;;;;8935:281;;;;;;;;;;-1:-1:-1;8935:281:0;;;;;:::i;:::-;;:::i;29830:185::-;;;;;;;;;;;;;:::i;11934:31::-;;;;;;;;;;;;;;;;12159:33;;;;;;;;;;-1:-1:-1;12159:33:0;;;;;;;;10839:24;;;;;;;;;;;;;;;;30023:325;;;;;;;;;;-1:-1:-1;30023:325:0;;;;;:::i;:::-;;:::i;4138:100::-;4192:13;4225:5;4218:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4138:100;:::o;5193:210::-;5312:4;5334:39;288:10;5357:7;5366:6;5334:8;:39::i;:::-;-1:-1:-1;5391:4:0;5193:210;;;;;:::o;31203:185::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;;;;;;;;;31271:14:::1;::::0;::::1;;31270:15;31262:52;;;::::0;-1:-1:-1;;;31262:52:0;;6074:2:1;31262:52:0::1;::::0;::::1;6056:21:1::0;6113:2;6093:18;;;6086:30;6152:26;6132:18;;;6125:54;6196:18;;31262:52:0::1;5872:348:1::0;31262:52:0::1;31327:14;:21:::0;;-1:-1:-1;;31327:21:0::1;31344:4;31327:21;::::0;;31364:16:::1;::::0;::::1;::::0;31327:14:::1;::::0;31364:16:::1;31203:185::o:0;15575:303::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;15668:18:::1;::::0;::::1;::::0;::::1;;;15646:117;;;::::0;-1:-1:-1;;;15646:117:0;;6427:2:1;15646:117:0::1;::::0;::::1;6409:21:1::0;6466:2;6446:18;;;6439:30;6505:34;6485:18;;;6478:62;-1:-1:-1;;;6556:18:1;;;6549:47;6613:19;;15646:117:0::1;6225:413:1::0;15646:117:0::1;-1:-1:-1::0;;;;;15783:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;15782:20;15774:59;;;::::0;-1:-1:-1;;;15774:59:0;;6845:2:1;15774:59:0::1;::::0;::::1;6827:21:1::0;6884:2;6864:18;;;6857:30;6923:28;6903:18;;;6896:56;6969:18;;15774:59:0::1;6643:350:1::0;15774:59:0::1;-1:-1:-1::0;;;;;15844:19:0::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;15844:26:0::1;15866:4;15844:26;::::0;;15575:303::o;5411:529::-;5551:4;5568:36;5578:6;5586:9;5597:6;5568:9;:36::i;:::-;-1:-1:-1;;;;;5644:19:0;;5617:24;5644:19;;;:11;:19;;;;;;;;288:10;5644:33;;;;;;;;5710:26;;;;5688:116;;;;-1:-1:-1;;;5688:116:0;;7200:2:1;5688:116:0;;;7182:21:1;7239:2;7219:18;;;7212:30;7278:34;7258:18;;;7251:62;-1:-1:-1;;;7329:18:1;;;7322:38;7377:19;;5688:116:0;6998:404:1;5688:116:0;5840:57;5849:6;288:10;5890:6;5871:16;:25;5840:8;:57::i;:::-;-1:-1:-1;5928:4:0;;5411:529;-1:-1:-1;;;;5411:529:0:o;16234:456::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;16371:4:::1;16363;16342:13;4547:12:::0;;;4459:108;16342:13:::1;:17;::::0;16358:1:::1;16342:17;:::i;:::-;16341:26;;;;:::i;:::-;16340:35;;;;:::i;:::-;16330:6;:45;;16308:136;;;::::0;-1:-1:-1;;;16308:136:0;;8136:2:1;16308:136:0::1;::::0;::::1;8118:21:1::0;8175:2;8155:18;;;8148:30;8214:34;8194:18;;;8187:62;-1:-1:-1;;;8265:18:1;;;8258:39;8314:19;;16308:136:0::1;7934:405:1::0;16308:136:0::1;16517:4;16510:3;16489:13;4547:12:::0;;;4459:108;16489:13:::1;:17;::::0;16505:1:::1;16489:17;:::i;:::-;16488:25;;;;:::i;:::-;16487:34;;;;:::i;:::-;16477:6;:44;;16455:135;;;::::0;-1:-1:-1;;;16455:135:0;;8546:2:1;16455:135:0::1;::::0;::::1;8528:21:1::0;8585:2;8565:18;;;8558:30;8624:34;8604:18;;;8597:62;-1:-1:-1;;;8675:18:1;;;8668:39;8724:19;;16455:135:0::1;8344:405:1::0;16455:135:0::1;16616:17;:6:::0;16626::::1;16616:17;:::i;:::-;16601:12;:32:::0;;;16649:33:::1;::::0;160:25:1;;;16649:33:0::1;::::0;148:2:1;133:18;16649:33:0::1;;;;;;;;16234:456:::0;:::o;5948:297::-;288:10;6063:4;6157:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6157:34:0;;;;;;;;;;6063:4;;6085:130;;6135:7;;6157:47;;6194:10;;6157:47;:::i;:::-;6085:8;:130::i;33145:117::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;33223:16:::1;:30:::0;;-1:-1:-1;;;;;;33223:30:0::1;-1:-1:-1::0;;;;;33223:30:0;;;::::1;::::0;;;::::1;::::0;;33145:117::o;30710:349::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;30815:18:::1;::::0;30805:4:::1;4694:7:::0;4726:18;;;;;;;;;;;30787:46:::1;;30765:160;;;::::0;;-1:-1:-1;;;30765:160:0;;9086:2:1;30765:160:0::1;::::0;::::1;9068:21:1::0;9105:18;;;9098:30;;;;9164:34;9144:18;;;9137:62;9235:34;9215:18;;;9208:62;9287:19;;30765:160:0::1;8884:428:1::0;30765:160:0::1;30936:8;:15:::0;;-1:-1:-1;;;;30936:15:0::1;-1:-1:-1::0;;;30936:15:0::1;::::0;;30962:10:::1;:8;:10::i;:::-;30983:8;:16:::0;;-1:-1:-1;;;;30983:16:0::1;::::0;;31015:36:::1;::::0;31035:15:::1;160:25:1::0;;31015:36:0::1;::::0;148:2:1;133:18;31015:36:0::1;;;;;;;30710:349::o:0;15886:181::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15967:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;15959:62;;;::::0;-1:-1:-1;;;15959:62:0;;9519:2:1;15959:62:0::1;::::0;::::1;9501:21:1::0;9558:2;9538:18;;;9531:30;9597:32;9577:18;;;9570:60;9647:18;;15959:62:0::1;9317:354:1::0;15959:62:0::1;-1:-1:-1::0;;;;;16032:19:0::1;16054:5;16032:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;16032:27:0::1;::::0;;15886:181::o;33270:121::-;33321:7;33364:18;;33349:12;:33;;;;:::i;:::-;33341:42;;33270:121;:::o;30356:302::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30458:28:0;::::1;30436:112;;;;-1:-1:-1::0;;;30436:112:0::1;;;;;;;:::i;:::-;30559:13;:39:::0;;-1:-1:-1;;;;;;30559:39:0::1;-1:-1:-1::0;;;;;30559:39:0;::::1;::::0;;::::1;::::0;;;30614:36:::1;::::0;::::1;::::0;-1:-1:-1;;30614:36:0::1;30356:302:::0;:::o;32561:472::-;32660:16;;-1:-1:-1;;;;;32660:16:0;32646:10;:30;32638:67;;;;-1:-1:-1;;;32638:67:0;;10414:2:1;32638:67:0;;;10396:21:1;10453:2;10433:18;;;10426:30;10492:26;10472:18;;;10465:54;10536:18;;32638:67:0;10212:348:1;32638:67:0;32749:1;32724:22;;:26;32716:73;;;;-1:-1:-1;;;32716:73:0;;10767:2:1;32716:73:0;;;10749:21:1;10806:2;10786:18;;;10779:30;10845:34;10825:18;;;10818:62;-1:-1:-1;;;10896:18:1;;;10889:32;10938:19;;32716:73:0;10565:398:1;32716:73:0;32862:9;;32826:22;;:33;;32851:8;32826:33;:::i;:::-;:45;;;;:::i;:::-;32808:15;:63;32800:91;;;;-1:-1:-1;;;32800:91:0;;11170:2:1;32800:91:0;;;11152:21:1;11209:2;11189:18;;;11182:30;-1:-1:-1;;;11228:18:1;;;11221:45;11283:18;;32800:91:0;10968:339:1;32800:91:0;32905:32;32919:9;32930:6;32905:13;:32::i;:::-;32972:11;32956:13;4547:12;;;4459:108;32956:13;:27;32948:77;;;;-1:-1:-1;;;32948:77:0;;11514:2:1;32948:77:0;;;11496:21:1;11553:2;11533:18;;;11526:30;11592:34;11572:18;;;11565:62;-1:-1:-1;;;11643:18:1;;;11636:35;11688:19;;32948:77:0;11312:401:1;32948:77:0;32561:472;;:::o;31111:84::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;31165:14:::1;:22:::0;;-1:-1:-1;;31165:22:0::1;::::0;;31111:84::o;18363:334::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;18483:4:::1;18478:155;;18540:6;::::0;-1:-1:-1;;;;;18540:6:0;;::::1;18530:16:::0;;::::1;::::0;18504:117:::1;;;::::0;-1:-1:-1;;;18504:117:0;;11920:2:1;18504:117:0::1;::::0;::::1;11902:21:1::0;11959:2;11939:18;;;11932:30;11998:34;11978:18;;;11971:62;-1:-1:-1;;;12049:18:1;;;12042:37;12096:19;;18504:117:0::1;11718:403:1::0;18504:117:0::1;-1:-1:-1::0;;;;;18643:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;18643:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18363:334::o;8662:265::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;8789:15:::1;8781:52;;;::::0;-1:-1:-1;;;8781:52:0;;12328:2:1;8781:52:0::1;::::0;::::1;12310:21:1::0;12367:2;12347:18;;;12340:30;12406:26;12386:18;;;12379:54;12450:18;;8781:52:0::1;12126:348:1::0;8781:52:0::1;8870:6;::::0;8849:40:::1;::::0;8886:1:::1;::::0;-1:-1:-1;;;;;8870:6:0::1;::::0;8849:40:::1;::::0;8886:1;;8849:40:::1;-1:-1:-1::0;8900:6:0::1;:19:::0;;-1:-1:-1;;;;;;8900:19:0::1;::::0;;8662:265::o;19310:402::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;19460:12:::1;:25:::0;;;19496:15:::1;:31:::0;;;19538:12:::1;:25:::0;;;19553:10;19589:30:::1;19514:13:::0;19475:10;19589:30:::1;:::i;:::-;:45;;;;:::i;:::-;19574:12;:60:::0;;;19669:1:::1;-1:-1:-1::0;19653:17:0::1;19645:59;;;::::0;-1:-1:-1;;;19645:59:0;;12681:2:1;19645:59:0::1;::::0;::::1;12663:21:1::0;12720:2;12700:18;;;12693:30;12759:31;12739:18;;;12732:59;12808:18;;19645:59:0::1;12479:353:1::0;19645:59:0::1;19310:402:::0;;;:::o;29193:567::-;8575:6;;29307:10;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29343:20:0;::::1;29335:59;;;::::0;-1:-1:-1;;;29335:59:0;;13039:2:1;29335:59:0::1;::::0;::::1;13021:21:1::0;13078:2;13058:18;;;13051:30;13117:28;13097:18;;;13090:56;13163:18;;29335:59:0::1;12837:350:1::0;29335:59:0::1;-1:-1:-1::0;;;;;29427:23:0;::::1;29445:4;29427:23;;::::0;:41:::1;;-1:-1:-1::0;29455:13:0::1;::::0;::::1;::::0;::::1;;;29454:14;29427:41;29405:143;;;::::0;-1:-1:-1;;;29405:143:0;;13394:2:1;29405:143:0::1;::::0;::::1;13376:21:1::0;13433:2;13413:18;;;13406:30;13472:34;13452:18;;;13445:62;-1:-1:-1;;;13523:18:1;;;13516:50;13583:19;;29405:143:0::1;13192:416:1::0;29405:143:0::1;29586:39;::::0;-1:-1:-1;;;29586:39:0;;29619:4:::1;29586:39;::::0;::::1;919:51:1::0;29559:24:0::1;::::0;-1:-1:-1;;;;;29586:24:0;::::1;::::0;::::1;::::0;892:18:1;;29586:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29644:46;::::0;-1:-1:-1;;;29644:46:0;;-1:-1:-1;;;;;13994:32:1;;;29644:46:0::1;::::0;::::1;13976:51:1::0;14043:18;;;14036:34;;;29559:66:0;;-1:-1:-1;29644:23:0;;::::1;::::0;::::1;::::0;13949:18:1;;29644:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29706;::::0;;-1:-1:-1;;;;;13994:32:1;;13976:51;;14058:2;14043:18;;14036:34;;;29636:54:0;;-1:-1:-1;29706:46:0::1;::::0;13949:18:1;29706:46:0::1;;;;;;;29324:436;29193:567:::0;;;;:::o;31396:231::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;31485:18:::1;::::0;::::1;::::0;::::1;;;31463:117;;;::::0;-1:-1:-1;;;31463:117:0;;14533:2:1;31463:117:0::1;::::0;::::1;14515:21:1::0;14572:2;14552:18;;;14545:30;14611:34;14591:18;;;14584:62;-1:-1:-1;;;14662:18:1;;;14655:47;14719:19;;31463:117:0::1;14331:413:1::0;31463:117:0::1;31593:18;:26:::0;;-1:-1:-1;;31593:26:0::1;::::0;;31396:231::o;31635:918::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;31743:13:::1;::::0;::::1;::::0;::::1;;;31742:14;31734:70;;;::::0;-1:-1:-1;;;31734:70:0;;14951:2:1;31734:70:0::1;::::0;::::1;14933:21:1::0;14990:2;14970:18;;;14963:30;15029:34;15009:18;;;15002:62;-1:-1:-1;;;15080:18:1;;;15073:41;15131:19;;31734:70:0::1;14749:407:1::0;31734:70:0::1;31856:2;31837:16;:21;31815:110;;;::::0;-1:-1:-1;;;31815:110:0;;15363:2:1;31815:110:0::1;::::0;::::1;15345:21:1::0;15402:2;15382:18;;;15375:30;15441:34;15421:18;;;15414:62;-1:-1:-1;;;15492:18:1;;;15485:37;15539:19;;31815:110:0::1;15161:403:1::0;31815:110:0::1;31973:13;:20:::0;;-1:-1:-1;;32004:18:0;;;;;32054:12:::1;32033:18;:33:::0;;;32102:15:::1;32077:22;:40:::0;32150:37:::1;::::0;32171:16;;32150:37:::1;:::i;:::-;:41;::::0;32190:1:::1;32150:41;:::i;:::-;32129:18;:62:::0;32202:12:::1;:18:::0;;;32231:13:::1;:20:::0;;;-1:-1:-1;32262:15:0::1;:19:::0;;;32292:12:::1;:16:::0;;;32334:30:::1;-1:-1:-1::0;32217:3:0;32334:30:::1;:::i;:::-;:45;;;;:::i;:::-;32319:12;:60:::0;32409:1:::1;32390:16;:20:::0;;;32421:13:::1;:17:::0;;;32465:13:::1;::::0;:32:::1;::::0;32409:1;;32465:32:::1;:::i;:::-;:48;;;;:::i;:::-;32449:13;:64:::0;32529:16:::1;::::0;::::1;::::0;;;::::1;31635:918:::0;;;:::o;4246:104::-;4302:13;4335:7;4328:14;;;;;:::i;15463:104::-;15512:16;15548:11;15541:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15541:18:0;;;;;;;;;;;;;;;;;;;;;;15463:104;:::o;18705:353::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;18851:6:::1;::::0;-1:-1:-1;;;;;18851:6:0;;::::1;18843:14:::0;;::::1;::::0;18821:121:::1;;;::::0;-1:-1:-1;;;18821:121:0;;15771:2:1;18821:121:0::1;::::0;::::1;15753:21:1::0;15810:2;15790:18;;;15783:30;15849:34;15829:18;;;15822:62;15920:27;15900:18;;;15893:55;15965:19;;18821:121:0::1;15569:421:1::0;18821:121:0::1;18953:41;18982:4;18988:5;18953:28;:41::i;:::-;19010:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;19010:40:0;::::1;::::0;::::1;::::0;;;::::1;18705:353:::0;;:::o;6253:482::-;288:10;6373:4;6422:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6422:34:0;;;;;;;;;;6489:35;;;;6467:122;;;;-1:-1:-1;;;6467:122:0;;16197:2:1;6467:122:0;;;16179:21:1;16236:2;16216:18;;;16209:30;16275:34;16255:18;;;16248:62;-1:-1:-1;;;16326:18:1;;;16319:35;16371:19;;6467:122:0;15995:401:1;6467:122:0;6625:67;288:10;6648:7;6676:15;6657:16;:34;6625:8;:67::i;:::-;-1:-1:-1;6723:4:0;;6253:482;-1:-1:-1;;;6253:482:0:o;4760:216::-;4882:4;4904:42;288:10;4928:9;4939:6;4904:9;:42::i;20139:182::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20224:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20224:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20279:34;;1577:41:1;;;20279:34:0::1;::::0;1550:18:1;20279:34:0::1;;;;;;;20139:182:::0;;:::o;19720:411::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;19871:13:::1;:26:::0;;;19908:16:::1;:32:::0;;;19951:13:::1;:26:::0;;;19967:10;20004:32:::1;19927:13:::0;19887:10;20004:32:::1;:::i;:::-;:48;;;;:::i;:::-;19988:13;:64:::0;;;20088:1:::1;-1:-1:-1::0;20071:18:0::1;20063:60;;;::::0;-1:-1:-1;;;20063:60:0;;16603:2:1;20063:60:0::1;::::0;::::1;16585:21:1::0;16642:2;16622:18;;;16615:30;16681:31;16661:18;;;16654:59;16730:18;;20063:60:0::1;16401:353:1::0;17167:461:0;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;17307:4:::1;17299;17278:13;4547:12:::0;;;4459:108;17278:13:::1;:17;::::0;17294:1:::1;17278:17;:::i;:::-;17277:26;;;;:::i;:::-;17276:35;;;;:::i;:::-;17266:6;:45;;17244:139;;;::::0;-1:-1:-1;;;17244:139:0;;16961:2:1;17244:139:0::1;::::0;::::1;16943:21:1::0;17000:2;16980:18;;;16973:30;17039:34;17019:18;;;17012:62;-1:-1:-1;;;17090:18:1;;;17083:42;17142:19;;17244:139:0::1;16759:408:1::0;17244:139:0::1;17456:4;17449:3;17428:13;4547:12:::0;;;4459:108;17428:13:::1;:17;::::0;17444:1:::1;17428:17;:::i;:::-;17427:25;;;;:::i;:::-;17426:34;;;;:::i;:::-;17416:6;:44;;17394:137;;;::::0;-1:-1:-1;;;17394:137:0;;17374:2:1;17394:137:0::1;::::0;::::1;17356:21:1::0;17413:2;17393:18;;;17386:30;17452:34;17432:18;;;17425:62;-1:-1:-1;;;17503:18:1;;;17496:41;17554:19;;17394:137:0::1;17172:407:1::0;17394:137:0::1;17554:17;:6:::0;17564::::1;17554:17;:::i;:::-;17542:9;:29:::0;;;17587:33:::1;::::0;160:25:1;;;17587:33:0::1;::::0;148:2:1;133:18;17587:33:0::1;14:177:1::0;17698:428:0;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;17838:6:::1;17817:13;4547:12:::0;;;4459:108;17817:13:::1;:17;::::0;17833:1:::1;17817:17;:::i;:::-;17816:28;;;;:::i;:::-;17803:9;:41;;17781:144;;;::::0;-1:-1:-1;;;17781:144:0;;17786:2:1;17781:144:0::1;::::0;::::1;17768:21:1::0;17825:2;17805:18;;;17798:30;17864:34;17844:18;;;17837:62;-1:-1:-1;;;17915:18:1;;;17908:51;17976:19;;17781:144:0::1;17584:417:1::0;17781:144:0::1;17993:4;17972:13;4547:12:::0;;;4459:108;17972:13:::1;:17;::::0;17988:1:::1;17972:17;:::i;:::-;17971:26;;;;:::i;:::-;17958:9;:39;;17936:141;;;::::0;-1:-1:-1;;;17936:141:0;;18208:2:1;17936:141:0::1;::::0;::::1;18190:21:1::0;18247:2;18227:18;;;18220:30;18286:34;18266:18;;;18259:62;-1:-1:-1;;;18337:18:1;;;18330:50;18397:19;;17936:141:0::1;18006:416:1::0;17936:141:0::1;18088:18;:30:::0;17698:428::o;16698:461::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;16836:4:::1;16828;16807:13;4547:12:::0;;;4459:108;16807:13:::1;:17;::::0;16823:1:::1;16807:17;:::i;:::-;16806:26;;;;:::i;:::-;16805:35;;;;:::i;:::-;16795:6;:45;;16773:137;;;::::0;-1:-1:-1;;;16773:137:0;;18629:2:1;16773:137:0::1;::::0;::::1;18611:21:1::0;18668:2;18648:18;;;18641:30;18707:34;18687:18;;;18680:62;-1:-1:-1;;;18758:18:1;;;18751:40;18808:19;;16773:137:0::1;18427:406:1::0;16773:137:0::1;16983:4;16976:3;16955:13;4547:12:::0;;;4459:108;16955:13:::1;:17;::::0;16971:1:::1;16955:17;:::i;:::-;16954:25;;;;:::i;:::-;16953:34;;;;:::i;:::-;16943:6;:44;;16921:135;;;::::0;-1:-1:-1;;;16921:135:0;;19040:2:1;16921:135:0::1;::::0;::::1;19022:21:1::0;19079:2;19059:18;;;19052:30;19118:34;19098:18;;;19091:62;-1:-1:-1;;;19169:18:1;;;19162:39;19218:19;;16921:135:0::1;18838:405:1::0;16921:135:0::1;17083:17;:6:::0;17093::::1;17083:17;:::i;:::-;17067:13;:33:::0;;;17116:35:::1;::::0;160:25:1;;;17116:35:0::1;::::0;148:2:1;133:18;17116:35:0::1;14:177:1::0;33041:96:0;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;33122:6:::1;33109:9;;:19;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;33041:96:0:o;16128:98::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;16190:20:::1;:28:::0;;-1:-1:-1;;16190:28:0::1;::::0;;16128:98::o;11308:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11308:28:0;;-1:-1:-1;11308:28:0;:::o;8935:281::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9038:22:0;::::1;9016:110;;;::::0;-1:-1:-1;;;9016:110:0;;19450:2:1;9016:110:0::1;::::0;::::1;19432:21:1::0;19489:2;19469:18;;;19462:30;19528:34;19508:18;;;19501:62;-1:-1:-1;;;19579:18:1;;;19572:36;19625:19;;9016:110:0::1;19248:402:1::0;9016:110:0::1;9163:6;::::0;9142:38:::1;::::0;-1:-1:-1;;;;;9142:38:0;;::::1;::::0;9163:6:::1;::::0;9142:38:::1;::::0;9163:6:::1;::::0;9142:38:::1;9191:6;:17:::0;;-1:-1:-1;;;;;;9191:17:0::1;-1:-1:-1::0;;;;;9191:17:0;;;::::1;::::0;;;::::1;::::0;;8935:281::o;29830:185::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;29925:82:::1;::::0;29888:12:::1;::::0;29933:10:::1;::::0;29957:21:::1;::::0;29888:12;29925:82;29888:12;29925:82;29957:21;29933:10;29925:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;29830:185:0:o;30023:325::-;8575:6;;-1:-1:-1;;;;;8575:6:0;288:10;8575:22;8567:67;;;;-1:-1:-1;;;8567:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30148:28:0;::::1;30126:112;;;;-1:-1:-1::0;;;30126:112:0::1;;;;;;;:::i;:::-;30249:13;:39:::0;;-1:-1:-1;;;;;;30249:39:0::1;-1:-1:-1::0;;;;;30249:39:0;::::1;::::0;;::::1;::::0;;;30304:36:::1;::::0;::::1;::::0;-1:-1:-1;;30304:36:0::1;30023:325:::0;:::o;7717:380::-;-1:-1:-1;;;;;7853:19:0;;7845:68;;;;-1:-1:-1;;;7845:68:0;;20067:2:1;7845:68:0;;;20049:21:1;20106:2;20086:18;;;20079:30;20145:34;20125:18;;;20118:62;-1:-1:-1;;;20196:18:1;;;20189:34;20240:19;;7845:68:0;19865:400:1;7845:68:0;-1:-1:-1;;;;;7932:21:0;;7924:68;;;;-1:-1:-1;;;7924:68:0;;20472:2:1;7924:68:0;;;20454:21:1;20511:2;20491:18;;;20484:30;20550:34;20530:18;;;20523:62;-1:-1:-1;;;20601:18:1;;;20594:32;20643:19;;7924:68:0;20270:398:1;7924:68:0;-1:-1:-1;;;;;8005:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8057:32;;160:25:1;;;8057:32:0;;133:18:1;8057:32:0;;;;;;;7717:380;;;:::o;20329:6086::-;-1:-1:-1;;;;;20461:18:0;;20453:68;;;;-1:-1:-1;;;20453:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20540:16:0;;20532:64;;;;-1:-1:-1;;;20532:64:0;;;;;;;:::i;:::-;20624:1;20615:6;:10;20607:52;;;;-1:-1:-1;;;20607:52:0;;21685:2:1;20607:52:0;;;21667:21:1;21724:2;21704:18;;;21697:30;21763:31;21743:18;;;21736:59;21812:18;;20607:52:0;21483:353:1;20607:52:0;20677:13;;;;;;;20672:183;;-1:-1:-1;;;;;20733:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20762:23:0;;;;;;:19;:23;;;;;;;;20733:52;20707:136;;;;-1:-1:-1;;;20707:136:0;;22043:2:1;20707:136:0;;;22025:21:1;22082:2;22062:18;;;22055:30;-1:-1:-1;;;22101:18:1;;;22094:52;22163:18;;20707:136:0;21841:346:1;20707:136:0;26518:18;;26503:12;:33;20871:26;:43;;;;-1:-1:-1;20901:13:0;;;;;;;20871:43;20867:268;;;-1:-1:-1;;;;;20958:17:0;;;;;;:11;:17;;;;;;;;20957:18;;:35;;-1:-1:-1;8513:6:0;;-1:-1:-1;;;;;20979:13:0;;;8513:6;;20979:13;20957:35;:60;;;-1:-1:-1;;;;;;20996:21:0;;21010:6;20996:21;20957:60;20931:192;;;;-1:-1:-1;;;20931:192:0;;22394:2:1;20931:192:0;;;22376:21:1;22433:2;22413:18;;;22406:30;22472:34;22452:18;;;22445:62;22543:34;22523:18;;;22516:62;-1:-1:-1;;;22594:19:1;;;22587:37;22641:19;;20931:192:0;22192:474:1;20931:192:0;21151:14;;;;21147:2217;;;8513:6;;-1:-1:-1;;;;;21204:15:0;;;8513:6;;21204:15;;;;:49;;-1:-1:-1;8513:6:0;;-1:-1:-1;;;;;21240:13:0;;;8513:6;;21240:13;;21204:49;:91;;;;-1:-1:-1;;;;;;21274:21:0;;21288:6;21274:21;;21204:91;:138;;;;-1:-1:-1;;;;;;21317:25:0;;;;;;:19;:25;;;;;;;;21316:26;21204:138;:183;;;;-1:-1:-1;;;;;;21364:23:0;;;;;;:19;:23;;;;;;;;21363:24;21204:183;21182:2171;;;21426:20;;;;21422:692;;;21489:9;;-1:-1:-1;;;;;21475:24:0;;;21489:9;;21475:24;;;;:49;;-1:-1:-1;21517:6:0;;-1:-1:-1;;;;;21503:21:0;;;21517:6;;21503:21;;21475:49;21471:624;;;21666:16;21681:1;21666:12;:16;:::i;:::-;21620:9;21591:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;21787:16:0;21802:1;21787:12;:16;:::i;:::-;-1:-1:-1;;;;;21719:32:0;;;;;;:28;:32;;;;;;:84;21591:212;21553:363;;;;-1:-1:-1;;;21553:363:0;;22873:2:1;21553:363:0;;;22855:21:1;22912:2;22892:18;;;22885:30;22951:34;22931:18;;;22924:62;-1:-1:-1;;;23002:18:1;;;22995:51;23063:19;;21553:363:0;22671:417:1;21553:363:0;21972:9;21943:39;;;;:28;:39;;;;;;21985:12;21943:54;;;;-1:-1:-1;;;;;22024:32:0;;;;;;:47;21471:624;-1:-1:-1;;;;;22188:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;22245:35:0;;;;;;:31;:35;;;;;;;;22244:36;22188:92;22162:1176;;;22367:12;;22357:6;:22;;22323:148;;;;-1:-1:-1;;;22323:148:0;;23295:2:1;22323:148:0;;;23277:21:1;23334:2;23314:18;;;23307:30;23373:34;23353:18;;;23346:62;-1:-1:-1;;;23424:18:1;;;23417:38;23472:19;;22323:148:0;23093:404:1;22323:148:0;22554:9;;-1:-1:-1;;;;;4726:18:0;;4694:7;4726:18;;;;;;;;;;;22528:22;;:6;:22;:::i;:::-;:35;;22494:140;;;;-1:-1:-1;;;22494:140:0;;23704:2:1;22494:140:0;;;23686:21:1;23743:2;23723:18;;;23716:30;-1:-1:-1;;;23762:18:1;;;23755:49;23821:18;;22494:140:0;23502:343:1;22494:140:0;22162:1176;;;-1:-1:-1;;;;;22732:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;22787:37:0;;;;;;:31;:37;;;;;;;;22786:38;22732:92;22706:632;;;22875:14;;;;22867:46;;;;-1:-1:-1;;;22867:46:0;;24052:2:1;22867:46:0;;;24034:21:1;24091:2;24071:18;;;24064:30;-1:-1:-1;;;24110:18:1;;;24103:49;24169:18;;22867:46:0;23850:343:1;22867:46:0;22980:13;;22970:6;:23;;22936:151;;;;-1:-1:-1;;;22936:151:0;;24400:2:1;22936:151:0;;;24382:21:1;24439:2;24419:18;;;24412:30;24478:34;24458:18;;;24451:62;-1:-1:-1;;;24529:18:1;;;24522:40;24579:19;;22936:151:0;24198:406:1;22706:632:0;-1:-1:-1;;;;;23118:35:0;;;;;;:31;:35;;;;;;;;23113:225;;23238:9;;-1:-1:-1;;;;;4726:18:0;;4694:7;4726:18;;;;;;;;;;;23212:22;;:6;:22;:::i;:::-;:35;;23178:140;;;;-1:-1:-1;;;23178:140:0;;23704:2:1;23178:140:0;;;23686:21:1;23743:2;23723:18;;;23716:30;-1:-1:-1;;;23762:18:1;;;23755:49;23821:18;;23178:140:0;23502:343:1;23178:140:0;23425:4;23376:28;4726:18;;;;;;;;;;;23483;;23459:42;;;;;;;23532:22;;-1:-1:-1;23543:11:0;;;;;;;23532:22;:35;;;;-1:-1:-1;23559:8:0;;-1:-1:-1;;;23559:8:0;;;;23558:9;23532:35;:68;;;;-1:-1:-1;;;;;;23571:29:0;;;;;;:25;:29;;;;;;;;23532:68;23514:196;;;23627:8;:15;;-1:-1:-1;;;;23627:15:0;-1:-1:-1;;;23627:15:0;;;23657:10;:8;:10::i;:::-;23682:8;:16;;-1:-1:-1;;;;23682:16:0;;;23514:196;-1:-1:-1;;;;;23841:25:0;;23722:12;23841:25;;;:19;:25;;;;;;23737:4;;23841:25;;;:52;;-1:-1:-1;;;;;;23870:23:0;;;;;;:19;:23;;;;;;;;23841:52;23837:100;;;-1:-1:-1;23920:5:0;23837:100;23949:12;24054:7;24050:2312;;;26518:18;;26503:12;:33;24137:152;;;;24213:8;24198:12;;:23;;;;:::i;:::-;24188:6;:33;;:100;;;;;24276:12;24250:18;;24271:1;24250:22;;;;:::i;:::-;:38;;24188:100;24136:206;;;;-1:-1:-1;;;;;;24311:31:0;;;;;;:25;:31;;;;;;;;24136:206;:257;;;;-1:-1:-1;;;;;;24364:29:0;;;;;;:25;:29;;;;;;;;24363:30;24136:257;:302;;;;-1:-1:-1;;;;;;24415:23:0;;;;;;:19;:23;;;;;;;;24414:24;24136:302;:339;;;;;24474:1;24459:12;;:16;24136:339;24114:2099;;;26518:18;;26503:12;:33;24510:332;;24821:1;24805:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;24510:332:0;-1:-1:-1;;;;;24867:15:0;;;;;;:11;:15;;;;;;;;24862:216;;-1:-1:-1;;;;;24907:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;24907:22:0;24925:4;24907:22;;;;;;24952:10;:15;;24925:4;;24952:10;;:15;;24925:4;;24952:15;:::i;:::-;;;;-1:-1:-1;;24990:11:0;:20;;;;;;;-1:-1:-1;24990:20:0;;;;;;;;-1:-1:-1;;;;;;24990:20:0;-1:-1:-1;;;;;24990:20:0;;;;;;;;25038;;919:51:1;;;25038:20:0;;907:2:1;892:18;25038:20:0;;;;;;;24862:216;25121:3;25106:11;:6;25115:2;25106:11;:::i;:::-;25105:19;;;;:::i;:::-;25098:26;;25192:12;;25173:15;;25166:4;:22;;;;:::i;:::-;25165:39;;;;:::i;:::-;25143:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25266:12:0;;25250;;25243:19;;:4;:19;:::i;:::-;25242:36;;;;:::i;:::-;25223:15;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;25340:12:0;;25324;;25317:19;;:4;:19;:::i;:::-;25316:36;;;;:::i;:::-;25297:15;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;24114:2099:0;;-1:-1:-1;24114:2099:0;;-1:-1:-1;;;;;25415:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25464:1;25448:13;;:17;25415:50;25411:802;;;25520:3;25503:13;;25494:6;:22;;;;:::i;:::-;25493:30;;;;:::i;:::-;25486:37;;25592:13;;25572:16;;25565:4;:23;;;;:::i;:::-;25564:41;;;;:::i;:::-;25542:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25710:13:0;;25672;;25665:20;;:4;:20;:::i;:::-;25664:59;;;;:::i;:::-;25624:15;;:99;;;;;;;:::i;:::-;;;;-1:-1:-1;;25786:13:0;;25769;;25762:20;;:4;:20;:::i;25411:802::-;-1:-1:-1;;;;;25861:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;25911:1;25896:12;;:16;25861:51;25857:356;;;25966:3;25950:12;;25941:6;:21;;;;:::i;:::-;25940:29;;;;:::i;:::-;25933:36;;26037:12;;26018:15;;26011:4;:22;;;;:::i;:::-;26010:39;;;;:::i;:::-;25988:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26111:12:0;;26095;;26088:19;;:4;:19;:::i;:::-;26087:36;;;;:::i;:::-;26068:15;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;26185:12:0;;26169;;26162:19;;:4;:19;:::i;:::-;26161:36;;;;:::i;:::-;26142:15;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;25857:356:0;26233:8;;26229:91;;26262:42;26278:4;26292;26299;26262:15;:42::i;:::-;26336:14;26346:4;26336:14;;:::i;:::-;;;24050:2312;26374:33;26390:4;26396:2;26400:6;26374:15;:33::i;:::-;20442:5973;;;;20329:6086;;;:::o;27648:1537::-;27731:4;27687:23;4726:18;;;;;;;;;;;27687:50;;27748:25;27841:15;;27810;;27776:18;;:49;;;;:::i;:::-;:80;;;;:::i;:::-;27748:108;-1:-1:-1;27873:20:0;;;:46;;-1:-1:-1;27897:22:0;;27873:46;27869:85;;;27936:7;;27648:1537::o;27869:85::-;27988:18;;:23;;28009:2;27988:23;:::i;:::-;27970:15;:41;27966:115;;;28046:18;;:23;;28067:2;28046:23;:::i;:::-;28028:41;;27966:115;28093:12;28167:23;28280:1;28247:17;28212:18;;28194:15;:36;;;;:::i;:::-;28193:71;;;;:::i;:::-;:88;;;;:::i;:::-;28167:114;-1:-1:-1;28294:51:0;28311:33;28167:114;28311:15;:33;:::i;:::-;28294:16;:51::i;:::-;28551:18;;28379:21;;;;28358:18;;28551:22;;28572:1;;28551:22;:::i;:::-;28530:44;;:17;:44;:::i;:::-;28497:15;;28484:28;;:10;:28;:::i;:::-;28483:92;;;;:::i;:::-;28460:115;;28586:20;28698:1;28677:18;;:22;;;;:::i;:::-;28656:44;;:17;:44;:::i;:::-;28623:15;;28610:28;;:10;:28;:::i;:::-;28609:92;;;;:::i;:::-;28586:115;-1:-1:-1;28733:27:0;28586:115;28733:12;:27;:::i;:::-;28714:46;;;;:::i;:::-;28794:1;28773:18;:22;;;28806:15;:19;;;28836:15;:19;28714:46;-1:-1:-1;28872:19:0;;;;;:42;;;28913:1;28895:15;:19;28872:42;28868:121;;;28931:46;28944:15;28961;28931:12;:46::i;:::-;29023:13;;29015:52;;-1:-1:-1;;;;;29023:13:0;;;;29050:12;;29015:52;;;;29050:12;29023:13;29015:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29100:13:0;;29092:85;;29001:66;;-1:-1:-1;;;;;;29100:13:0;;29141:21;;29092:85;;;;29141:21;29100:13;29092:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27648:1537:0:o;7402:307::-;-1:-1:-1;;;;;7517:21:0;;7509:65;;;;-1:-1:-1;;;7509:65:0;;24811:2:1;7509:65:0;;;24793:21:1;24850:2;24830:18;;;24823:30;24889:33;24869:18;;;24862:61;24940:18;;7509:65:0;24609:355:1;7509:65:0;7603:6;7587:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;7620:18:0;;:9;:18;;;;;;;;;;:28;;7642:6;;7620:9;:28;;7642:6;;7620:28;:::i;:::-;;;;-1:-1:-1;;7664:37:0;;160:25:1;;;-1:-1:-1;;;;;7664:37:0;;;7681:1;;7664:37;;148:2:1;133:18;7664:37:0;;;;;;;7402:307;;:::o;19066:236::-;-1:-1:-1;;;;;19149:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;19149:39:0;;;;;;;19199;19149:31;:39;19199:26;:39::i;6743:651::-;-1:-1:-1;;;;;6883:20:0;;6875:70;;;;-1:-1:-1;;;6875:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6964:23:0;;6956:71;;;;-1:-1:-1;;;6956:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7064:17:0;;7040:21;7064:17;;;;;;;;;;;7114:23;;;;7092:111;;;;-1:-1:-1;;;7092:111:0;;25171:2:1;7092:111:0;;;25153:21:1;25210:2;25190:18;;;25183:30;25249:34;25229:18;;;25222:62;-1:-1:-1;;;25300:18:1;;;25293:36;25346:19;;7092:111:0;24969:402:1;7092:111:0;-1:-1:-1;;;;;7239:17:0;;;:9;:17;;;;;;;;;;;7259:22;;;7239:42;;7303:20;;;;;;;;:30;;7275:6;;7239:9;7303:30;;7275:6;;7303:30;:::i;:::-;;;;;;;;7368:9;-1:-1:-1;;;;;7351:35:0;7360:6;-1:-1:-1;;;;;7351:35:0;;7379:6;7351:35;;;;160:25:1;;148:2;133:18;;14:177;7351:35:0;;;;;;;;6864:530;6743:651;;;:::o;26552:571::-;26702:16;;;26716:1;26702:16;;;;;;;;26678:21;;26702:16;;;;;;;;;;-1:-1:-1;26702:16:0;26678:40;;26747:4;26729;26734:1;26729:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26729:23:0;;;:7;;;;;;;;;;:23;;;;26773:9;;:16;;;-1:-1:-1;;;26773:16:0;;;;:9;;;;;:14;;:16;;;;;26729:7;;26773:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26763:4;26768:1;26763:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26763:26:0;;;:7;;;;;;;;;:26;26834:9;;26802:56;;26819:4;;26834:9;26846:11;26802:8;:56::i;:::-;26897:9;;:218;;-1:-1:-1;;;26897:218:0;;-1:-1:-1;;;;;26897:9:0;;;;:60;;:218;;26972:11;;26897:9;;27042:4;;27069;;27089:15;;26897:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26607:516;26552:571;:::o;27131:509::-;27311:9;;27279:56;;27296:4;;-1:-1:-1;;;;;27311:9:0;27323:11;27279:8;:56::i;:::-;27378:9;;:254;;-1:-1:-1;;;27378:254:0;;27444:4;27378:254;;;26824:34:1;26874:18;;;26867:34;;;27378:9:0;26917:18:1;;;26910:34;;;26960:18;;;26953:34;27584:6:0;27003:19:1;;;26996:44;27606:15:0;27056:19:1;;;27049:35;-1:-1:-1;;;;;27378:9:0;;;;:25;;27411:9;;26758:19:1;;27378:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27131:509;;:::o;18134:221::-;-1:-1:-1;;;;;18236:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;18236:52:0;;;;;;;;;;18304:43;;27574:51:1;;;27641:18;;;27634:50;18304:43:0;;27547:18:1;18304:43:0;;;;;;;18134:221;;:::o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;981:131::-;-1:-1:-1;;;;;1056:31:1;;1046:42;;1036:70;;1102:1;1099;1092:12;1036:70;981:131;:::o;1117:315::-;1185:6;1193;1246:2;1234:9;1225:7;1221:23;1217:32;1214:52;;;1262:1;1259;1252:12;1214:52;1301:9;1288:23;1320:31;1345:5;1320:31;:::i;:::-;1370:5;1422:2;1407:18;;;;1394:32;;-1:-1:-1;;;1117:315:1:o;1629:247::-;1688:6;1741:2;1729:9;1720:7;1716:23;1712:32;1709:52;;;1757:1;1754;1747:12;1709:52;1796:9;1783:23;1815:31;1840:5;1815:31;:::i;:::-;1865:5;1629:247;-1:-1:-1;;;1629:247:1:o;2089:456::-;2166:6;2174;2182;2235:2;2223:9;2214:7;2210:23;2206:32;2203:52;;;2251:1;2248;2241:12;2203:52;2290:9;2277:23;2309:31;2334:5;2309:31;:::i;:::-;2359:5;-1:-1:-1;2416:2:1;2401:18;;2388:32;2429:33;2388:32;2429:33;:::i;:::-;2089:456;;2481:7;;-1:-1:-1;;;2535:2:1;2520:18;;;;2507:32;;2089:456::o;2550:180::-;2609:6;2662:2;2650:9;2641:7;2637:23;2633:32;2630:52;;;2678:1;2675;2668:12;2630:52;-1:-1:-1;2701:23:1;;2550:180;-1:-1:-1;2550:180:1:o;2924:118::-;3010:5;3003:13;2996:21;2989:5;2986:32;2976:60;;3032:1;3029;3022:12;3047:382;3112:6;3120;3173:2;3161:9;3152:7;3148:23;3144:32;3141:52;;;3189:1;3186;3179:12;3141:52;3228:9;3215:23;3247:31;3272:5;3247:31;:::i;:::-;3297:5;-1:-1:-1;3354:2:1;3339:18;;3326:32;3367:30;3326:32;3367:30;:::i;:::-;3416:7;3406:17;;;3047:382;;;;;:::o;3434:241::-;3490:6;3543:2;3531:9;3522:7;3518:23;3514:32;3511:52;;;3559:1;3556;3549:12;3511:52;3598:9;3585:23;3617:28;3639:5;3617:28;:::i;3680:316::-;3757:6;3765;3773;3826:2;3814:9;3805:7;3801:23;3797:32;3794:52;;;3842:1;3839;3832:12;3794:52;-1:-1:-1;;3865:23:1;;;3935:2;3920:18;;3907:32;;-1:-1:-1;3986:2:1;3971:18;;;3958:32;;3680:316;-1:-1:-1;3680:316:1:o;4001:388::-;4069:6;4077;4130:2;4118:9;4109:7;4105:23;4101:32;4098:52;;;4146:1;4143;4136:12;4098:52;4185:9;4172:23;4204:31;4229:5;4204:31;:::i;:::-;4254:5;-1:-1:-1;4311:2:1;4296:18;;4283:32;4324:33;4283:32;4324:33;:::i;4394:461::-;4447:3;4485:5;4479:12;4512:6;4507:3;4500:19;4538:4;4567:2;4562:3;4558:12;4551:19;;4604:2;4597:5;4593:14;4625:1;4635:195;4649:6;4646:1;4643:13;4635:195;;;4714:13;;-1:-1:-1;;;;;4710:39:1;4698:52;;4770:12;;;;4805:15;;;;4746:1;4664:9;4635:195;;;-1:-1:-1;4846:3:1;;4394:461;-1:-1:-1;;;;;4394:461:1:o;4860:261::-;5039:2;5028:9;5021:21;5002:4;5059:56;5111:2;5100:9;5096:18;5088:6;5059:56;:::i;5126:380::-;5205:1;5201:12;;;;5248;;;5269:61;;5323:4;5315:6;5311:17;5301:27;;5269:61;5376:2;5368:6;5365:14;5345:18;5342:38;5339:161;;5422:10;5417:3;5413:20;5410:1;5403:31;5457:4;5454:1;5447:15;5485:4;5482:1;5475:15;5339:161;;5126:380;;;:::o;5511:356::-;5713:2;5695:21;;;5732:18;;;5725:30;5791:34;5786:2;5771:18;;5764:62;5858:2;5843:18;;5511:356::o;7407:127::-;7468:10;7463:3;7459:20;7456:1;7449:31;7499:4;7496:1;7489:15;7523:4;7520:1;7513:15;7539:168;7612:9;;;7643;;7660:15;;;7654:22;;7640:37;7630:71;;7681:18;;:::i;7712:217::-;7752:1;7778;7768:132;;7822:10;7817:3;7813:20;7810:1;7803:31;7857:4;7854:1;7847:15;7885:4;7882:1;7875:15;7768:132;-1:-1:-1;7914:9:1;;7712:217::o;8754:125::-;8819:9;;;8840:10;;;8837:36;;;8853:18;;:::i;9676:128::-;9743:9;;;9764:11;;;9761:37;;;9778:18;;:::i;9809:398::-;10011:2;9993:21;;;10050:2;10030:18;;;10023:30;10089:34;10084:2;10069:18;;10062:62;-1:-1:-1;;;10155:2:1;10140:18;;10133:32;10197:3;10182:19;;9809:398::o;13613:184::-;13683:6;13736:2;13724:9;13715:7;13711:23;13707:32;13704:52;;;13752:1;13749;13742:12;13704:52;-1:-1:-1;13775:16:1;;13613:184;-1:-1:-1;13613:184:1:o;14081:245::-;14148:6;14201:2;14189:9;14180:7;14176:23;14172:32;14169:52;;;14217:1;14214;14207:12;14169:52;14249:9;14243:16;14268:28;14290:5;14268:28;:::i;20673:401::-;20875:2;20857:21;;;20914:2;20894:18;;;20887:30;20953:34;20948:2;20933:18;;20926:62;-1:-1:-1;;;21019:2:1;21004:18;;20997:35;21064:3;21049:19;;20673:401::o;21079:399::-;21281:2;21263:21;;;21320:2;21300:18;;;21293:30;21359:34;21354:2;21339:18;;21332:62;-1:-1:-1;;;21425:2:1;21410:18;;21403:33;21468:3;21453:19;;21079:399::o;25508:127::-;25569:10;25564:3;25560:20;25557:1;25550:31;25600:4;25597:1;25590:15;25624:4;25621:1;25614:15;25640:251;25710:6;25763:2;25751:9;25742:7;25738:23;25734:32;25731:52;;;25779:1;25776;25769:12;25731:52;25811:9;25805:16;25830:31;25855:5;25830:31;:::i;25896:582::-;26195:6;26184:9;26177:25;26238:6;26233:2;26222:9;26218:18;26211:34;26281:3;26276:2;26265:9;26261:18;26254:31;26158:4;26302:57;26354:3;26343:9;26339:19;26331:6;26302:57;:::i;:::-;-1:-1:-1;;;;;26395:32:1;;;;26390:2;26375:18;;26368:60;-1:-1:-1;26459:3:1;26444:19;26437:35;26294:65;25896:582;-1:-1:-1;;;25896:582:1:o;27095:306::-;27183:6;27191;27199;27252:2;27240:9;27231:7;27227:23;27223:32;27220:52;;;27268:1;27265;27258:12;27220:52;27297:9;27291:16;27281:26;;27347:2;27336:9;27332:18;27326:25;27316:35;;27391:2;27380:9;27376:18;27370:25;27360:35;;27095:306;;;;;:::o
Swarm Source
ipfs://a26dc7cb04c58b7b8f00b4373e13adef3873a887c0d95a3910c3bfb85b743bee
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.