More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 222 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 17567074 | 563 days ago | IN | 0 ETH | 0.00055321 | ||||
Approve | 15695653 | 826 days ago | IN | 0 ETH | 0.00028742 | ||||
Approve | 15683308 | 827 days ago | IN | 0 ETH | 0.00127685 | ||||
Approve | 15681479 | 828 days ago | IN | 0 ETH | 0.00030169 | ||||
Approve | 15673483 | 829 days ago | IN | 0 ETH | 0.00054702 | ||||
Approve | 15670947 | 829 days ago | IN | 0 ETH | 0.00057137 | ||||
Approve | 15666641 | 830 days ago | IN | 0 ETH | 0.00026452 | ||||
Approve | 15666635 | 830 days ago | IN | 0 ETH | 0.00040484 | ||||
Approve | 15666003 | 830 days ago | IN | 0 ETH | 0.0004712 | ||||
Approve | 15663511 | 830 days ago | IN | 0 ETH | 0.00021297 | ||||
Approve | 15662170 | 830 days ago | IN | 0 ETH | 0.00016046 | ||||
Approve | 15661630 | 830 days ago | IN | 0 ETH | 0.00029562 | ||||
Approve | 15656270 | 831 days ago | IN | 0 ETH | 0.00030061 | ||||
Approve | 15656193 | 831 days ago | IN | 0 ETH | 0.00053461 | ||||
Approve | 15652808 | 832 days ago | IN | 0 ETH | 0.00019011 | ||||
Approve | 15651712 | 832 days ago | IN | 0 ETH | 0.00023325 | ||||
Approve | 15649440 | 832 days ago | IN | 0 ETH | 0.00041866 | ||||
Approve | 15648257 | 832 days ago | IN | 0 ETH | 0.00135841 | ||||
Approve | 15648257 | 832 days ago | IN | 0 ETH | 0.00135841 | ||||
Approve | 15648257 | 832 days ago | IN | 0 ETH | 0.00135841 | ||||
Approve | 15648257 | 832 days ago | IN | 0 ETH | 0.00135841 | ||||
Approve | 15648257 | 832 days ago | IN | 0 ETH | 0.00135841 | ||||
Approve | 15648251 | 832 days ago | IN | 0 ETH | 0.00068552 | ||||
Approve | 15648178 | 832 days ago | IN | 0 ETH | 0.00067938 | ||||
Approve | 15648158 | 832 days ago | IN | 0 ETH | 0.00070685 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
15639742 | 833 days ago | 2 ETH |
Loading...
Loading
Contract Name:
TheGoldenFloki
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-29 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.16; 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 _createInitialSupply(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 _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } } 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() external virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IDexRouter { 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 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 TheGoldenFloki is ERC20, Ownable { uint256 public maxTxnAmount; uint256 public maxWallet; IDexRouter public dexRouter; address public lpPair; bool private swapping; uint256 public swapTokensAtAmount; address operationsAddress; uint256 public tradingActiveBlock = 0; // 0 means trading is not active uint256 public blockForPenaltyEnd; mapping(address => bool) public boughtEarly; 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 buyOperationsFee; uint256 public buyLiquidityFee; uint256 public buyBurnFee; uint256 public sellTotalFees; uint256 public sellOperationsFee; uint256 public sellLiquidityFee; uint256 public sellBurnFee; uint256 public constant FEE_DIVISOR = 10000; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event EnabledTrading(); event RemovedLimits(); event ExcludeFromFees(address indexed account, bool isExcluded); event UpdatedMaxTxnAmount(uint256 newAmount); event UpdatedMaxWallet(uint256 newAmount); event UpdatedOperationsAddress(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); constructor() payable ERC20("The Golden Floki", "GLDF") { address newOwner = msg.sender; // can leave alone if owner is deployer. address _dexRouter; if (block.chainid == 1) { _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2 } else if (block.chainid == 4) { _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Rinkeby } else { revert("Chain not configured"); } // initialize router dexRouter = IDexRouter(_dexRouter); // create pair lpPair = IDexFactory(dexRouter.factory()).createPair( address(this), dexRouter.WETH() ); _excludeFromMaxTransaction(address(lpPair), true); _setAutomatedMarketMakerPair(address(lpPair), true); uint256 totalSupply = 10 * 1e6 * 1e18; maxTxnAmount = (totalSupply * 15) / 1000; // 1.5% maxWallet = (totalSupply * 15) / 1000; // 1% swapTokensAtAmount = (totalSupply * 1) / 10000; // 0.01% buyOperationsFee = 600; buyLiquidityFee = 300; buyBurnFee = 0; buyTotalFees = buyOperationsFee + buyLiquidityFee + buyBurnFee; sellOperationsFee = 600; sellLiquidityFee = 300; sellBurnFee = 0; sellTotalFees = sellOperationsFee + sellLiquidityFee + sellBurnFee; _excludeFromMaxTransaction(newOwner, true); _excludeFromMaxTransaction(address(this), true); _excludeFromMaxTransaction(address(0xdead), true); _excludeFromMaxTransaction(address(dexRouter), true); excludeFromFees(newOwner, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(dexRouter), true); operationsAddress = address(0x2C626BCbC6601fb2a6E302f7F4A8DeFCB89e9004); _createInitialSupply(newOwner, (totalSupply * 25) / 100); // Staking _createInitialSupply(address(this), (totalSupply * 75) / 100); // liquidity transferOwnership(newOwner); } receive() external payable {} // only enable if no plan to airdrop function enableTrading(uint256 deadBlocks) external onlyOwner { require(!tradingActive, "Cannot reenable trading"); tradingActive = true; swapEnabled = true; tradingActiveBlock = block.number; blockForPenaltyEnd = tradingActiveBlock + deadBlocks; emit EnabledTrading(); } // remove limits after token is stable function removeLimits() external onlyOwner { limitsInEffect = false; transferDelayEnabled = false; emit RemovedLimits(); } function restoreLimits() external onlyOwner { limitsInEffect = true; } function manageBoughtEarly(address wallet, bool flag) external onlyOwner { boughtEarly[wallet] = flag; } function massManageBoughtEarly(address[] calldata wallets, bool flag) external onlyOwner { for (uint256 i = 0; i < wallets.length; i++) { boughtEarly[wallets[i]] = flag; } } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner { transferDelayEnabled = false; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 2) / 1000) / (10**decimals()), "Cannot set max buy amount lower than 0.2%" ); maxTxnAmount = newNum * (10**decimals()); emit UpdatedMaxTxnAmount(maxTxnAmount); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 100) / (10**decimals()), "Cannot set max buy amount lower than 0.2%" ); maxWallet = newNum * (10**decimals()); emit UpdatedMaxWallet(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 airdropToWallets( address[] memory wallets, uint256[] memory amountsInTokens ) external onlyOwner { require( wallets.length == amountsInTokens.length, "arrays must be the same length" ); require( wallets.length < 600, "Can only airdrop 600 wallets per txn due to gas limits" ); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input. for (uint256 i = 0; i < wallets.length; i++) { address wallet = wallets[i]; uint256 amount = amountsInTokens[i]; super._transfer(msg.sender, wallet, amount); } } 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 _operationsFee, uint256 _liquidityFee, uint256 _burnFee ) external onlyOwner { buyOperationsFee = _operationsFee; buyLiquidityFee = _liquidityFee; buyBurnFee = _burnFee; buyTotalFees = buyOperationsFee + buyLiquidityFee + buyBurnFee; require(buyTotalFees <= 1500, "Must keep fees at 15% or less"); } function updateSellFees( uint256 _operationsFee, uint256 _liquidityFee, uint256 _burnFee ) external onlyOwner { sellOperationsFee = _operationsFee; sellLiquidityFee = _liquidityFee; sellBurnFee = _burnFee; sellTotalFees = sellOperationsFee + sellLiquidityFee + sellBurnFee; require(sellTotalFees <= 1500, "Must keep fees at 15% 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 (blockForPenaltyEnd > 0) { 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(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. 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 <= maxTxnAmount, "Buy transfer amount exceeds the max txn." ); require( balanceOf(to) + amount <= maxWallet, "Max Wallet Exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTxnAmount, "Sell transfer amount exceeds the max txn." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( balanceOf(to) + amount <= maxWallet, "Max Wallet Exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; if (contractTokenBalance > swapTokensAtAmount * 20) { contractTokenBalance = swapTokensAtAmount * 20; } swapTokensForEthAndSend(contractTokenBalance); 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; uint256 burnTokens = 0; uint256 liquidityTokens = 0; address currentLiquidityAddress; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // bot/sniper penalty. if ( earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && buyTotalFees > 0 ) { if (!boughtEarly[to]) { boughtEarly[to] = true; botsCaught += 1; emit CaughtEarlyBuyer(to); } currentLiquidityAddress = from; fees = (amount * 99) / 100; liquidityTokens = (fees * buyLiquidityFee) / buyTotalFees; burnTokens = (fees * buyBurnFee) / buyTotalFees; } // on sell else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { currentLiquidityAddress = to; fees = (amount * sellTotalFees) / FEE_DIVISOR; liquidityTokens = (fees * sellLiquidityFee) / sellTotalFees; burnTokens = (fees * sellBurnFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { currentLiquidityAddress = from; fees = (amount * buyTotalFees) / FEE_DIVISOR; liquidityTokens = (fees * buyLiquidityFee) / buyTotalFees; burnTokens = (fees * buyBurnFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); if (burnTokens > 0) { _burn(address(this), burnTokens); } if (liquidityTokens > 0) { super._transfer( address(this), currentLiquidityAddress, liquidityTokens ); } } amount -= fees; } super._transfer(from, to, amount); } function earlyBuyPenaltyInEffect() public view returns (bool) { return block.number < blockForPenaltyEnd; } function swapTokensForEthAndSend(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(operationsAddress), block.timestamp ); } function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) { require(_token != address(0), "_token address cannot be 0"); require(_token != address(this), "Can't withdraw native tokens"); 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 setOperationsAddress(address _operationsAddress) external onlyOwner { require( _operationsAddress != address(0), "_operationsAddress address cannot be 0" ); operationsAddress = payable(_operationsAddress); } function resetTaxes() external onlyOwner { buyOperationsFee = 400; buyLiquidityFee = 100; buyTotalFees = buyOperationsFee + buyLiquidityFee; sellOperationsFee = 400; sellLiquidityFee = 100; sellTotalFees = sellOperationsFee + sellLiquidityFee; } function initiateLP(bool confirmAddLp) external onlyOwner { require(confirmAddLp, "Please confirm adding of the LP"); require(!tradingActive, "Trading is already active, cannot relaunch."); // add the liquidity require( address(this).balance > 0, "Must have ETH on contract to launch" ); require( balanceOf(address(this)) > 0, "Must have Tokens on contract to launch" ); _approve(address(this), address(dexRouter), balanceOf(address(this))); dexRouter.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } function removeLP(uint256 percent) external onlyOwner { uint256 lpBalance = IERC20(lpPair).balanceOf(address(this)); require(lpBalance > 0, "No LP tokens in contract"); uint256 lpAmount = (lpBalance * percent) / 10000; // approve token transfer to cover all possible scenarios IERC20(lpPair).approve(address(dexRouter), lpAmount); // remove the liquidity dexRouter.removeLiquidityETH( address(this), lpAmount, 1, // slippage is unavoidable 1, // slippage is unavoidable msg.sender, block.timestamp ); } function launchToken(uint256 blocksForPenalty) 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; blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty; emit EnabledTrading(); // add the liquidity require( address(this).balance > 0, "Must have ETH on contract to launch" ); require( balanceOf(address(this)) > 0, "Must have Tokens on contract to launch" ); _approve(address(this), address(dexRouter), balanceOf(address(this))); dexRouter.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } }
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":"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":[],"name":"RemovedLimits","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":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxTxnAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","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":"buyBurnFee","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":"buyOperationsFee","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 IDexRouter","name":"","type":"address"}],"stateMutability":"view","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":"deadBlocks","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"bool","name":"confirmAddLp","type":"bool"}],"name":"initiateLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launchToken","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"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"massManageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"removeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","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":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","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":"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":[{"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":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","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
6000600c556010805462ffffff1916600190811782556012805460ff1916909117905560809081526f54686520476f6c64656e20466c6f6b6960801b60a052610100604052600460c09081526323a6222360e11b60e0526003620000648382620008ec565b506004620000738282620008ec565b505050600062000088620004e860201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000906000805160206200448a833981519152908290a35033600046600103620000ed5750737a250d5630b4cf539739df2c5dacb4c659f2488d6200015f565b46600403620001125750737a250d5630b4cf539739df2c5dacb4c659f2488d6200015f565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001df9190620009b8565b6001600160a01b031663c9c6539630600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000242573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002689190620009b8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dc9190620009b8565b600980546001600160a01b0319166001600160a01b0392909216918217905562000308906001620004ec565b60095462000321906001600160a01b031660016200054f565b6a084595161401484a0000006103e86200033d82600f62000a00565b62000349919062000a22565b6006556103e86200035c82600f62000a00565b62000368919062000a22565b6007556127106200037b82600162000a00565b62000387919062000a22565b600a55610258601481905561012c60158190556000601681905591620003ae919062000a45565b620003ba919062000a45565b601355610258601881905561012c60198190556000601a81905591620003e1919062000a45565b620003ed919062000a45565b601755620003fd836001620004ec565b6200040a306001620004ec565b6200041961dead6001620004ec565b60085462000432906001600160a01b03166001620004ec565b6200043f836001620005bb565b6200044c306001620005bb565b6200045b61dead6001620005bb565b60085462000474906001600160a01b03166001620005bb565b600b80546001600160a01b031916732c626bcbc6601fb2a6e302f7f4a8defcb89e9004179055620004c0836064620004ae84601962000a00565b620004ba919062000a22565b62000665565b620004d4306064620004ae84604b62000a00565b620004df836200074a565b50505062000a61565b3390565b6001600160a01b0382166000818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601d60205260409020805460ff19168215151790556200057f8282620004ec565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006065760405162461bcd60e51b815260206004820181905260248201526000805160206200446a833981519152604482015260640162000156565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006bd5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000156565b8060026000828254620006d1919062000a45565b90915550506001600160a01b038216600090815260208190526040812080548392906200070090849062000a45565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007955760405162461bcd60e51b815260206004820181905260248201526000805160206200446a833981519152604482015260640162000156565b6001600160a01b038116620007fc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000156565b6005546040516001600160a01b038084169216906000805160206200448a83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200087257607f821691505b6020821081036200089357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008e757600081815260208120601f850160051c81016020861015620008c25750805b601f850160051c820191505b81811015620008e357828155600101620008ce565b5050505b505050565b81516001600160401b0381111562000908576200090862000847565b62000920816200091984546200085d565b8462000899565b602080601f8311600181146200095857600084156200093f5750858301515b600019600386901b1c1916600185901b178555620008e3565b600085815260208120601f198616915b82811015620009895788860151825594840194600190910190840162000968565b5085821015620009a85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009cb57600080fd5b81516001600160a01b0381168114620009e357600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000a1d5762000a1d620009ea565b500290565b60008262000a4057634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a5b5762000a5b620009ea565b92915050565b6139f98062000a716000396000f3fe6080604052600436106103a65760003560e01c806395d89b41116101e7578063cf46f24c1161010d578063e884f260116100a0578063f2fde38b1161006f578063f2fde38b14610a7c578063f5648a4f14610a9c578063f637434214610ab1578063f8b45b0514610ac757600080fd5b8063e884f26014610a1b578063ee40166e14610a30578063efda116514610a46578063f11a24d314610a6657600080fd5b8063e2f45605116100dc578063e2f45605146109ba578063e71dc3f5146109d0578063e7b71ce2146109e6578063e800dff7146109fb57600080fd5b8063cf46f24c14610928578063d257b34f1461093e578063d85ba0631461095e578063dd62ed3e1461097457600080fd5b8063adb873bd11610185578063c024666811610154578063c0246668146108ae578063c17b5b8c146108ce578063c18bc195146108ee578063c876d0b91461090e57600080fd5b8063adb873bd14610829578063b42017fa1461083f578063b62496f51461085f578063bbc0c7421461088f57600080fd5b8063a28e86d3116101c1578063a28e86d3146107be578063a457c2d7146107d3578063a62068ce146107f3578063a9059cbb1461080957600080fd5b806395d89b41146107735780639a7a23d6146107885780639e93ad8e146107a857600080fd5b806358a6d531116102cc578063715018a61161026a57806382aa7c681161023957806382aa7c68146106e55780638366e79a1461070557806385ecfd28146107255780638da5cb5b1461075557600080fd5b8063715018a61461067b578063751039fc146106905780637571336a146106a55780638095d564146106c557600080fd5b80636a486a8e116102a65780636a486a8e1461060f5780636b0a894c146106255780636ddd17131461063b57806370a082311461065b57600080fd5b806358a6d531146105c25780635a139dd4146105d95780636a19197b146105ef57600080fd5b80632307b44111610344578063452ed4f111610313578063452ed4f114610552578063499b8394146105725780634a62bb65146105925780634f77f6c0146105ac57600080fd5b80632307b441146104d657806323b872dd146104f6578063313ce56714610516578063395093511461053257600080fd5b806310d5de531161038057806310d5de5314610445578063130a2c3c1461047557806318160ddd14610497578063203e727e146104b657600080fd5b806306fdde03146103b25780630758d924146103dd578063095ea7b31461041557600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610add565b6040516103d49190613119565b60405180910390f35b3480156103e957600080fd5b506008546103fd906001600160a01b031681565b6040516001600160a01b0390911681526020016103d4565b34801561042157600080fd5b5061043561043036600461317f565b610b6f565b60405190151581526020016103d4565b34801561045157600080fd5b506104356104603660046131ab565b601c6020526000908152604090205460ff1681565b34801561048157600080fd5b506104956104903660046131dd565b610b86565b005b3480156104a357600080fd5b506002545b6040519081526020016103d4565b3480156104c257600080fd5b506104956104d1366004613263565b610c30565b3480156104e257600080fd5b506104956104f1366004613352565b610d02565b34801561050257600080fd5b50610435610511366004613414565b610e5b565b34801561052257600080fd5b50604051601281526020016103d4565b34801561053e57600080fd5b5061043561054d36600461317f565b610f05565b34801561055e57600080fd5b506009546103fd906001600160a01b031681565b34801561057e57600080fd5b5061049561058d3660046131ab565b610f41565b34801561059e57600080fd5b506010546104359060ff1681565b3480156105b857600080fd5b506104a860185481565b3480156105ce57600080fd5b50600d544310610435565b3480156105e557600080fd5b506104a860145481565b3480156105fb57600080fd5b5061049561060a366004613263565b610ff2565b34801561061b57600080fd5b506104a860175481565b34801561063157600080fd5b506104a8600f5481565b34801561064757600080fd5b506010546104359062010000900460ff1681565b34801561066757600080fd5b506104a86106763660046131ab565b611219565b34801561068757600080fd5b50610495611234565b34801561069c57600080fd5b506104956112a8565b3480156106b157600080fd5b506104956106c0366004613455565b611313565b3480156106d157600080fd5b506104956106e036600461348e565b6113db565b3480156106f157600080fd5b50610495610700366004613263565b61147f565b34801561071157600080fd5b506104356107203660046134ba565b611552565b34801561073157600080fd5b506104356107403660046131ab565b600e6020526000908152604090205460ff1681565b34801561076157600080fd5b506005546001600160a01b03166103fd565b34801561077f57600080fd5b506103c761175b565b34801561079457600080fd5b506104956107a3366004613455565b61176a565b3480156107b457600080fd5b506104a861271081565b3480156107ca57600080fd5b5061049561185e565b3480156107df57600080fd5b506104356107ee36600461317f565b611897565b3480156107ff57600080fd5b506104a8600d5481565b34801561081557600080fd5b5061043561082436600461317f565b611930565b34801561083557600080fd5b506104a8601a5481565b34801561084b57600080fd5b5061049561085a3660046134e8565b61193d565b34801561086b57600080fd5b5061043561087a3660046131ab565b601d6020526000908152604090205460ff1681565b34801561089b57600080fd5b5060105461043590610100900460ff1681565b3480156108ba57600080fd5b506104956108c9366004613455565b6119fc565b3480156108da57600080fd5b506104956108e936600461348e565b611a85565b3480156108fa57600080fd5b50610495610909366004613263565b611b29565b34801561091a57600080fd5b506012546104359060ff1681565b34801561093457600080fd5b506104a860065481565b34801561094a57600080fd5b50610495610959366004613263565b611bf3565b34801561096a57600080fd5b506104a860135481565b34801561098057600080fd5b506104a861098f3660046134ba565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109c657600080fd5b506104a8600a5481565b3480156109dc57600080fd5b506104a860165481565b3480156109f257600080fd5b50610495611d3e565b348015610a0757600080fd5b50610495610a16366004613455565b611da0565b348015610a2757600080fd5b50610495611df5565b348015610a3c57600080fd5b506104a8600c5481565b348015610a5257600080fd5b50610495610a61366004613263565b611e2b565b348015610a7257600080fd5b506104a860155481565b348015610a8857600080fd5b50610495610a973660046131ab565b61202c565b348015610aa857600080fd5b50610495612117565b348015610abd57600080fd5b506104a860195481565b348015610ad357600080fd5b506104a860075481565b606060038054610aec90613505565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1890613505565b8015610b655780601f10610b3a57610100808354040283529160200191610b65565b820191906000526020600020905b815481529060010190602001808311610b4857829003601f168201915b5050505050905090565b6000610b7c338484612183565b5060015b92915050565b6005546001600160a01b03163314610bb95760405162461bcd60e51b8152600401610bb09061353f565b60405180910390fd5b60005b82811015610c2a5781600e6000868685818110610bdb57610bdb613574565b9050602002016020810190610bf091906131ab565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610c22816135a0565b915050610bbc565b50505050565b6005546001600160a01b03163314610c5a5760405162461bcd60e51b8152600401610bb09061353f565b610c666012600a61369d565b6103e8610c7260025490565b610c7d9060026136ac565b610c8791906136cb565b610c9191906136cb565b811015610cb05760405162461bcd60e51b8152600401610bb0906136ed565b610cbc6012600a61369d565b610cc690826136ac565b60068190556040519081527f89c099a4e6d77f9ed9839689924c080dcc270b4bc837e2d8979544f19df27d78906020015b60405180910390a150565b6005546001600160a01b03163314610d2c5760405162461bcd60e51b8152600401610bb09061353f565b8051825114610d7d5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610bb0565b610258825110610dee5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610bb0565b60005b8251811015610e56576000838281518110610e0e57610e0e613574565b602002602001015190506000838381518110610e2c57610e2c613574565b60200260200101519050610e413383836122a8565b50508080610e4e906135a0565b915050610df1565b505050565b6000610e688484846123fd565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610eed5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bb0565b610efa8533858403612183565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b7c918590610f3c908690613736565b612183565b6005546001600160a01b03163314610f6b5760405162461bcd60e51b8152600401610bb09061353f565b6001600160a01b038116610fd05760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610bb0565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461101c5760405162461bcd60e51b8152600401610bb09061353f565b601054610100900460ff16156110445760405162461bcd60e51b8152600401610bb090613749565b600a81106110a45760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610bb0565b6010805462ffff0019166201010017905543600c8190556110c6908290613736565b600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600047116111125760405162461bcd60e51b8152600401610bb090613794565b600061111d30611219565b116111795760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610bb0565b6008546111949030906001600160a01b0316610f3c82611219565b6008546001600160a01b031663f305d71947306111b081611219565b60008030426040518863ffffffff1660e01b81526004016111d6969594939291906137d7565b60606040518083038185885af11580156111f4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c2a9190613812565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461125e5760405162461bcd60e51b8152600401610bb09061353f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146112d25760405162461bcd60e51b8152600401610bb09061353f565b6010805460ff199081169091556012805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461133d5760405162461bcd60e51b8152600401610bb09061353f565b806113b0576009546001600160a01b03908116908316036113b05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bb0565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114055760405162461bcd60e51b8152600401610bb09061353f565b6014839055601582905560168190558061141f8385613736565b6114299190613736565b60138190556105dc1015610e565760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610bb0565b6005546001600160a01b031633146114a95760405162461bcd60e51b8152600401610bb09061353f565b601054610100900460ff16156115015760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bb0565b6010805462ffff0019166201010017905543600c819055611523908290613736565b600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b0316331461157f5760405162461bcd60e51b8152600401610bb09061353f565b6001600160a01b0383166115d55760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bb0565b306001600160a01b0384160361162d5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610bb0565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116989190613840565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156116eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170f9190613859565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610aec90613505565b6005546001600160a01b031633146117945760405162461bcd60e51b8152600401610bb09061353f565b6009546001600160a01b03908116908316036118185760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bb0565b6118228282612e00565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146118885760405162461bcd60e51b8152600401610bb09061353f565b6010805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156119195760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bb0565b6119263385858403612183565b5060019392505050565b6000610b7c3384846123fd565b6005546001600160a01b031633146119675760405162461bcd60e51b8152600401610bb09061353f565b806119b45760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610bb0565b601054610100900460ff16156119dc5760405162461bcd60e51b8152600401610bb090613749565b600047116111125760405162461bcd60e51b8152600401610bb090613794565b6005546001600160a01b03163314611a265760405162461bcd60e51b8152600401610bb09061353f565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611aaf5760405162461bcd60e51b8152600401610bb09061353f565b60188390556019829055601a81905580611ac98385613736565b611ad39190613736565b60178190556105dc1015610e565760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610bb0565b6005546001600160a01b03163314611b535760405162461bcd60e51b8152600401610bb09061353f565b611b5f6012600a61369d565b6064611b6a60025490565b611b759060016136ac565b611b7f91906136cb565b611b8991906136cb565b811015611ba85760405162461bcd60e51b8152600401610bb0906136ed565b611bb46012600a61369d565b611bbe90826136ac565b60078190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610cf7565b6005546001600160a01b03163314611c1d5760405162461bcd60e51b8152600401610bb09061353f565b620186a0611c2a60025490565b611c359060016136ac565b611c3f91906136cb565b811015611cac5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bb0565b6103e8611cb860025490565b611cc39060016136ac565b611ccd91906136cb565b811115611d395760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610bb0565b600a55565b6005546001600160a01b03163314611d685760405162461bcd60e51b8152600401610bb09061353f565b610190601481905560646015819055611d8091613736565b601355610190601881905560646019819055611d9b91613736565b601755565b6005546001600160a01b03163314611dca5760405162461bcd60e51b8152600401610bb09061353f565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611e1f5760405162461bcd60e51b8152600401610bb09061353f565b6012805460ff19169055565b6005546001600160a01b03163314611e555760405162461bcd60e51b8152600401610bb09061353f565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec29190613840565b905060008111611f145760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610bb0565b6000612710611f2384846136ac565b611f2d91906136cb565b60095460085460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015611f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa89190613859565b50600854604051629d473b60e21b81526001600160a01b03909116906302751cec90611fe390309085906001908190339042906004016137d7565b60408051808303816000875af1158015612001573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120259190613876565b5050505050565b6005546001600160a01b031633146120565760405162461bcd60e51b8152600401610bb09061353f565b6001600160a01b0381166120bb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146121415760405162461bcd60e51b8152600401610bb09061353f565b604051600090339047908381818185875af1925050503d8060008114610c2a576040519150601f19603f3d011682016040523d82523d6000602084013e610c2a565b6001600160a01b0383166121e55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bb0565b6001600160a01b0382166122465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bb0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166122ce5760405162461bcd60e51b8152600401610bb09061389a565b6001600160a01b0382166122f45760405162461bcd60e51b8152600401610bb0906138df565b6001600160a01b0383166000908152602081905260409020548181101561236c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bb0565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906123a3908490613736565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123ef91815260200190565b60405180910390a350505050565b6001600160a01b0383166124235760405162461bcd60e51b8152600401610bb09061389a565b6001600160a01b0382166124495760405162461bcd60e51b8152600401610bb0906138df565b600081116124995760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bb0565b601054610100900460ff1661252c576001600160a01b0383166000908152601b602052604090205460ff16806124e757506001600160a01b0382166000908152601b602052604090205460ff165b61252c5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bb0565b600d54156125ff576001600160a01b0383166000908152600e602052604090205460ff16158061256957506005546001600160a01b038381169116145b8061257e57506001600160a01b03821661dead145b6125ff5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610bb0565b60105460ff16156129f2576005546001600160a01b0384811691161480159061263657506005546001600160a01b03838116911614155b801561264a57506001600160a01b03821615155b801561266157506001600160a01b03821661dead14155b801561268657506001600160a01b0383166000908152601b602052604090205460ff16155b80156126ab57506001600160a01b0382166000908152601b602052604090205460ff16155b156129f25760125460ff16156127c4576008546001600160a01b038381169116148015906126e757506009546001600160a01b03838116911614155b156127c4576126f7600243613922565b32600090815260116020526040902054108015612735575061271a600243613922565b6001600160a01b038316600090815260116020526040902054105b61279f5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610bb0565b3260009081526011602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601d602052604090205460ff16801561280557506001600160a01b0382166000908152601c602052604090205460ff16155b156128cd5760065481111561286d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc103a3c371760c11b6064820152608401610bb0565b6007548161287a84611219565b6128849190613736565b11156128c85760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bb0565b6129f2565b6001600160a01b0382166000908152601d602052604090205460ff16801561290e57506001600160a01b0383166000908152601c602052604090205460ff16155b15612977576006548111156128c85760405162461bcd60e51b815260206004820152602960248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152681036b0bc103a3c371760b91b6064820152608401610bb0565b6001600160a01b0382166000908152601c602052604090205460ff166129f257600754816129a484611219565b6129ae9190613736565b11156129f25760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bb0565b60006129fd30611219565b600a5490915081108015908190612a1c575060105462010000900460ff165b8015612a325750600954600160a01b900460ff16155b8015612a5757506001600160a01b0385166000908152601d602052604090205460ff16155b8015612a7c57506001600160a01b0385166000908152601b602052604090205460ff16155b8015612aa157506001600160a01b0384166000908152601b602052604090205460ff16155b15612af6576009805460ff60a01b1916600160a01b179055600a54612ac79060146136ac565b821115612adf57600a54612adc9060146136ac565b91505b612ae882612e2e565b6009805460ff60a01b191690555b6001600160a01b0385166000908152601b602052604090205460019060ff1680612b3857506001600160a01b0385166000908152601b602052604090205460ff165b15612b41575060005b6000806000808415612de957600d5443108015612b7657506001600160a01b038a166000908152601d602052604090205460ff165b8015612b9b57506001600160a01b0389166000908152601d602052604090205460ff16155b8015612ba957506000601354115b15612ca3576001600160a01b0389166000908152600e602052604090205460ff16612c49576001600160a01b0389166000908152600e60205260408120805460ff19166001908117909155600f805491929091612c07908490613736565b90915550506040516001600160a01b038a1681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b50886064612c588960636136ac565b612c6291906136cb565b935060135460155485612c7591906136ac565b612c7f91906136cb565b915060135460165485612c9291906136ac565b612c9c91906136cb565b9250612daa565b6001600160a01b0389166000908152601d602052604090205460ff168015612ccd57506000601754115b15612d205788905061271060175489612ce691906136ac565b612cf091906136cb565b935060175460195485612d0391906136ac565b612d0d91906136cb565b9150601754601a5485612c9291906136ac565b6001600160a01b038a166000908152601d602052604090205460ff168015612d4a57506000601354115b15612daa5789905061271060135489612d6391906136ac565b612d6d91906136cb565b935060135460155485612d8091906136ac565b612d8a91906136cb565b915060135460165485612d9d91906136ac565b612da791906136cb565b92505b8315612ddc57612dbb8a30866122a8565b8215612dcb57612dcb3084612f8c565b8115612ddc57612ddc3082846122a8565b612de68489613922565b97505b612df48a8a8a6122a8565b50505050505050505050565b6001600160a01b0382166000908152601d60205260409020805460ff191682151517905561182282826130b6565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e6357612e63613574565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee09190613935565b81600181518110612ef357612ef3613574565b6001600160a01b039283166020918202929092010152600854612f199130911684612183565b600854600b5460405163791ac94760e01b81526001600160a01b039283169263791ac94792612f5692879260009288929116904290600401613952565b600060405180830381600087803b158015612f7057600080fd5b505af1158015612f84573d6000803e3d6000fd5b505050505050565b6001600160a01b038216612fec5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bb0565b6001600160a01b038216600090815260208190526040902054818110156130605760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bb0565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161229b565b6001600160a01b0382166000818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b818110156131465785810183015185820160400152820161312a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461317c57600080fd5b50565b6000806040838503121561319257600080fd5b823561319d81613167565b946020939093013593505050565b6000602082840312156131bd57600080fd5b81356131c881613167565b9392505050565b801515811461317c57600080fd5b6000806000604084860312156131f257600080fd5b833567ffffffffffffffff8082111561320a57600080fd5b818601915086601f83011261321e57600080fd5b81358181111561322d57600080fd5b8760208260051b850101111561324257600080fd5b60209283019550935050840135613258816131cf565b809150509250925092565b60006020828403121561327557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132bb576132bb61327c565b604052919050565b600067ffffffffffffffff8211156132dd576132dd61327c565b5060051b60200190565b600082601f8301126132f857600080fd5b8135602061330d613308836132c3565b613292565b82815260059290921b8401810191818101908684111561332c57600080fd5b8286015b848110156133475780358352918301918301613330565b509695505050505050565b6000806040838503121561336557600080fd5b823567ffffffffffffffff8082111561337d57600080fd5b818501915085601f83011261339157600080fd5b813560206133a1613308836132c3565b82815260059290921b840181019181810190898411156133c057600080fd5b948201945b838610156133e75785356133d881613167565b825294820194908201906133c5565b965050860135925050808211156133fd57600080fd5b5061340a858286016132e7565b9150509250929050565b60008060006060848603121561342957600080fd5b833561343481613167565b9250602084013561344481613167565b929592945050506040919091013590565b6000806040838503121561346857600080fd5b823561347381613167565b91506020830135613483816131cf565b809150509250929050565b6000806000606084860312156134a357600080fd5b505081359360208301359350604090920135919050565b600080604083850312156134cd57600080fd5b82356134d881613167565b9150602083013561348381613167565b6000602082840312156134fa57600080fd5b81356131c8816131cf565b600181811c9082168061351957607f821691505b60208210810361353957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016135b2576135b261358a565b5060010190565b600181815b808511156135f45781600019048211156135da576135da61358a565b808516156135e757918102915b93841c93908002906135be565b509250929050565b60008261360b57506001610b80565b8161361857506000610b80565b816001811461362e576002811461363857613654565b6001915050610b80565b60ff8411156136495761364961358a565b50506001821b610b80565b5060208310610133831016604e8410600b8410161715613677575081810a610b80565b61368183836135b9565b80600019048211156136955761369561358a565b029392505050565b60006131c860ff8416836135fc565b60008160001904831182151516156136c6576136c661358a565b500290565b6000826136e857634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206040820152687468616e20302e322560b81b606082015260800190565b80820180821115610b8057610b8061358a565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561382757600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561385257600080fd5b5051919050565b60006020828403121561386b57600080fd5b81516131c8816131cf565b6000806040838503121561388957600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b8057610b8061358a565b60006020828403121561394757600080fd5b81516131c881613167565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139a25784516001600160a01b03168352938301939183019160010161397d565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e7059bf4681bdbbe8a7d74e3eed1e69538b05aa9bf57b3671a926fccd144d6cb64736f6c634300081000334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
Deployed Bytecode
0x6080604052600436106103a65760003560e01c806395d89b41116101e7578063cf46f24c1161010d578063e884f260116100a0578063f2fde38b1161006f578063f2fde38b14610a7c578063f5648a4f14610a9c578063f637434214610ab1578063f8b45b0514610ac757600080fd5b8063e884f26014610a1b578063ee40166e14610a30578063efda116514610a46578063f11a24d314610a6657600080fd5b8063e2f45605116100dc578063e2f45605146109ba578063e71dc3f5146109d0578063e7b71ce2146109e6578063e800dff7146109fb57600080fd5b8063cf46f24c14610928578063d257b34f1461093e578063d85ba0631461095e578063dd62ed3e1461097457600080fd5b8063adb873bd11610185578063c024666811610154578063c0246668146108ae578063c17b5b8c146108ce578063c18bc195146108ee578063c876d0b91461090e57600080fd5b8063adb873bd14610829578063b42017fa1461083f578063b62496f51461085f578063bbc0c7421461088f57600080fd5b8063a28e86d3116101c1578063a28e86d3146107be578063a457c2d7146107d3578063a62068ce146107f3578063a9059cbb1461080957600080fd5b806395d89b41146107735780639a7a23d6146107885780639e93ad8e146107a857600080fd5b806358a6d531116102cc578063715018a61161026a57806382aa7c681161023957806382aa7c68146106e55780638366e79a1461070557806385ecfd28146107255780638da5cb5b1461075557600080fd5b8063715018a61461067b578063751039fc146106905780637571336a146106a55780638095d564146106c557600080fd5b80636a486a8e116102a65780636a486a8e1461060f5780636b0a894c146106255780636ddd17131461063b57806370a082311461065b57600080fd5b806358a6d531146105c25780635a139dd4146105d95780636a19197b146105ef57600080fd5b80632307b44111610344578063452ed4f111610313578063452ed4f114610552578063499b8394146105725780634a62bb65146105925780634f77f6c0146105ac57600080fd5b80632307b441146104d657806323b872dd146104f6578063313ce56714610516578063395093511461053257600080fd5b806310d5de531161038057806310d5de5314610445578063130a2c3c1461047557806318160ddd14610497578063203e727e146104b657600080fd5b806306fdde03146103b25780630758d924146103dd578063095ea7b31461041557600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610add565b6040516103d49190613119565b60405180910390f35b3480156103e957600080fd5b506008546103fd906001600160a01b031681565b6040516001600160a01b0390911681526020016103d4565b34801561042157600080fd5b5061043561043036600461317f565b610b6f565b60405190151581526020016103d4565b34801561045157600080fd5b506104356104603660046131ab565b601c6020526000908152604090205460ff1681565b34801561048157600080fd5b506104956104903660046131dd565b610b86565b005b3480156104a357600080fd5b506002545b6040519081526020016103d4565b3480156104c257600080fd5b506104956104d1366004613263565b610c30565b3480156104e257600080fd5b506104956104f1366004613352565b610d02565b34801561050257600080fd5b50610435610511366004613414565b610e5b565b34801561052257600080fd5b50604051601281526020016103d4565b34801561053e57600080fd5b5061043561054d36600461317f565b610f05565b34801561055e57600080fd5b506009546103fd906001600160a01b031681565b34801561057e57600080fd5b5061049561058d3660046131ab565b610f41565b34801561059e57600080fd5b506010546104359060ff1681565b3480156105b857600080fd5b506104a860185481565b3480156105ce57600080fd5b50600d544310610435565b3480156105e557600080fd5b506104a860145481565b3480156105fb57600080fd5b5061049561060a366004613263565b610ff2565b34801561061b57600080fd5b506104a860175481565b34801561063157600080fd5b506104a8600f5481565b34801561064757600080fd5b506010546104359062010000900460ff1681565b34801561066757600080fd5b506104a86106763660046131ab565b611219565b34801561068757600080fd5b50610495611234565b34801561069c57600080fd5b506104956112a8565b3480156106b157600080fd5b506104956106c0366004613455565b611313565b3480156106d157600080fd5b506104956106e036600461348e565b6113db565b3480156106f157600080fd5b50610495610700366004613263565b61147f565b34801561071157600080fd5b506104356107203660046134ba565b611552565b34801561073157600080fd5b506104356107403660046131ab565b600e6020526000908152604090205460ff1681565b34801561076157600080fd5b506005546001600160a01b03166103fd565b34801561077f57600080fd5b506103c761175b565b34801561079457600080fd5b506104956107a3366004613455565b61176a565b3480156107b457600080fd5b506104a861271081565b3480156107ca57600080fd5b5061049561185e565b3480156107df57600080fd5b506104356107ee36600461317f565b611897565b3480156107ff57600080fd5b506104a8600d5481565b34801561081557600080fd5b5061043561082436600461317f565b611930565b34801561083557600080fd5b506104a8601a5481565b34801561084b57600080fd5b5061049561085a3660046134e8565b61193d565b34801561086b57600080fd5b5061043561087a3660046131ab565b601d6020526000908152604090205460ff1681565b34801561089b57600080fd5b5060105461043590610100900460ff1681565b3480156108ba57600080fd5b506104956108c9366004613455565b6119fc565b3480156108da57600080fd5b506104956108e936600461348e565b611a85565b3480156108fa57600080fd5b50610495610909366004613263565b611b29565b34801561091a57600080fd5b506012546104359060ff1681565b34801561093457600080fd5b506104a860065481565b34801561094a57600080fd5b50610495610959366004613263565b611bf3565b34801561096a57600080fd5b506104a860135481565b34801561098057600080fd5b506104a861098f3660046134ba565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109c657600080fd5b506104a8600a5481565b3480156109dc57600080fd5b506104a860165481565b3480156109f257600080fd5b50610495611d3e565b348015610a0757600080fd5b50610495610a16366004613455565b611da0565b348015610a2757600080fd5b50610495611df5565b348015610a3c57600080fd5b506104a8600c5481565b348015610a5257600080fd5b50610495610a61366004613263565b611e2b565b348015610a7257600080fd5b506104a860155481565b348015610a8857600080fd5b50610495610a973660046131ab565b61202c565b348015610aa857600080fd5b50610495612117565b348015610abd57600080fd5b506104a860195481565b348015610ad357600080fd5b506104a860075481565b606060038054610aec90613505565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1890613505565b8015610b655780601f10610b3a57610100808354040283529160200191610b65565b820191906000526020600020905b815481529060010190602001808311610b4857829003601f168201915b5050505050905090565b6000610b7c338484612183565b5060015b92915050565b6005546001600160a01b03163314610bb95760405162461bcd60e51b8152600401610bb09061353f565b60405180910390fd5b60005b82811015610c2a5781600e6000868685818110610bdb57610bdb613574565b9050602002016020810190610bf091906131ab565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610c22816135a0565b915050610bbc565b50505050565b6005546001600160a01b03163314610c5a5760405162461bcd60e51b8152600401610bb09061353f565b610c666012600a61369d565b6103e8610c7260025490565b610c7d9060026136ac565b610c8791906136cb565b610c9191906136cb565b811015610cb05760405162461bcd60e51b8152600401610bb0906136ed565b610cbc6012600a61369d565b610cc690826136ac565b60068190556040519081527f89c099a4e6d77f9ed9839689924c080dcc270b4bc837e2d8979544f19df27d78906020015b60405180910390a150565b6005546001600160a01b03163314610d2c5760405162461bcd60e51b8152600401610bb09061353f565b8051825114610d7d5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610bb0565b610258825110610dee5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610bb0565b60005b8251811015610e56576000838281518110610e0e57610e0e613574565b602002602001015190506000838381518110610e2c57610e2c613574565b60200260200101519050610e413383836122a8565b50508080610e4e906135a0565b915050610df1565b505050565b6000610e688484846123fd565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610eed5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bb0565b610efa8533858403612183565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b7c918590610f3c908690613736565b612183565b6005546001600160a01b03163314610f6b5760405162461bcd60e51b8152600401610bb09061353f565b6001600160a01b038116610fd05760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610bb0565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461101c5760405162461bcd60e51b8152600401610bb09061353f565b601054610100900460ff16156110445760405162461bcd60e51b8152600401610bb090613749565b600a81106110a45760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610bb0565b6010805462ffff0019166201010017905543600c8190556110c6908290613736565b600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600047116111125760405162461bcd60e51b8152600401610bb090613794565b600061111d30611219565b116111795760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610bb0565b6008546111949030906001600160a01b0316610f3c82611219565b6008546001600160a01b031663f305d71947306111b081611219565b60008030426040518863ffffffff1660e01b81526004016111d6969594939291906137d7565b60606040518083038185885af11580156111f4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c2a9190613812565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461125e5760405162461bcd60e51b8152600401610bb09061353f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146112d25760405162461bcd60e51b8152600401610bb09061353f565b6010805460ff199081169091556012805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461133d5760405162461bcd60e51b8152600401610bb09061353f565b806113b0576009546001600160a01b03908116908316036113b05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bb0565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114055760405162461bcd60e51b8152600401610bb09061353f565b6014839055601582905560168190558061141f8385613736565b6114299190613736565b60138190556105dc1015610e565760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610bb0565b6005546001600160a01b031633146114a95760405162461bcd60e51b8152600401610bb09061353f565b601054610100900460ff16156115015760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bb0565b6010805462ffff0019166201010017905543600c819055611523908290613736565b600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b0316331461157f5760405162461bcd60e51b8152600401610bb09061353f565b6001600160a01b0383166115d55760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bb0565b306001600160a01b0384160361162d5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610bb0565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116989190613840565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156116eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170f9190613859565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610aec90613505565b6005546001600160a01b031633146117945760405162461bcd60e51b8152600401610bb09061353f565b6009546001600160a01b03908116908316036118185760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bb0565b6118228282612e00565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146118885760405162461bcd60e51b8152600401610bb09061353f565b6010805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156119195760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bb0565b6119263385858403612183565b5060019392505050565b6000610b7c3384846123fd565b6005546001600160a01b031633146119675760405162461bcd60e51b8152600401610bb09061353f565b806119b45760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610bb0565b601054610100900460ff16156119dc5760405162461bcd60e51b8152600401610bb090613749565b600047116111125760405162461bcd60e51b8152600401610bb090613794565b6005546001600160a01b03163314611a265760405162461bcd60e51b8152600401610bb09061353f565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611aaf5760405162461bcd60e51b8152600401610bb09061353f565b60188390556019829055601a81905580611ac98385613736565b611ad39190613736565b60178190556105dc1015610e565760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610bb0565b6005546001600160a01b03163314611b535760405162461bcd60e51b8152600401610bb09061353f565b611b5f6012600a61369d565b6064611b6a60025490565b611b759060016136ac565b611b7f91906136cb565b611b8991906136cb565b811015611ba85760405162461bcd60e51b8152600401610bb0906136ed565b611bb46012600a61369d565b611bbe90826136ac565b60078190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610cf7565b6005546001600160a01b03163314611c1d5760405162461bcd60e51b8152600401610bb09061353f565b620186a0611c2a60025490565b611c359060016136ac565b611c3f91906136cb565b811015611cac5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bb0565b6103e8611cb860025490565b611cc39060016136ac565b611ccd91906136cb565b811115611d395760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610bb0565b600a55565b6005546001600160a01b03163314611d685760405162461bcd60e51b8152600401610bb09061353f565b610190601481905560646015819055611d8091613736565b601355610190601881905560646019819055611d9b91613736565b601755565b6005546001600160a01b03163314611dca5760405162461bcd60e51b8152600401610bb09061353f565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611e1f5760405162461bcd60e51b8152600401610bb09061353f565b6012805460ff19169055565b6005546001600160a01b03163314611e555760405162461bcd60e51b8152600401610bb09061353f565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec29190613840565b905060008111611f145760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610bb0565b6000612710611f2384846136ac565b611f2d91906136cb565b60095460085460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015611f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa89190613859565b50600854604051629d473b60e21b81526001600160a01b03909116906302751cec90611fe390309085906001908190339042906004016137d7565b60408051808303816000875af1158015612001573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120259190613876565b5050505050565b6005546001600160a01b031633146120565760405162461bcd60e51b8152600401610bb09061353f565b6001600160a01b0381166120bb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146121415760405162461bcd60e51b8152600401610bb09061353f565b604051600090339047908381818185875af1925050503d8060008114610c2a576040519150601f19603f3d011682016040523d82523d6000602084013e610c2a565b6001600160a01b0383166121e55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bb0565b6001600160a01b0382166122465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bb0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166122ce5760405162461bcd60e51b8152600401610bb09061389a565b6001600160a01b0382166122f45760405162461bcd60e51b8152600401610bb0906138df565b6001600160a01b0383166000908152602081905260409020548181101561236c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bb0565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906123a3908490613736565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123ef91815260200190565b60405180910390a350505050565b6001600160a01b0383166124235760405162461bcd60e51b8152600401610bb09061389a565b6001600160a01b0382166124495760405162461bcd60e51b8152600401610bb0906138df565b600081116124995760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bb0565b601054610100900460ff1661252c576001600160a01b0383166000908152601b602052604090205460ff16806124e757506001600160a01b0382166000908152601b602052604090205460ff165b61252c5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bb0565b600d54156125ff576001600160a01b0383166000908152600e602052604090205460ff16158061256957506005546001600160a01b038381169116145b8061257e57506001600160a01b03821661dead145b6125ff5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610bb0565b60105460ff16156129f2576005546001600160a01b0384811691161480159061263657506005546001600160a01b03838116911614155b801561264a57506001600160a01b03821615155b801561266157506001600160a01b03821661dead14155b801561268657506001600160a01b0383166000908152601b602052604090205460ff16155b80156126ab57506001600160a01b0382166000908152601b602052604090205460ff16155b156129f25760125460ff16156127c4576008546001600160a01b038381169116148015906126e757506009546001600160a01b03838116911614155b156127c4576126f7600243613922565b32600090815260116020526040902054108015612735575061271a600243613922565b6001600160a01b038316600090815260116020526040902054105b61279f5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610bb0565b3260009081526011602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601d602052604090205460ff16801561280557506001600160a01b0382166000908152601c602052604090205460ff16155b156128cd5760065481111561286d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc103a3c371760c11b6064820152608401610bb0565b6007548161287a84611219565b6128849190613736565b11156128c85760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bb0565b6129f2565b6001600160a01b0382166000908152601d602052604090205460ff16801561290e57506001600160a01b0383166000908152601c602052604090205460ff16155b15612977576006548111156128c85760405162461bcd60e51b815260206004820152602960248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152681036b0bc103a3c371760b91b6064820152608401610bb0565b6001600160a01b0382166000908152601c602052604090205460ff166129f257600754816129a484611219565b6129ae9190613736565b11156129f25760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bb0565b60006129fd30611219565b600a5490915081108015908190612a1c575060105462010000900460ff165b8015612a325750600954600160a01b900460ff16155b8015612a5757506001600160a01b0385166000908152601d602052604090205460ff16155b8015612a7c57506001600160a01b0385166000908152601b602052604090205460ff16155b8015612aa157506001600160a01b0384166000908152601b602052604090205460ff16155b15612af6576009805460ff60a01b1916600160a01b179055600a54612ac79060146136ac565b821115612adf57600a54612adc9060146136ac565b91505b612ae882612e2e565b6009805460ff60a01b191690555b6001600160a01b0385166000908152601b602052604090205460019060ff1680612b3857506001600160a01b0385166000908152601b602052604090205460ff165b15612b41575060005b6000806000808415612de957600d5443108015612b7657506001600160a01b038a166000908152601d602052604090205460ff165b8015612b9b57506001600160a01b0389166000908152601d602052604090205460ff16155b8015612ba957506000601354115b15612ca3576001600160a01b0389166000908152600e602052604090205460ff16612c49576001600160a01b0389166000908152600e60205260408120805460ff19166001908117909155600f805491929091612c07908490613736565b90915550506040516001600160a01b038a1681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b50886064612c588960636136ac565b612c6291906136cb565b935060135460155485612c7591906136ac565b612c7f91906136cb565b915060135460165485612c9291906136ac565b612c9c91906136cb565b9250612daa565b6001600160a01b0389166000908152601d602052604090205460ff168015612ccd57506000601754115b15612d205788905061271060175489612ce691906136ac565b612cf091906136cb565b935060175460195485612d0391906136ac565b612d0d91906136cb565b9150601754601a5485612c9291906136ac565b6001600160a01b038a166000908152601d602052604090205460ff168015612d4a57506000601354115b15612daa5789905061271060135489612d6391906136ac565b612d6d91906136cb565b935060135460155485612d8091906136ac565b612d8a91906136cb565b915060135460165485612d9d91906136ac565b612da791906136cb565b92505b8315612ddc57612dbb8a30866122a8565b8215612dcb57612dcb3084612f8c565b8115612ddc57612ddc3082846122a8565b612de68489613922565b97505b612df48a8a8a6122a8565b50505050505050505050565b6001600160a01b0382166000908152601d60205260409020805460ff191682151517905561182282826130b6565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e6357612e63613574565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee09190613935565b81600181518110612ef357612ef3613574565b6001600160a01b039283166020918202929092010152600854612f199130911684612183565b600854600b5460405163791ac94760e01b81526001600160a01b039283169263791ac94792612f5692879260009288929116904290600401613952565b600060405180830381600087803b158015612f7057600080fd5b505af1158015612f84573d6000803e3d6000fd5b505050505050565b6001600160a01b038216612fec5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bb0565b6001600160a01b038216600090815260208190526040902054818110156130605760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bb0565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161229b565b6001600160a01b0382166000818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b818110156131465785810183015185820160400152820161312a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461317c57600080fd5b50565b6000806040838503121561319257600080fd5b823561319d81613167565b946020939093013593505050565b6000602082840312156131bd57600080fd5b81356131c881613167565b9392505050565b801515811461317c57600080fd5b6000806000604084860312156131f257600080fd5b833567ffffffffffffffff8082111561320a57600080fd5b818601915086601f83011261321e57600080fd5b81358181111561322d57600080fd5b8760208260051b850101111561324257600080fd5b60209283019550935050840135613258816131cf565b809150509250925092565b60006020828403121561327557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132bb576132bb61327c565b604052919050565b600067ffffffffffffffff8211156132dd576132dd61327c565b5060051b60200190565b600082601f8301126132f857600080fd5b8135602061330d613308836132c3565b613292565b82815260059290921b8401810191818101908684111561332c57600080fd5b8286015b848110156133475780358352918301918301613330565b509695505050505050565b6000806040838503121561336557600080fd5b823567ffffffffffffffff8082111561337d57600080fd5b818501915085601f83011261339157600080fd5b813560206133a1613308836132c3565b82815260059290921b840181019181810190898411156133c057600080fd5b948201945b838610156133e75785356133d881613167565b825294820194908201906133c5565b965050860135925050808211156133fd57600080fd5b5061340a858286016132e7565b9150509250929050565b60008060006060848603121561342957600080fd5b833561343481613167565b9250602084013561344481613167565b929592945050506040919091013590565b6000806040838503121561346857600080fd5b823561347381613167565b91506020830135613483816131cf565b809150509250929050565b6000806000606084860312156134a357600080fd5b505081359360208301359350604090920135919050565b600080604083850312156134cd57600080fd5b82356134d881613167565b9150602083013561348381613167565b6000602082840312156134fa57600080fd5b81356131c8816131cf565b600181811c9082168061351957607f821691505b60208210810361353957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016135b2576135b261358a565b5060010190565b600181815b808511156135f45781600019048211156135da576135da61358a565b808516156135e757918102915b93841c93908002906135be565b509250929050565b60008261360b57506001610b80565b8161361857506000610b80565b816001811461362e576002811461363857613654565b6001915050610b80565b60ff8411156136495761364961358a565b50506001821b610b80565b5060208310610133831016604e8410600b8410161715613677575081810a610b80565b61368183836135b9565b80600019048211156136955761369561358a565b029392505050565b60006131c860ff8416836135fc565b60008160001904831182151516156136c6576136c661358a565b500290565b6000826136e857634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206040820152687468616e20302e322560b81b606082015260800190565b80820180821115610b8057610b8061358a565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561382757600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561385257600080fd5b5051919050565b60006020828403121561386b57600080fd5b81516131c8816131cf565b6000806040838503121561388957600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b8057610b8061358a565b60006020828403121561394757600080fd5b81516131c881613167565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139a25784516001600160a01b03168352938301939183019160010161397d565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e7059bf4681bdbbe8a7d74e3eed1e69538b05aa9bf57b3671a926fccd144d6cb64736f6c63430008100033
Deployed Bytecode Sourcemap
10909:20947:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4025:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11025:27;;;;;;;;;;-1:-1:-1;11025:27:0;;;;-1:-1:-1;;;;;11025:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;11025:27:0;567:221:1;5080:210:0;;;;;;;;;;-1:-1:-1;5080:210:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;5080:210:0;1249:187:1;12222:63:0;;;;;;;;;;-1:-1:-1;12222:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16263:232;;;;;;;;;;-1:-1:-1;16263:232:0;;;;;:::i;:::-;;:::i;:::-;;4346:108;;;;;;;;;;-1:-1:-1;4434:12:0;;4346:108;;;2717:25:1;;;2705:2;2690:18;4346:108:0;2571:177:1;16662:330:0;;;;;;;;;;-1:-1:-1;16662:330:0;;;;;:::i;:::-;;:::i;18058:719::-;;;;;;;;;;-1:-1:-1;18058:719:0;;;;;:::i;:::-;;:::i;5298:529::-;;;;;;;;;;-1:-1:-1;5298:529:0;;;;;:::i;:::-;;:::i;4245:93::-;;;;;;;;;;-1:-1:-1;4245:93:0;;4328:2;6028:36:1;;6016:2;6001:18;4245:93:0;5886:184:1;5835:297:0;;;;;;;;;;-1:-1:-1;5835:297:0;;;;;:::i;:::-;;:::i;11059:21::-;;;;;;;;;;-1:-1:-1;11059:21:0;;;;-1:-1:-1;;;;;11059:21:0;;;28513:297;;;;;;;;;;-1:-1:-1;28513:297:0;;;;;:::i;:::-;;:::i;11394:33::-;;;;;;;;;;-1:-1:-1;11394:33:0;;;;;;;;11918:32;;;;;;;;;;;;;;;;27034:121;;;;;;;;;;-1:-1:-1;27129:18:0;;27114:12;:33;27034:121;;11774:31;;;;;;;;;;;;;;;;30679:1174;;;;;;;;;;-1:-1:-1;30679:1174:0;;;;;:::i;:::-;;:::i;11883:28::-;;;;;;;;;;;;;;;;11360:25;;;;;;;;;;;;;;;;11474:31;;;;;;;;;;-1:-1:-1;11474:31:0;;;;;;;;;;;4462:177;;;;;;;;;;-1:-1:-1;4462:177:0;;;;;:::i;:::-;;:::i;9114:150::-;;;;;;;;;;;;;:::i;15883:154::-;;;;;;;;;;;;;:::i;18785:334::-;;;;;;;;;;-1:-1:-1;18785:334:0;;;;;:::i;:::-;;:::i;19738:413::-;;;;;;;;;;-1:-1:-1;19738:413:0;;;;;:::i;:::-;;:::i;15501:330::-;;;;;;;;;;-1:-1:-1;15501:330:0;;;;;:::i;:::-;;:::i;27762:488::-;;;;;;;;;;-1:-1:-1;27762:488:0;;;;;:::i;:::-;;:::i;11310:43::-;;;;;;;;;;-1:-1:-1;11310:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8900:79;;;;;;;;;;-1:-1:-1;8965:6:0;;-1:-1:-1;;;;;8965:6:0;8900:79;;4133:104;;;;;;;;;;;;;:::i;19127:355::-;;;;;;;;;;-1:-1:-1;19127:355:0;;;;;:::i;:::-;;:::i;12030:43::-;;;;;;;;;;;;12068:5;12030:43;;16045:84;;;;;;;;;;;;;:::i;6140:482::-;;;;;;;;;;-1:-1:-1;6140:482:0;;;;;:::i;:::-;;:::i;11270:33::-;;;;;;;;;;;;;;;;4647:216;;;;;;;;;;-1:-1:-1;4647:216:0;;;;;:::i;:::-;;:::i;11995:26::-;;;;;;;;;;;;;;;;29132:866;;;;;;;;;;-1:-1:-1;29132:866:0;;;;;:::i;:::-;;:::i;12443:57::-;;;;;;;;;;-1:-1:-1;12443:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11434:33;;;;;;;;;;-1:-1:-1;11434:33:0;;;;;;;;;;;20589:182;;;;;;;;;;-1:-1:-1;20589:182:0;;;;;:::i;:::-;;:::i;20159:422::-;;;;;;;;;;-1:-1:-1;20159:422:0;;;;;:::i;:::-;;:::i;17000:323::-;;;;;;;;;;-1:-1:-1;17000:323:0;;;;;:::i;:::-;;:::i;11692:39::-;;;;;;;;;;-1:-1:-1;11692:39:0;;;;;;;;10958:27;;;;;;;;;;;;;;;;17393:428;;;;;;;;;;-1:-1:-1;17393:428:0;;;;;:::i;:::-;;:::i;11740:27::-;;;;;;;;;;;;;;;;4871:201;;;;;;;;;;-1:-1:-1;4871:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5037:18:0;;;5005:7;5037:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4871:201;11117:33;;;;;;;;;;;;;;;;11849:25;;;;;;;;;;;;;;;;28818:306;;;;;;;;;;;;;:::i;16137:118::-;;;;;;;;;;-1:-1:-1;16137:118:0;;;;;:::i;:::-;;:::i;16556:98::-;;;;;;;;;;;;;:::i;11193:37::-;;;;;;;;;;;;;;;;30006:665;;;;;;;;;;-1:-1:-1;30006:665:0;;;;;:::i;:::-;;:::i;11812:30::-;;;;;;;;;;;;;;;;9272:281;;;;;;;;;;-1:-1:-1;9272:281:0;;;;;:::i;:::-;;:::i;28320:185::-;;;;;;;;;;;;;:::i;11957:31::-;;;;;;;;;;;;;;;;10992:24;;;;;;;;;;;;;;;;4025:100;4079:13;4112:5;4105:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4025:100;:::o;5080:210::-;5199:4;5221:39;175:10;5244:7;5253:6;5221:8;:39::i;:::-;-1:-1:-1;5278:4:0;5080:210;;;;;:::o;16263:232::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;;;;;;;;;16391:9:::1;16386:102;16406:18:::0;;::::1;16386:102;;;16472:4;16446:11;:23;16458:7;;16466:1;16458:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16446:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16446:23:0;:30;;-1:-1:-1;;16446:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16426:3;::::1;::::0;::::1;:::i;:::-;;;;16386:102;;;;16263:232:::0;;;:::o;16662:330::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;16800:14:::1;4328:2:::0;16800::::1;:14;:::i;:::-;16791:4;16770:13;4434:12:::0;;;4346:108;16770:13:::1;:17;::::0;16786:1:::1;16770:17;:::i;:::-;16769:26;;;;:::i;:::-;16768:47;;;;:::i;:::-;16758:6;:57;;16736:148;;;;-1:-1:-1::0;;;16736:148:0::1;;;;;;;:::i;:::-;16920:14;4328:2:::0;16920::::1;:14;:::i;:::-;16910:25;::::0;:6;:25:::1;:::i;:::-;16895:12;:40:::0;;;16951:33:::1;::::0;2717:25:1;;;16951:33:0::1;::::0;2705:2:1;2690:18;16951:33:0::1;;;;;;;;16662:330:::0;:::o;18058:719::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;18239:15:::1;:22;18221:7;:14;:40;18199:120;;;::::0;-1:-1:-1;;;18199:120:0;;11170:2:1;18199:120:0::1;::::0;::::1;11152:21:1::0;11209:2;11189:18;;;11182:30;11248:32;11228:18;;;11221:60;11298:18;;18199:120:0::1;10968:354:1::0;18199:120:0::1;18369:3;18352:7;:14;:20;18330:124;;;::::0;-1:-1:-1;;;18330:124:0;;11529:2:1;18330:124:0::1;::::0;::::1;11511:21:1::0;11568:2;11548:18;;;11541:30;11607:34;11587:18;;;11580:62;-1:-1:-1;;;11658:18:1;;;11651:52;11720:19;;18330:124:0::1;11327:418:1::0;18330:124:0::1;18568:9;18563:207;18587:7;:14;18583:1;:18;18563:207;;;18623:14;18640:7;18648:1;18640:10;;;;;;;;:::i;:::-;;;;;;;18623:27;;18665:14;18682:15;18698:1;18682:18;;;;;;;;:::i;:::-;;;;;;;18665:35;;18715:43;18731:10;18743:6;18751;18715:15;:43::i;:::-;18608:162;;18603:3;;;;;:::i;:::-;;;;18563:207;;;;18058:719:::0;;:::o;5298:529::-;5438:4;5455:36;5465:6;5473:9;5484:6;5455:9;:36::i;:::-;-1:-1:-1;;;;;5531:19:0;;5504:24;5531:19;;;:11;:19;;;;;;;;175:10;5531:33;;;;;;;;5597:26;;;;5575:116;;;;-1:-1:-1;;;5575:116:0;;11952:2:1;5575:116:0;;;11934:21:1;11991:2;11971:18;;;11964:30;12030:34;12010:18;;;12003:62;-1:-1:-1;;;12081:18:1;;;12074:38;12129:19;;5575:116:0;11750:404:1;5575:116:0;5727:57;5736:6;175:10;5777:6;5758:16;:25;5727:8;:57::i;:::-;-1:-1:-1;5815:4:0;;5298:529;-1:-1:-1;;;;5298:529:0:o;5835:297::-;175:10;5950:4;6044:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6044:34:0;;;;;;;;;;5950:4;;5972:130;;6022:7;;6044:47;;6081:10;;6044:47;:::i;:::-;5972:8;:130::i;28513:297::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28646:32:0;::::1;28624:120;;;::::0;-1:-1:-1;;;28624:120:0;;12491:2:1;28624:120:0::1;::::0;::::1;12473:21:1::0;12530:2;12510:18;;;12503:30;12569:34;12549:18;;;12542:62;-1:-1:-1;;;12620:18:1;;;12613:36;12666:19;;28624:120:0::1;12289:402:1::0;28624:120:0::1;28755:17;:47:::0;;-1:-1:-1;;;;;;28755:47:0::1;-1:-1:-1::0;;;;;28755:47:0;;;::::1;::::0;;;::::1;::::0;;28513:297::o;30679:1174::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;30765:13:::1;::::0;::::1;::::0;::::1;;;30764:14;30756:70;;;;-1:-1:-1::0;;;30756:70:0::1;;;;;;;:::i;:::-;30878:2;30859:16;:21;30837:110;;;::::0;-1:-1:-1;;;30837:110:0;;13310:2:1;30837:110:0::1;::::0;::::1;13292:21:1::0;13349:2;13329:18;;;13322:30;13388:34;13368:18;;;13361:62;-1:-1:-1;;;13439:18:1;;;13432:37;13486:19;;30837:110:0::1;13108:403:1::0;30837:110:0::1;30995:13;:20:::0;;-1:-1:-1;;31026:18:0;;;;;31076:12:::1;31055:18;:33:::0;;;31120:37:::1;::::0;31141:16;;31120:37:::1;:::i;:::-;31099:18;:58:::0;31173:16:::1;::::0;::::1;::::0;;;::::1;31280:1;31256:21;:25;31234:110;;;;-1:-1:-1::0;;;31234:110:0::1;;;;;;;:::i;:::-;31406:1;31379:24;31397:4;31379:9;:24::i;:::-;:28;31357:116;;;::::0;-1:-1:-1;;;31357:116:0;;14122:2:1;31357:116:0::1;::::0;::::1;14104:21:1::0;14161:2;14141:18;;;14134:30;14200:34;14180:18;;;14173:62;-1:-1:-1;;;14251:18:1;;;14244:36;14297:19;;31357:116:0::1;13920:402:1::0;31357:116:0::1;31518:9;::::0;31486:69:::1;::::0;31503:4:::1;::::0;-1:-1:-1;;;;;31518:9:0::1;31530:24;31503:4:::0;31530:9:::1;:24::i;31486:69::-;31568:9;::::0;-1:-1:-1;;;;;31568:9:0::1;:25;31601:21;31646:4;31666:24;31646:4:::0;31666:9:::1;:24::i;:::-;31705:1;31748::::0;31799:4:::1;31819:15;31568:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4462:177::-:0;-1:-1:-1;;;;;4613:18:0;4581:7;4613:18;;;;;;;;;;;;4462:177::o;9114:150::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;9207:6:::1;::::0;9186:40:::1;::::0;9223:1:::1;::::0;-1:-1:-1;;;;;9207:6:0::1;::::0;9186:40:::1;::::0;9223:1;;9186:40:::1;9237:6;:19:::0;;-1:-1:-1;;;;;;9237:19:0::1;::::0;;9114:150::o;15883:154::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;15937:14:::1;:22:::0;;-1:-1:-1;;15937:22:0;;::::1;::::0;;;15970:20:::1;:28:::0;;;;::::1;::::0;;16014:15:::1;::::0;::::1;::::0;15954:5:::1;::::0;16014:15:::1;15883:154::o:0;18785:334::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;18905:4:::1;18900:155;;18962:6;::::0;-1:-1:-1;;;;;18962:6:0;;::::1;18952:16:::0;;::::1;::::0;18926:117:::1;;;::::0;-1:-1:-1;;;18926:117:0;;15452:2:1;18926:117:0::1;::::0;::::1;15434:21:1::0;15491:2;15471:18;;;15464:30;15530:34;15510:18;;;15503:62;-1:-1:-1;;;15581:18:1;;;15574:37;15628:19;;18926:117:0::1;15250:403:1::0;18926:117:0::1;-1:-1:-1::0;;;;;19065:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;19065:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18785:334::o;19738:413::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;19890:16:::1;:33:::0;;;19934:15:::1;:31:::0;;;19976:10:::1;:21:::0;;;19989:8;20023:34:::1;19952:13:::0;19909:14;20023:34:::1;:::i;:::-;:47;;;;:::i;:::-;20008:12;:62:::0;;;20105:4:::1;-1:-1:-1::0;20089:20:0::1;20081:62;;;::::0;-1:-1:-1;;;20081:62:0;;15860:2:1;20081:62:0::1;::::0;::::1;15842:21:1::0;15899:2;15879:18;;;15872:30;15938:31;15918:18;;;15911:59;15987:18;;20081:62:0::1;15658:353:1::0;15501:330:0;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;15583:13:::1;::::0;::::1;::::0;::::1;;;15582:14;15574:50;;;::::0;-1:-1:-1;;;15574:50:0;;16218:2:1;15574:50:0::1;::::0;::::1;16200:21:1::0;16257:2;16237:18;;;16230:30;16296:25;16276:18;;;16269:53;16339:18;;15574:50:0::1;16016:347:1::0;15574:50:0::1;15635:13;:20:::0;;-1:-1:-1;;15666:18:0;;;;;15716:12:::1;15695:18;:33:::0;;;15760:31:::1;::::0;15781:10;;15760:31:::1;:::i;:::-;15739:18;:52:::0;15807:16:::1;::::0;::::1;::::0;;;::::1;15501:330:::0;:::o;27762:488::-;9027:6;;27876:10;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27912:20:0;::::1;27904:59;;;::::0;-1:-1:-1;;;27904:59:0;;16570:2:1;27904:59:0::1;::::0;::::1;16552:21:1::0;16609:2;16589:18;;;16582:30;16648:28;16628:18;;;16621:56;16694:18;;27904:59:0::1;16368:350:1::0;27904:59:0::1;28000:4;-1:-1:-1::0;;;;;27982:23:0;::::1;::::0;27974:64:::1;;;::::0;-1:-1:-1;;;27974:64:0;;16925:2:1;27974:64:0::1;::::0;::::1;16907:21:1::0;16964:2;16944:18;;;16937:30;17003;16983:18;;;16976:58;17051:18;;27974:64:0::1;16723:352:1::0;27974:64:0::1;28076:39;::::0;-1:-1:-1;;;28076:39:0;;28109:4:::1;28076:39;::::0;::::1;731:51:1::0;28049:24:0::1;::::0;-1:-1:-1;;;;;28076:24:0;::::1;::::0;::::1;::::0;704:18:1;;28076:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28134:46;::::0;-1:-1:-1;;;28134:46:0;;-1:-1:-1;;;;;17461:32:1;;;28134:46:0::1;::::0;::::1;17443:51:1::0;17510:18;;;17503:34;;;28049:66:0;;-1:-1:-1;28134:23:0;;::::1;::::0;::::1;::::0;17416:18:1;;28134:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28196;::::0;;-1:-1:-1;;;;;17461:32:1;;17443:51;;17525:2;17510:18;;17503:34;;;28126:54:0;;-1:-1:-1;28196:46:0::1;::::0;17416:18:1;28196:46:0::1;;;;;;;27893:357;27762:488:::0;;;;:::o;4133:104::-;4189:13;4222:7;4215:14;;;;;:::i;19127:355::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;19273:6:::1;::::0;-1:-1:-1;;;;;19273:6:0;;::::1;19265:14:::0;;::::1;::::0;19243:121:::1;;;::::0;-1:-1:-1;;;19243:121:0;;18000:2:1;19243:121:0::1;::::0;::::1;17982:21:1::0;18039:2;18019:18;;;18012:30;18078:34;18058:18;;;18051:62;18149:27;18129:18;;;18122:55;18194:19;;19243:121:0::1;17798:421:1::0;19243:121:0::1;19377:41;19406:4;19412:5;19377:28;:41::i;:::-;19434:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;19434:40:0;::::1;::::0;::::1;::::0;;;::::1;19127:355:::0;;:::o;16045:84::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;16100:14:::1;:21:::0;;-1:-1:-1;;16100:21:0::1;16117:4;16100:21;::::0;;16045:84::o;6140:482::-;175:10;6260:4;6309:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6309:34:0;;;;;;;;;;6376:35;;;;6354:122;;;;-1:-1:-1;;;6354:122:0;;18426:2:1;6354:122:0;;;18408:21:1;18465:2;18445:18;;;18438:30;18504:34;18484:18;;;18477:62;-1:-1:-1;;;18555:18:1;;;18548:35;18600:19;;6354:122:0;18224:401:1;6354:122:0;6512:67;175:10;6535:7;6563:15;6544:16;:34;6512:8;:67::i;:::-;-1:-1:-1;6610:4:0;;6140:482;-1:-1:-1;;;6140:482:0:o;4647:216::-;4769:4;4791:42;175:10;4815:9;4826:6;4791:9;:42::i;29132:866::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;29209:12:::1;29201:56;;;::::0;-1:-1:-1;;;29201:56:0;;18832:2:1;29201:56:0::1;::::0;::::1;18814:21:1::0;18871:2;18851:18;;;18844:30;18910:33;18890:18;;;18883:61;18961:18;;29201:56:0::1;18630:355:1::0;29201:56:0::1;29277:13;::::0;::::1;::::0;::::1;;;29276:14;29268:70;;;;-1:-1:-1::0;;;29268:70:0::1;;;;;;;:::i;:::-;29427:1;29403:21;:25;29381:110;;;;-1:-1:-1::0;;;29381:110:0::1;;;;;;;:::i;20589:182::-:0;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20674:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20674:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20729:34;;1389:41:1;;;20729:34:0::1;::::0;1362:18:1;20729:34:0::1;;;;;;;20589:182:::0;;:::o;20159:422::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;20312:17:::1;:34:::0;;;20357:16:::1;:32:::0;;;20400:11:::1;:22:::0;;;20414:8;20449:36:::1;20376:13:::0;20332:14;20449:36:::1;:::i;:::-;:50;;;;:::i;:::-;20433:13;:66:::0;;;20535:4:::1;-1:-1:-1::0;20518:21:0::1;20510:63;;;::::0;-1:-1:-1;;;20510:63:0;;15860:2:1;20510:63:0::1;::::0;::::1;15842:21:1::0;15899:2;15879:18;;;15872:30;15938:31;15918:18;;;15911:59;15987:18;;20510:63:0::1;15658:353:1::0;17000:323:0;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;17140:14:::1;4328:2:::0;17140::::1;:14;:::i;:::-;17132:3;17111:13;4434:12:::0;;;4346:108;17111:13:::1;:17;::::0;17127:1:::1;17111:17;:::i;:::-;17110:25;;;;:::i;:::-;17109:46;;;;:::i;:::-;17099:6;:56;;17077:147;;;;-1:-1:-1::0;;;17077:147:0::1;;;;;;;:::i;:::-;17257:14;4328:2:::0;17257::::1;:14;:::i;:::-;17247:25;::::0;:6;:25:::1;:::i;:::-;17235:9;:37:::0;;;17288:27:::1;::::0;2717:25:1;;;17288:27:0::1;::::0;2705:2:1;2690:18;17288:27:0::1;2571:177:1::0;17393:428:0;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;17533:6:::1;17512:13;4434:12:::0;;;4346:108;17512:13:::1;:17;::::0;17528:1:::1;17512:17;:::i;:::-;17511:28;;;;:::i;:::-;17498:9;:41;;17476:144;;;::::0;-1:-1:-1;;;17476:144:0;;19192:2:1;17476:144:0::1;::::0;::::1;19174:21:1::0;19231:2;19211:18;;;19204:30;19270:34;19250:18;;;19243:62;-1:-1:-1;;;19321:18:1;;;19314:51;19382:19;;17476:144:0::1;18990:417:1::0;17476:144:0::1;17688:4;17667:13;4434:12:::0;;;4346:108;17667:13:::1;:17;::::0;17683:1:::1;17667:17;:::i;:::-;17666:26;;;;:::i;:::-;17653:9;:39;;17631:141;;;::::0;-1:-1:-1;;;17631:141:0;;19614:2:1;17631:141:0::1;::::0;::::1;19596:21:1::0;19653:2;19633:18;;;19626:30;19692:34;19672:18;;;19665:62;-1:-1:-1;;;19743:18:1;;;19736:50;19803:19;;17631:141:0::1;19412:416:1::0;17631:141:0::1;17783:18;:30:::0;17393:428::o;28818:306::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;28889:3:::1;28870:16;:22:::0;;;28921:3:::1;28903:15;:21:::0;;;28950:34:::1;::::0;::::1;:::i;:::-;28935:12;:49:::0;29017:3:::1;28997:17;:23:::0;;;29050:3:::1;29031:16;:22:::0;;;29080:36:::1;::::0;::::1;:::i;:::-;29064:13;:52:::0;28818:306::o;16137:118::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16221:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;16221:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16137:118::o;16556:98::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;16618:20:::1;:28:::0;;-1:-1:-1;;16618:28:0::1;::::0;;16556:98::o;30006:665::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;30098:6:::1;::::0;30091:39:::1;::::0;-1:-1:-1;;;30091:39:0;;30124:4:::1;30091:39;::::0;::::1;731:51:1::0;30071:17:0::1;::::0;-1:-1:-1;;;;;30098:6:0::1;::::0;30091:24:::1;::::0;704:18:1;;30091:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30071:59;;30163:1;30151:9;:13;30143:50;;;::::0;-1:-1:-1;;;30143:50:0;;20035:2:1;30143:50:0::1;::::0;::::1;20017:21:1::0;20074:2;20054:18;;;20047:30;20113:26;20093:18;;;20086:54;20157:18;;30143:50:0::1;19833:348:1::0;30143:50:0::1;30206:16;30249:5;30226:19;30238:7:::0;30226:9;:19:::1;:::i;:::-;30225:29;;;;:::i;:::-;30341:6;::::0;30365:9:::1;::::0;30334:52:::1;::::0;-1:-1:-1;;;30334:52:0;;-1:-1:-1;;;;;30365:9:0;;::::1;30334:52;::::0;::::1;17443:51:1::0;17510:18;;;17503:34;;;30206:48:0;;-1:-1:-1;30341:6:0::1;::::0;30334:22:::1;::::0;17416:18:1;;30334:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;30432:9:0::1;::::0;:231:::1;::::0;-1:-1:-1;;;30432:231:0;;-1:-1:-1;;;;;30432:9:0;;::::1;::::0;:28:::1;::::0;:231:::1;::::0;30483:4:::1;::::0;30503:8;;30432:9;;;;30612:10:::1;::::0;30637:15:::1;::::0;30432:231:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30060:611;;30006:665:::0;:::o;9272:281::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9375:22:0;::::1;9353:110;;;::::0;-1:-1:-1;;;9353:110:0;;21250:2:1;9353:110:0::1;::::0;::::1;21232:21:1::0;21289:2;21269:18;;;21262:30;21328:34;21308:18;;;21301:62;-1:-1:-1;;;21379:18:1;;;21372:36;21425:19;;9353:110:0::1;21048:402:1::0;9353:110:0::1;9500:6;::::0;9479:38:::1;::::0;-1:-1:-1;;;;;9479:38:0;;::::1;::::0;9500:6:::1;::::0;9479:38:::1;::::0;9500:6:::1;::::0;9479:38:::1;9528:6;:17:::0;;-1:-1:-1;;;;;;9528:17:0::1;-1:-1:-1::0;;;;;9528:17:0;;;::::1;::::0;;;::::1;::::0;;9272:281::o;28320:185::-;9027:6;;-1:-1:-1;;;;;9027:6:0;175:10;9027:22;9019:67;;;;-1:-1:-1;;;9019:67:0;;;;;;;:::i;:::-;28415:82:::1;::::0;28378:12:::1;::::0;28423:10:::1;::::0;28447:21:::1;::::0;28378:12;28415:82;28378:12;28415:82;28447:21;28423:10;28415:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8169:380:::0;-1:-1:-1;;;;;8305:19:0;;8297:68;;;;-1:-1:-1;;;8297:68:0;;21867:2:1;8297:68:0;;;21849:21:1;21906:2;21886:18;;;21879:30;21945:34;21925:18;;;21918:62;-1:-1:-1;;;21996:18:1;;;21989:34;22040:19;;8297:68:0;21665:400:1;8297:68:0;-1:-1:-1;;;;;8384:21:0;;8376:68;;;;-1:-1:-1;;;8376:68:0;;22272:2:1;8376:68:0;;;22254:21:1;22311:2;22291:18;;;22284:30;22350:34;22330:18;;;22323:62;-1:-1:-1;;;22401:18:1;;;22394:32;22443:19;;8376:68:0;22070:398:1;8376:68:0;-1:-1:-1;;;;;8457:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8509:32;;2717:25:1;;;8509:32:0;;2690:18:1;8509:32:0;;;;;;;;8169:380;;;:::o;6630:651::-;-1:-1:-1;;;;;6770:20:0;;6762:70;;;;-1:-1:-1;;;6762:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6851:23:0;;6843:71;;;;-1:-1:-1;;;6843:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6951:17:0;;6927:21;6951:17;;;;;;;;;;;7001:23;;;;6979:111;;;;-1:-1:-1;;;6979:111:0;;23485:2:1;6979:111:0;;;23467:21:1;23524:2;23504:18;;;23497:30;23563:34;23543:18;;;23536:62;-1:-1:-1;;;23614:18:1;;;23607:36;23660:19;;6979:111:0;23283:402:1;6979:111:0;-1:-1:-1;;;;;7126:17:0;;;:9;:17;;;;;;;;;;;7146:22;;;7126:42;;7190:20;;;;;;;;:30;;7162:6;;7126:9;7190:30;;7162:6;;7190:30;:::i;:::-;;;;;;;;7255:9;-1:-1:-1;;;;;7238:35:0;7247:6;-1:-1:-1;;;;;7238:35:0;;7266:6;7238:35;;;;2717:25:1;;2705:2;2690:18;;2571:177;7238:35:0;;;;;;;;6751:530;6630:651;;;:::o;20779:6247::-;-1:-1:-1;;;;;20911:18:0;;20903:68;;;;-1:-1:-1;;;20903:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20990:16:0;;20982:64;;;;-1:-1:-1;;;20982:64:0;;;;;;;:::i;:::-;21074:1;21065:6;:10;21057:52;;;;-1:-1:-1;;;21057:52:0;;23892:2:1;21057:52:0;;;23874:21:1;23931:2;23911:18;;;23904:30;23970:31;23950:18;;;23943:59;24019:18;;21057:52:0;23690:353:1;21057:52:0;21127:13;;;;;;;21122:183;;-1:-1:-1;;;;;21183:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;21212:23:0;;;;;;:19;:23;;;;;;;;21183:52;21157:136;;;;-1:-1:-1;;;21157:136:0;;24250:2:1;21157:136:0;;;24232:21:1;24289:2;24269:18;;;24262:30;-1:-1:-1;;;24308:18:1;;;24301:52;24370:18;;21157:136:0;24048:346:1;21157:136:0;21321:18;;:22;21317:247;;-1:-1:-1;;;;;21387:17:0;;;;;;:11;:17;;;;;;;;21386:18;;:35;;-1:-1:-1;8965:6:0;;-1:-1:-1;;;;;21408:13:0;;;8965:6;;21408:13;21386:35;:60;;;-1:-1:-1;;;;;;21425:21:0;;21439:6;21425:21;21386:60;21360:192;;;;-1:-1:-1;;;21360:192:0;;24601:2:1;21360:192:0;;;24583:21:1;24640:2;24620:18;;;24613:30;24679:34;24659:18;;;24652:62;24750:34;24730:18;;;24723:62;-1:-1:-1;;;24801:19:1;;;24794:37;24848:19;;21360:192:0;24399:474:1;21360:192:0;21580:14;;;;21576:2315;;;8965:6;;-1:-1:-1;;;;;21633:15:0;;;8965:6;;21633:15;;;;:49;;-1:-1:-1;8965:6:0;;-1:-1:-1;;;;;21669:13:0;;;8965:6;;21669:13;;21633:49;:86;;;;-1:-1:-1;;;;;;21703:16:0;;;;21633:86;:128;;;;-1:-1:-1;;;;;;21740:21:0;;21754:6;21740:21;;21633:128;:175;;;;-1:-1:-1;;;;;;21783:25:0;;;;;;:19;:25;;;;;;;;21782:26;21633:175;:220;;;;-1:-1:-1;;;;;;21830:23:0;;;;;;:19;:23;;;;;;;;21829:24;21633:220;21611:2269;;;22024:20;;;;22020:692;;;22087:9;;-1:-1:-1;;;;;22073:24:0;;;22087:9;;22073:24;;;;:49;;-1:-1:-1;22115:6:0;;-1:-1:-1;;;;;22101:21:0;;;22115:6;;22101:21;;22073:49;22069:624;;;22264:16;22279:1;22264:12;:16;:::i;:::-;22218:9;22189:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;22385:16:0;22400:1;22385:12;:16;:::i;:::-;-1:-1:-1;;;;;22317:32:0;;;;;;:28;:32;;;;;;:84;22189:212;22151:363;;;;-1:-1:-1;;;22151:363:0;;25213:2:1;22151:363:0;;;25195:21:1;25252:2;25232:18;;;25225:30;25291:34;25271:18;;;25264:62;-1:-1:-1;;;25342:18:1;;;25335:51;25403:19;;22151:363:0;25011:417:1;22151:363:0;22570:9;22541:39;;;;:28;:39;;;;;;22583:12;22541:54;;;;-1:-1:-1;;;;;22622:32:0;;;;;;:47;22069:624;-1:-1:-1;;;;;22786:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;22843:35:0;;;;;;:31;:35;;;;;;;;22842:36;22786:92;22760:1105;;;22965:12;;22955:6;:22;;22921:148;;;;-1:-1:-1;;;22921:148:0;;25635:2:1;22921:148:0;;;25617:21:1;25674:2;25654:18;;;25647:30;25713:34;25693:18;;;25686:62;-1:-1:-1;;;25764:18:1;;;25757:38;25812:19;;22921:148:0;25433:404:1;22921:148:0;23152:9;;23142:6;23126:13;23136:2;23126:9;:13::i;:::-;:22;;;;:::i;:::-;:35;;23092:140;;;;-1:-1:-1;;;23092:140:0;;26044:2:1;23092:140:0;;;26026:21:1;26083:2;26063:18;;;26056:30;-1:-1:-1;;;26102:18:1;;;26095:49;26161:18;;23092:140:0;25842:343:1;23092:140:0;22760:1105;;;-1:-1:-1;;;;;23330:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;23385:37:0;;;;;;:31;:37;;;;;;;;23384:38;23330:92;23304:561;;;23509:12;;23499:6;:22;;23465:149;;;;-1:-1:-1;;;23465:149:0;;26392:2:1;23465:149:0;;;26374:21:1;26431:2;26411:18;;;26404:30;26470:34;26450:18;;;26443:62;-1:-1:-1;;;26521:18:1;;;26514:39;26570:19;;23465:149:0;26190:405:1;23304:561:0;-1:-1:-1;;;;;23645:35:0;;;;;;:31;:35;;;;;;;;23640:225;;23765:9;;23755:6;23739:13;23749:2;23739:9;:13::i;:::-;:22;;;;:::i;:::-;:35;;23705:140;;;;-1:-1:-1;;;23705:140:0;;26044:2:1;23705:140:0;;;26026:21:1;26083:2;26063:18;;;26056:30;-1:-1:-1;;;26102:18:1;;;26095:49;26161:18;;23705:140:0;25842:343:1;23705:140:0;23903:28;23934:24;23952:4;23934:9;:24::i;:::-;24010:18;;23903:55;;-1:-1:-1;23986:42:0;;;;;;;24059:35;;-1:-1:-1;24083:11:0;;;;;;;24059:35;:61;;;;-1:-1:-1;24112:8:0;;-1:-1:-1;;;24112:8:0;;;;24111:9;24059:61;:110;;;;-1:-1:-1;;;;;;24138:31:0;;;;;;:25;:31;;;;;;;;24137:32;24059:110;:153;;;;-1:-1:-1;;;;;;24187:25:0;;;;;;:19;:25;;;;;;;;24186:26;24059:153;:194;;;;-1:-1:-1;;;;;;24230:23:0;;;;;;:19;:23;;;;;;;;24229:24;24059:194;24041:510;;;24280:8;:15;;-1:-1:-1;;;;24280:15:0;-1:-1:-1;;;24280:15:0;;;24339:18;;:23;;24280:8;24339:23;:::i;:::-;24316:20;:46;24312:133;;;24406:18;;:23;;24427:2;24406:23;:::i;:::-;24383:46;;24312:133;24461:45;24485:20;24461:23;:45::i;:::-;24523:8;:16;;-1:-1:-1;;;;24523:16:0;;;24041:510;-1:-1:-1;;;;;24682:25:0;;24563:12;24682:25;;;:19;:25;;;;;;24578:4;;24682:25;;;:52;;-1:-1:-1;;;;;;24711:23:0;;;;;;:19;:23;;;;;;;;24682:52;24678:100;;;-1:-1:-1;24761:5:0;24678:100;24790:12;24817:18;24850:23;24888:31;25010:7;25006:1967;;;27129:18;;27114:12;:33;25092:77;;;;-1:-1:-1;;;;;;25138:31:0;;;;;;:25;:31;;;;;;;;25092:77;:128;;;;-1:-1:-1;;;;;;25191:29:0;;;;;;:25;:29;;;;;;;;25190:30;25092:128;:165;;;;;25256:1;25241:12;;:16;25092:165;25070:1387;;;-1:-1:-1;;;;;25297:15:0;;;;;;:11;:15;;;;;;;;25292:173;;-1:-1:-1;;;;;25337:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;25337:22:0;25355:4;25337:22;;;;;;25382:10;:15;;25355:4;;25382:10;;:15;;25355:4;;25382:15;:::i;:::-;;;;-1:-1:-1;;25425:20:0;;-1:-1:-1;;;;;749:32:1;;731:51;;25425:20:0;;719:2:1;704:18;25425:20:0;;;;;;;25292:173;-1:-1:-1;25509:4:0;25555:3;25540:11;:6;25549:2;25540:11;:::i;:::-;25539:19;;;;:::i;:::-;25532:26;;25622:12;;25603:15;;25596:4;:22;;;;:::i;:::-;25595:39;;;;:::i;:::-;25577:57;;25688:12;;25674:10;;25667:4;:17;;;;:::i;:::-;25666:34;;;;:::i;:::-;25653:47;;25070:1387;;;-1:-1:-1;;;;;25763:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25812:1;25796:13;;:17;25763:50;25759:698;;;25860:2;25834:28;;12068:5;25898:13;;25889:6;:22;;;;:::i;:::-;25888:38;;;;:::i;:::-;25881:45;;25991:13;;25971:16;;25964:4;:23;;;;:::i;:::-;25963:41;;;;:::i;:::-;25945:59;;26059:13;;26044:11;;26037:4;:18;;;;:::i;25759:698::-;-1:-1:-1;;;;;26134:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;26184:1;26169:12;;:16;26134:51;26130:327;;;26232:4;26206:30;;12068:5;26272:12;;26263:6;:21;;;;:::i;:::-;26262:37;;;;:::i;:::-;26255:44;;26363:12;;26344:15;;26337:4;:22;;;;:::i;:::-;26336:39;;;;:::i;:::-;26318:57;;26429:12;;26415:10;;26408:4;:17;;;;:::i;:::-;26407:34;;;;:::i;:::-;26394:47;;26130:327;26477:8;;26473:460;;26506:42;26522:4;26536;26543;26506:15;:42::i;:::-;26571:14;;26567:95;;26610:32;26624:4;26631:10;26610:5;:32::i;:::-;26684:19;;26680:238;;26728:170;26778:4;26810:23;26860:15;26728;:170::i;:::-;26947:14;26957:4;26947:14;;:::i;:::-;;;25006:1967;26985:33;27001:4;27007:2;27011:6;26985:15;:33::i;:::-;20892:6134;;;;;;;20779:6247;;;:::o;19490:240::-;-1:-1:-1;;;;;19573:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;19573:39:0;;;;;;;19625;19573:31;:39;19625:26;:39::i;27163:591::-;27320:16;;;27334:1;27320:16;;;;;;;;27296:21;;27320:16;;;;;;;;;;-1:-1:-1;27320:16:0;27296:40;;27365:4;27347;27352:1;27347:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27347:23:0;;;:7;;;;;;;;;;:23;;;;27391:9;;:16;;;-1:-1:-1;;;27391:16:0;;;;:9;;;;;:14;;:16;;;;;27347:7;;27391:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27381:4;27386:1;27381:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27381:26:0;;;:7;;;;;;;;;:26;27452:9;;27420:56;;27437:4;;27452:9;27464:11;27420:8;:56::i;:::-;27515:9;;27687:17;;27515:231;;-1:-1:-1;;;27515:231:0;;-1:-1:-1;;;;;27515:9:0;;;;:60;;:231;;27590:11;;27515:9;;27660:4;;27687:17;;;27720:15;;27515:231;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27225:529;27163:591;:::o;7611:550::-;-1:-1:-1;;;;;7695:21:0;;7687:67;;;;-1:-1:-1;;;7687:67:0;;28043:2:1;7687:67:0;;;28025:21:1;28082:2;28062:18;;;28055:30;28121:34;28101:18;;;28094:62;-1:-1:-1;;;28172:18:1;;;28165:31;28213:19;;7687:67:0;27841:397:1;7687:67:0;-1:-1:-1;;;;;7790:18:0;;7765:22;7790:18;;;;;;;;;;;7827:24;;;;7819:71;;;;-1:-1:-1;;;7819:71:0;;28445:2:1;7819:71:0;;;28427:21:1;28484:2;28464:18;;;28457:30;28523:34;28503:18;;;28496:62;-1:-1:-1;;;28574:18:1;;;28567:32;28616:19;;7819:71:0;28243:398:1;7819:71:0;-1:-1:-1;;;;;7926:18:0;;:9;:18;;;;;;;;;;;7947:23;;;7926:44;;8065:12;:22;;;;;;;8116:37;2717:25:1;;;7926:9:0;;:18;8116:37;;2690:18:1;8116:37:0;2571:177:1;17829:221:0;-1:-1:-1;;;;;17931:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;17931:52:0;;;;;;;;;;17999:43;;28814:51:1;;;28881:18;;;28874:50;17999:43:0;;28787:18:1;17999:43:0;;;;;;;17829:221;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;848:70;793:131;:::o;929:315::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1441:247::-;1500:6;1553:2;1541:9;1532:7;1528:23;1524:32;1521:52;;;1569:1;1566;1559:12;1521:52;1608:9;1595:23;1627:31;1652:5;1627:31;:::i;:::-;1677:5;1441:247;-1:-1:-1;;;1441:247:1:o;1693:118::-;1779:5;1772:13;1765:21;1758:5;1755:32;1745:60;;1801:1;1798;1791:12;1816:750;1908:6;1916;1924;1977:2;1965:9;1956:7;1952:23;1948:32;1945:52;;;1993:1;1990;1983:12;1945:52;2033:9;2020:23;2062:18;2103:2;2095:6;2092:14;2089:34;;;2119:1;2116;2109:12;2089:34;2157:6;2146:9;2142:22;2132:32;;2202:7;2195:4;2191:2;2187:13;2183:27;2173:55;;2224:1;2221;2214:12;2173:55;2264:2;2251:16;2290:2;2282:6;2279:14;2276:34;;;2306:1;2303;2296:12;2276:34;2361:7;2354:4;2344:6;2341:1;2337:14;2333:2;2329:23;2325:34;2322:47;2319:67;;;2382:1;2379;2372:12;2319:67;2413:4;2405:13;;;;-1:-1:-1;2437:6:1;-1:-1:-1;;2478:20:1;;2465:34;2508:28;2465:34;2508:28;:::i;:::-;2555:5;2545:15;;;1816:750;;;;;:::o;2753:180::-;2812:6;2865:2;2853:9;2844:7;2840:23;2836:32;2833:52;;;2881:1;2878;2871:12;2833:52;-1:-1:-1;2904:23:1;;2753:180;-1:-1:-1;2753:180:1:o;2938:127::-;2999:10;2994:3;2990:20;2987:1;2980:31;3030:4;3027:1;3020:15;3054:4;3051:1;3044:15;3070:275;3141:2;3135:9;3206:2;3187:13;;-1:-1:-1;;3183:27:1;3171:40;;3241:18;3226:34;;3262:22;;;3223:62;3220:88;;;3288:18;;:::i;:::-;3324:2;3317:22;3070:275;;-1:-1:-1;3070:275:1:o;3350:183::-;3410:4;3443:18;3435:6;3432:30;3429:56;;;3465:18;;:::i;:::-;-1:-1:-1;3510:1:1;3506:14;3522:4;3502:25;;3350:183::o;3538:662::-;3592:5;3645:3;3638:4;3630:6;3626:17;3622:27;3612:55;;3663:1;3660;3653:12;3612:55;3699:6;3686:20;3725:4;3749:60;3765:43;3805:2;3765:43;:::i;:::-;3749:60;:::i;:::-;3843:15;;;3929:1;3925:10;;;;3913:23;;3909:32;;;3874:12;;;;3953:15;;;3950:35;;;3981:1;3978;3971:12;3950:35;4017:2;4009:6;4005:15;4029:142;4045:6;4040:3;4037:15;4029:142;;;4111:17;;4099:30;;4149:12;;;;4062;;4029:142;;;-1:-1:-1;4189:5:1;3538:662;-1:-1:-1;;;;;;3538:662:1:o;4205:1215::-;4323:6;4331;4384:2;4372:9;4363:7;4359:23;4355:32;4352:52;;;4400:1;4397;4390:12;4352:52;4440:9;4427:23;4469:18;4510:2;4502:6;4499:14;4496:34;;;4526:1;4523;4516:12;4496:34;4564:6;4553:9;4549:22;4539:32;;4609:7;4602:4;4598:2;4594:13;4590:27;4580:55;;4631:1;4628;4621:12;4580:55;4667:2;4654:16;4689:4;4713:60;4729:43;4769:2;4729:43;:::i;4713:60::-;4807:15;;;4889:1;4885:10;;;;4877:19;;4873:28;;;4838:12;;;;4913:19;;;4910:39;;;4945:1;4942;4935:12;4910:39;4969:11;;;;4989:217;5005:6;5000:3;4997:15;4989:217;;;5085:3;5072:17;5102:31;5127:5;5102:31;:::i;:::-;5146:18;;5022:12;;;;5184;;;;4989:217;;;5225:5;-1:-1:-1;;5268:18:1;;5255:32;;-1:-1:-1;;5299:16:1;;;5296:36;;;5328:1;5325;5318:12;5296:36;;5351:63;5406:7;5395:8;5384:9;5380:24;5351:63;:::i;:::-;5341:73;;;4205:1215;;;;;:::o;5425:456::-;5502:6;5510;5518;5571:2;5559:9;5550:7;5546:23;5542:32;5539:52;;;5587:1;5584;5577:12;5539:52;5626:9;5613:23;5645:31;5670:5;5645:31;:::i;:::-;5695:5;-1:-1:-1;5752:2:1;5737:18;;5724:32;5765:33;5724:32;5765:33;:::i;:::-;5425:456;;5817:7;;-1:-1:-1;;;5871:2:1;5856:18;;;;5843:32;;5425:456::o;6283:382::-;6348:6;6356;6409:2;6397:9;6388:7;6384:23;6380:32;6377:52;;;6425:1;6422;6415:12;6377:52;6464:9;6451:23;6483:31;6508:5;6483:31;:::i;:::-;6533:5;-1:-1:-1;6590:2:1;6575:18;;6562:32;6603:30;6562:32;6603:30;:::i;:::-;6652:7;6642:17;;;6283:382;;;;;:::o;6670:316::-;6747:6;6755;6763;6816:2;6804:9;6795:7;6791:23;6787:32;6784:52;;;6832:1;6829;6822:12;6784:52;-1:-1:-1;;6855:23:1;;;6925:2;6910:18;;6897:32;;-1:-1:-1;6976:2:1;6961:18;;;6948:32;;6670:316;-1:-1:-1;6670:316:1:o;6991:388::-;7059:6;7067;7120:2;7108:9;7099:7;7095:23;7091:32;7088:52;;;7136:1;7133;7126:12;7088:52;7175:9;7162:23;7194:31;7219:5;7194:31;:::i;:::-;7244:5;-1:-1:-1;7301:2:1;7286:18;;7273:32;7314:33;7273:32;7314:33;:::i;7384:241::-;7440:6;7493:2;7481:9;7472:7;7468:23;7464:32;7461:52;;;7509:1;7506;7499:12;7461:52;7548:9;7535:23;7567:28;7589:5;7567:28;:::i;7630:380::-;7709:1;7705:12;;;;7752;;;7773:61;;7827:4;7819:6;7815:17;7805:27;;7773:61;7880:2;7872:6;7869:14;7849:18;7846:38;7843:161;;7926:10;7921:3;7917:20;7914:1;7907:31;7961:4;7958:1;7951:15;7989:4;7986:1;7979:15;7843:161;;7630:380;;;:::o;8015:356::-;8217:2;8199:21;;;8236:18;;;8229:30;8295:34;8290:2;8275:18;;8268:62;8362:2;8347:18;;8015:356::o;8376:127::-;8437:10;8432:3;8428:20;8425:1;8418:31;8468:4;8465:1;8458:15;8492:4;8489:1;8482:15;8508:127;8569:10;8564:3;8560:20;8557:1;8550:31;8600:4;8597:1;8590:15;8624:4;8621:1;8614:15;8640:135;8679:3;8700:17;;;8697:43;;8720:18;;:::i;:::-;-1:-1:-1;8767:1:1;8756:13;;8640:135::o;8780:422::-;8869:1;8912:5;8869:1;8926:270;8947:7;8937:8;8934:21;8926:270;;;9006:4;9002:1;8998:6;8994:17;8988:4;8985:27;8982:53;;;9015:18;;:::i;:::-;9065:7;9055:8;9051:22;9048:55;;;9085:16;;;;9048:55;9164:22;;;;9124:15;;;;8926:270;;;8930:3;8780:422;;;;;:::o;9207:806::-;9256:5;9286:8;9276:80;;-1:-1:-1;9327:1:1;9341:5;;9276:80;9375:4;9365:76;;-1:-1:-1;9412:1:1;9426:5;;9365:76;9457:4;9475:1;9470:59;;;;9543:1;9538:130;;;;9450:218;;9470:59;9500:1;9491:10;;9514:5;;;9538:130;9575:3;9565:8;9562:17;9559:43;;;9582:18;;:::i;:::-;-1:-1:-1;;9638:1:1;9624:16;;9653:5;;9450:218;;9752:2;9742:8;9739:16;9733:3;9727:4;9724:13;9720:36;9714:2;9704:8;9701:16;9696:2;9690:4;9687:12;9683:35;9680:77;9677:159;;;-1:-1:-1;9789:19:1;;;9821:5;;9677:159;9868:34;9893:8;9887:4;9868:34;:::i;:::-;9938:6;9934:1;9930:6;9926:19;9917:7;9914:32;9911:58;;;9949:18;;:::i;:::-;9987:20;;9207:806;-1:-1:-1;;;9207:806:1:o;10018:140::-;10076:5;10105:47;10146:4;10136:8;10132:19;10126:4;10105:47;:::i;10163:168::-;10203:7;10269:1;10265;10261:6;10257:14;10254:1;10251:21;10246:1;10239:9;10232:17;10228:45;10225:71;;;10276:18;;:::i;:::-;-1:-1:-1;10316:9:1;;10163:168::o;10336:217::-;10376:1;10402;10392:132;;10446:10;10441:3;10437:20;10434:1;10427:31;10481:4;10478:1;10471:15;10509:4;10506:1;10499:15;10392:132;-1:-1:-1;10538:9:1;;10336:217::o;10558:405::-;10760:2;10742:21;;;10799:2;10779:18;;;10772:30;10838:34;10833:2;10818:18;;10811:62;-1:-1:-1;;;10904:2:1;10889:18;;10882:39;10953:3;10938:19;;10558:405::o;12159:125::-;12224:9;;;12245:10;;;12242:36;;;12258:18;;:::i;12696:407::-;12898:2;12880:21;;;12937:2;12917:18;;;12910:30;12976:34;12971:2;12956:18;;12949:62;-1:-1:-1;;;13042:2:1;13027:18;;13020:41;13093:3;13078:19;;12696:407::o;13516:399::-;13718:2;13700:21;;;13757:2;13737:18;;;13730:30;13796:34;13791:2;13776:18;;13769:62;-1:-1:-1;;;13862:2:1;13847:18;;13840:33;13905:3;13890:19;;13516:399::o;14327:607::-;-1:-1:-1;;;;;14686:15:1;;;14668:34;;14733:2;14718:18;;14711:34;;;;14776:2;14761:18;;14754:34;;;;14819:2;14804:18;;14797:34;;;;14868:15;;;14862:3;14847:19;;14840:44;14648:3;14900:19;;14893:35;;;;14617:3;14602:19;;14327:607::o;14939:306::-;15027:6;15035;15043;15096:2;15084:9;15075:7;15071:23;15067:32;15064:52;;;15112:1;15109;15102:12;15064:52;15141:9;15135:16;15125:26;;15191:2;15180:9;15176:18;15170:25;15160:35;;15235:2;15224:9;15220:18;15214:25;15204:35;;14939:306;;;;;:::o;17080:184::-;17150:6;17203:2;17191:9;17182:7;17178:23;17174:32;17171:52;;;17219:1;17216;17209:12;17171:52;-1:-1:-1;17242:16:1;;17080:184;-1:-1:-1;17080:184:1:o;17548:245::-;17615:6;17668:2;17656:9;17647:7;17643:23;17639:32;17636:52;;;17684:1;17681;17674:12;17636:52;17716:9;17710:16;17735:28;17757:5;17735:28;:::i;20798:245::-;20877:6;20885;20938:2;20926:9;20917:7;20913:23;20909:32;20906:52;;;20954:1;20951;20944:12;20906:52;-1:-1:-1;;20977:16:1;;21033:2;21018:18;;;21012:25;20977:16;;21012:25;;-1:-1:-1;20798:245:1:o;22473:401::-;22675:2;22657:21;;;22714:2;22694:18;;;22687:30;22753:34;22748:2;22733:18;;22726:62;-1:-1:-1;;;22819:2:1;22804:18;;22797:35;22864:3;22849:19;;22473:401::o;22879:399::-;23081:2;23063:21;;;23120:2;23100:18;;;23093:30;23159:34;23154:2;23139:18;;23132:62;-1:-1:-1;;;23225:2:1;23210:18;;23203:33;23268:3;23253:19;;22879:399::o;24878:128::-;24945:9;;;24966:11;;;24963:37;;;24980:18;;:::i;26600:251::-;26670:6;26723:2;26711:9;26702:7;26698:23;26694:32;26691:52;;;26739:1;26736;26729:12;26691:52;26771:9;26765:16;26790:31;26815:5;26790:31;:::i;26856:980::-;27118:4;27166:3;27155:9;27151:19;27197:6;27186:9;27179:25;27223:2;27261:6;27256:2;27245:9;27241:18;27234:34;27304:3;27299:2;27288:9;27284:18;27277:31;27328:6;27363;27357:13;27394:6;27386;27379:22;27432:3;27421:9;27417:19;27410:26;;27471:2;27463:6;27459:15;27445:29;;27492:1;27502:195;27516:6;27513:1;27510:13;27502:195;;;27581:13;;-1:-1:-1;;;;;27577:39:1;27565:52;;27672:15;;;;27637:12;;;;27613:1;27531:9;27502:195;;;-1:-1:-1;;;;;;;27753:32:1;;;;27748:2;27733:18;;27726:60;-1:-1:-1;;;27817:3:1;27802:19;27795:35;27714:3;26856:980;-1:-1:-1;;;26856:980:1:o
Swarm Source
ipfs://e7059bf4681bdbbe8a7d74e3eed1e69538b05aa9bf57b3671a926fccd144d6cb
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.