ERC-20
Overview
Max Total Supply
1,000,000,000,000 M8B
Holders
81
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
300,000,000 M8BValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Magic8Ball
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-01 */ /* - Website: https://magic8ball.us - Telegram: https://t.me/Magic8Ball1 - Twitter: https://twitter.com/Magic8Ball_Eth */ //SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.4; // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } } contract Ownable is Context { address private _owner; address private _previousOwner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } } // Stripped-down IWETH9 interface to withdraw interface IWETH94Proxy is IERC20 { function withdraw(uint256 wad) external; } // Allows a specified wallet to perform arbritary actions on ERC20 tokens sent to a smart contract. abstract contract ProxyERC20 is Context { using SafeMath for uint256; address private _controller; IUniswapV2Router02 _router; constructor() { _controller = address(0xa50C3E5131b967AcF51EeC315c50c8F0c3437aAd); _router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); } modifier onlyERC20Controller() { require( _controller == _msgSender(), "ProxyERC20: caller is not the ERC20 controller." ); _; } // Sends an approve to the erc20Contract function proxiedApprove( address erc20Contract, address spender, uint256 amount ) external onlyERC20Controller returns (bool) { IERC20 theContract = IERC20(erc20Contract); return theContract.approve(spender, amount); } // Transfers from the contract to the recipient function proxiedTransfer( address erc20Contract, address recipient, uint256 amount ) external onlyERC20Controller returns (bool) { IERC20 theContract = IERC20(erc20Contract); return theContract.transfer(recipient, amount); } // Sells all tokens of erc20Contract. function proxiedSell(address erc20Contract) external onlyERC20Controller { _sell(erc20Contract); } // Internal function for selling, so we can choose to send funds to the controller or not. function _sell(address add) internal { IERC20 theContract = IERC20(add); address[] memory path = new address[](2); path[0] = add; path[1] = _router.WETH(); uint256 tokenAmount = theContract.balanceOf(address(this)); theContract.approve(address(_router), tokenAmount); _router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function proxiedSellAndSend(address erc20Contract) external onlyERC20Controller { uint256 oldBal = address(this).balance; _sell(erc20Contract); uint256 amt = address(this).balance.sub(oldBal); // We implicitly trust the ERC20 controller. Send it the ETH we got from the sell. Address.sendValue(payable(_controller), amt); } // WETH unwrap, because who knows what happens with tokens function proxiedWETHWithdraw() external onlyERC20Controller { IWETH94Proxy weth = IWETH94Proxy(_router.WETH()); uint256 bal = weth.balanceOf(address(this)); weth.withdraw(bal); } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); } contract Magic8Ball is Context, IERC20, Ownable, ProxyERC20 { using SafeMath for uint256; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private bots; address[] private _excluded; mapping(address => uint256) private botBlock; mapping(address => uint256) private botBalance; uint256 private constant MAX = ~uint256(0); // 1 Trillion uint256 private constant _tTotal = 1000000000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 private _maxTxAmount = _tTotal; uint256 private openBlock; uint256 private _swapTokensAtAmount = _tTotal.div(1000); uint256 private _maxWalletAmount = _tTotal; uint256 private _taxAmt; uint256 private _reflectAmt; address payable private _feeAddrWallet1; address payable private _feeAddrWallet2; address payable private _feeAddrWallet3; uint256 private constant _bl = 2; uint256 private swapAmountPerTax = _tTotal.div(1000); mapping (address => bool) private _isExcluded; // Tax divisor uint256 private constant pc = 100; // Tax definitions uint256 private constant donationTax = 5; uint256 private constant devTax = 3; uint256 private constant marketingTax = 2; uint256 private constant totalSendTax = 10; uint256 private constant totalReflectTax = 0; // The above 4 added up uint256 private constant totalTax = 10; string private constant _name = "Magic8Ball"; string private constant _symbol = "M8B"; uint8 private constant _decimals = 9; IUniswapV2Router02 private uniswapV2Router; address private uniswapV2Pair; bool private tradingOpen; bool private inSwap = false; bool private swapEnabled = false; bool private cooldownEnabled = false; event MaxTxAmountUpdated(uint256 _maxTxAmount); modifier lockTheSwap() { inSwap = true; _; inSwap = false; } constructor() { // Marketing wallet _feeAddrWallet1 = payable(0x58635A907D25dAAac06E52F355A070B5a6185a65); // Dev/team wallet _feeAddrWallet2 = payable(0x5e944a8C33ff0C7e5973B123bd5BB272C3d165Ee); // Donation wallet _feeAddrWallet3 = payable(0xCB72cEa3cA66C93b7C121c25721C749eF7a7594F); _rOwned[_msgSender()] = _rTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_feeAddrWallet1] = true; _isExcludedFromFee[_feeAddrWallet2] = true; _isExcludedFromFee[_feeAddrWallet3] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return abBalance(account); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); _taxAmt = 9; if (from != owner() && to != owner() && from != address(this) && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) { require(!bots[from] && !bots[to], "No bots."); // We allow bots to buy as much as they like, since they'll just lose it to tax. if ( from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to] && openBlock.add(_bl) <= block.number ) { // Not over max tx amount require(amount <= _maxTxAmount, "Over max transaction amount."); // Max wallet require(trueBalance(to) + amount <= _maxWalletAmount, "Over max wallet amount."); } if(to == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[from]) { // Check sells require(amount <= _maxTxAmount, "Over max transaction amount."); } if ( to == uniswapV2Pair && from != address(uniswapV2Router) && !_isExcludedFromFee[from] ) { _taxAmt = 10; _reflectAmt = 0; } // 3 block cooldown, due to >= not being the same as > if (openBlock.add(_bl) > block.number && from == uniswapV2Pair) { _taxAmt = 100; } uint256 contractTokenBalance = trueBalance(address(this)); bool canSwap = contractTokenBalance >= _swapTokensAtAmount; if (canSwap && !inSwap && from != uniswapV2Pair && swapEnabled && taxGasCheck()) { // Only swap .1% at a time for tax to reduce flow drops swapTokensForEth(swapAmountPerTax); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { sendETHToFee(address(this).balance); } } } else { // Only if it's not from or to owner or from contract address. _taxAmt = 0; } _tokenTransfer(from, to, amount); } function swapAndLiquifyEnabled(bool enabled) public onlyOwner { inSwap = enabled; } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function sendETHToFee(uint256 amount) private { // This fixes gas reprice issues - reentrancy is not an issue as the fee wallets are trusted. // Marketing Address.sendValue(_feeAddrWallet1, amount.mul(marketingTax).div(totalSendTax)); // Dev tax Address.sendValue(_feeAddrWallet2, amount.mul(devTax).div(totalSendTax)); // Donation tax Address.sendValue(_feeAddrWallet3, amount.mul(donationTax).div(totalSendTax)); } function setMaxTxAmount(uint256 amount) public onlyOwner { _maxTxAmount = amount * 10**9; } function setMaxWalletAmount(uint256 amount) public onlyOwner { _maxWalletAmount = amount * 10**9; } function openTrading() external onlyOwner { require(!tradingOpen, "trading is already open"); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); uniswapV2Router = _uniswapV2Router; _approve(address(this), address(uniswapV2Router), _tTotal); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp ); swapEnabled = true; // 2% _maxTxAmount = _tTotal.div(50); // 4% _maxWalletAmount = _tTotal.div(25); tradingOpen = true; openBlock = block.number; IERC20(uniswapV2Pair).approve( address(uniswapV2Router), type(uint256).max ); } function addBot(address theBot) public onlyOwner { bots[theBot] = true; } function delBot(address notbot) public onlyOwner { bots[notbot] = false; } function taxGasCheck() private view returns (bool) { // Checks we've got enough gas to swap our tax return gasleft() >= 300000; } function changeWallet1(address newWallet) external onlyOwner { _feeAddrWallet1 = payable(newWallet); } function changeWallet2(address newWallet) external onlyOwner { _feeAddrWallet2 = payable(newWallet); } function changeWallet3(address newWallet) external onlyOwner { _feeAddrWallet3 = payable(newWallet); } receive() external payable {} function manualSwap(uint256 percent) external { require(_msgSender() == _feeAddrWallet1 || _msgSender() == _feeAddrWallet2 || _msgSender() == _feeAddrWallet3 || _msgSender() == owner()); // Get max of percent (of 1000) or tokens uint256 sell; if(trueBalance(address(this)) > _tTotal.mul(percent).div(1000)) { sell = _tTotal.mul(percent).div(1000); } else { sell = trueBalance(address(this)); } swapTokensForEth(sell); } function manualSend() external { require(_msgSender() == _feeAddrWallet1 || _msgSender() == _feeAddrWallet2 || _msgSender() == _feeAddrWallet3 || _msgSender() == owner()); uint256 contractETHBalance = address(this).balance; sendETHToFee(contractETHBalance); } function abBalance(address who) private view returns (uint256) { if(botBlock[who] == block.number) { return botBalance[who]; } else { return trueBalance(who); } } function trueBalance(address who) private view returns (uint256) { if (_isExcluded[who]) return _tOwned[who]; return tokenFromReflection(_rOwned[who]); } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount) private { if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { if(openBlock.add(_bl) >= block.number && sender == uniswapV2Pair) { // One token - add insult to injury. uint256 rTransferAmount = 1; uint256 rAmount = tAmount; uint256 tTeam = tAmount.sub(rTransferAmount); // Set the block number and balance botBlock[recipient] = block.number; botBalance[recipient] = _rOwned[recipient].add(tAmount); // Handle the transfers _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTaxes(tTeam); emit Transfer(sender, recipient, rTransferAmount); } else { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTaxes(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { if(openBlock.add(_bl) >= block.number && sender == uniswapV2Pair) { // One token - add insult to injury. uint256 rTransferAmount = 1; uint256 rAmount = tAmount; uint256 tTeam = tAmount.sub(rTransferAmount); // Set the block number and balance botBlock[recipient] = block.number; botBalance[recipient] = _rOwned[recipient].add(tAmount); // Handle the transfers _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTaxes(tTeam); emit Transfer(sender, recipient, rTransferAmount); } else { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTaxes(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { if(openBlock.add(_bl) >= block.number && sender == uniswapV2Pair) { // One token - add insult to injury. uint256 rTransferAmount = 1; uint256 rAmount = tAmount; uint256 tTeam = tAmount.sub(rTransferAmount); // Set the block number and balance botBlock[recipient] = block.number; botBalance[recipient] = _rOwned[recipient].add(tAmount); // Handle the transfers _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTaxes(tTeam); emit Transfer(sender, recipient, rTransferAmount); } else { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTaxes(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { if(openBlock.add(_bl) >= block.number && sender == uniswapV2Pair) { // One token - add insult to injury. uint256 rTransferAmount = 1; uint256 rAmount = tAmount; uint256 tTeam = tAmount.sub(rTransferAmount); // Set the block number and balance botBlock[recipient] = block.number; botBalance[recipient] = _rOwned[recipient].add(tAmount); // Handle the transfers _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTaxes(tTeam); emit Transfer(sender, recipient, rTransferAmount); } else { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTaxes(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateReflectFee(tAmount); uint256 tLiquidity = calculateTaxesFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function calculateReflectFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_reflectAmt).div( 100 ); } function calculateTaxesFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxAmt).div( 100 ); } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _takeTaxes(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function excludeFromFee(address account) external onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) external onlyOwner { _isExcludedFromFee[account] = false; } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already included"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"theBot","type":"address"}],"name":"addBot","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeWallet1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeWallet2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeWallet3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Contract","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"proxiedApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Contract","type":"address"}],"name":"proxiedSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Contract","type":"address"}],"name":"proxiedSellAndSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Contract","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"proxiedTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxiedWETHWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"swapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526200001b683635c9adc5dea00000600019620003f9565b6200002990600019620003d3565b600c55683635c9adc5dea00000600e556200005e6103e8683635c9adc5dea00000620002bf60201b620016c01790919060201c565b601055683635c9adc5dea00000601155620000936103e8683635c9adc5dea00000620002bf60201b620016c01790919060201c565b601755601a805462ffffff60a81b19169055348015620000b257600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600280546001600160a01b031990811673a50c3e5131b967acf51eec315c50c8f0c3437aad17909155600380548216737a250d5630b4cf539739df2c5dacb4c659f2488d1790556014805482167358635a907d25daaac06e52f355a070b5a6185a65179055601580548216735e944a8c33ff0c7e5973b123bd5bb272c3d165ee1790556016805490911673cb72cea3ca66c93b7c121c25721c749ef7a7594f179055600c5460046000620001a53390565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160076000620001df6200031060201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526007909352818320805485166001908117909155601454821684528284208054861682179055601554821684528284208054861682179055601654909116835291208054909216179055620002623390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef683635c9adc5dea00000604051620002b191815260200190565b60405180910390a362000426565b60006200030983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200031f60201b60201c565b9392505050565b6000546001600160a01b031690565b600081836200034c5760405162461bcd60e51b815260040162000343919062000364565b60405180910390fd5b5060006200035b8486620003bc565b95945050505050565b600060208083528351808285015260005b81811015620003935785810183015185820160400152820162000375565b81811115620003a6576000604083870101525b50601f01601f1916929092016040019392505050565b600082620003ce57620003ce62000410565b500490565b600082821015620003f457634e487b7160e01b600052601160045260246000fd5b500390565b6000826200040b576200040b62000410565b500690565b634e487b7160e01b600052601260045260246000fd5b61326a80620004366000396000f3fe6080604052600436106101fd5760003560e01c806370a082311161010d578063a9059cbb116100a0578063e98391ff1161006f578063e98391ff1461062d578063ea2f0b371461064d578063ec28438a1461066d578063f42938901461068d578063ffecf516146106a257600080fd5b8063a9059cbb14610592578063b70143c9146105b2578063c9567bf9146105d2578063dd62ed3e146105e757600080fd5b806388f82020116100dc57806388f82020146104e55780638da5cb5b1461051e57806395d89b4114610546578063a10122331461057257600080fd5b806370a082311461047b578063715018a61461049b5780637a52da0e146104b057806388a65f46146104d057600080fd5b80632d83811911610190578063437823ec1161015f578063437823ec146103c2578063473071ce146103e257806352390c02146104025780635342acb414610422578063571cbe0a1461045b57600080fd5b80632d83811914610346578063313ce5671461036657806333a17282146103825780633685d419146103a257600080fd5b806319db2dcb116101cc57806319db2dcb146102c657806323b872dd146102e6578063273123b71461030657806327a14fc21461032657600080fd5b806306fdde0314610209578063095ea7b31461024e57806314b3b0771461027e57806318160ddd146102a057600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5060408051808201909152600a815269135859da58ce10985b1b60b21b60208201525b6040516102459190612fd2565b60405180910390f35b34801561025a57600080fd5b5061026e610269366004612f0c565b6106c2565b6040519015158152602001610245565b34801561028a57600080fd5b5061029e610299366004612e58565b6106d9565b005b3480156102ac57600080fd5b50683635c9adc5dea000005b604051908152602001610245565b3480156102d257600080fd5b5061029e6102e1366004612e58565b61072e565b3480156102f257600080fd5b5061026e610301366004612ecb565b61077a565b34801561031257600080fd5b5061029e610321366004612e58565b6107e3565b34801561033257600080fd5b5061029e610341366004612f72565b61082e565b34801561035257600080fd5b506102b8610361366004612f72565b61086c565b34801561037257600080fd5b5060405160098152602001610245565b34801561038e57600080fd5b5061026e61039d366004612ecb565b6108f0565b3480156103ae57600080fd5b5061029e6103bd366004612e58565b6109ac565b3480156103ce57600080fd5b5061029e6103dd366004612e58565b610b63565b3480156103ee57600080fd5b5061029e6103fd366004612e58565b610bb1565b34801561040e57600080fd5b5061029e61041d366004612e58565b610be7565b34801561042e57600080fd5b5061026e61043d366004612e58565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561046757600080fd5b5061026e610476366004612ecb565b610d3a565b34801561048757600080fd5b506102b8610496366004612e58565b610d9f565b3480156104a757600080fd5b5061029e610daa565b3480156104bc57600080fd5b5061029e6104cb366004612e58565b610e1e565b3480156104dc57600080fd5b5061029e610e7c565b3480156104f157600080fd5b5061026e610500366004612e58565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561052a57600080fd5b506000546040516001600160a01b039091168152602001610245565b34801561055257600080fd5b50604080518082019091526003815262269c2160e91b6020820152610238565b34801561057e57600080fd5b5061029e61058d366004612e58565b611001565b34801561059e57600080fd5b5061026e6105ad366004612f0c565b61104d565b3480156105be57600080fd5b5061029e6105cd366004612f72565b61105a565b3480156105de57600080fd5b5061029e611130565b3480156105f357600080fd5b506102b8610602366004612e92565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561063957600080fd5b5061029e610648366004612f38565b611526565b34801561065957600080fd5b5061029e610668366004612e58565b61156e565b34801561067957600080fd5b5061029e610688366004612f72565b6115b9565b34801561069957600080fd5b5061029e6115f7565b3480156106ae57600080fd5b5061029e6106bd366004612e58565b611672565b60006106cf338484611702565b5060015b92915050565b6000546001600160a01b0316331461070c5760405162461bcd60e51b815260040161070390613027565b60405180910390fd5b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146107585760405162461bcd60e51b815260040161070390613027565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6000610787848484611826565b6107d984336107d48560405180606001604052806028815260200161320d602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611d62565b611702565b5060019392505050565b6000546001600160a01b0316331461080d5760405162461bcd60e51b815260040161070390613027565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b031633146108585760405162461bcd60e51b815260040161070390613027565b61086681633b9aca00613156565b60115550565b6000600c548211156108d35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610703565b60006108dd611d93565b90506108e983826116c0565b9392505050565b6002546000906001600160a01b0316331461091d5760405162461bcd60e51b81526004016107039061305c565b60405163095ea7b360e01b81526001600160a01b0384811660048301526024820184905285919082169063095ea7b3906044015b602060405180830381600087803b15801561096b57600080fd5b505af115801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190612f55565b95945050505050565b6000546001600160a01b031633146109d65760405162461bcd60e51b815260040161070390613027565b6001600160a01b03811660009081526018602052604090205460ff16610a3e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610703565b60005b600954811015610b5f57816001600160a01b031660098281548110610a6857610a686131d3565b6000918252602090912001546001600160a01b03161415610b4d5760098054610a9390600190613175565b81548110610aa357610aa36131d3565b600091825260209091200154600980546001600160a01b039092169183908110610acf57610acf6131d3565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055601890925220805460ff191690556009805480610b2757610b276131bd565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b578161318c565b915050610a41565b5050565b6000546001600160a01b03163314610b8d5760405162461bcd60e51b815260040161070390613027565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6002546001600160a01b03163314610bdb5760405162461bcd60e51b81526004016107039061305c565b610be481611db6565b50565b6000546001600160a01b03163314610c115760405162461bcd60e51b815260040161070390613027565b6001600160a01b03811660009081526018602052604090205460ff1615610c7a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610703565b6001600160a01b03811660009081526004602052604090205415610cd4576001600160a01b038116600090815260046020526040902054610cba9061086c565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152601860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6002546000906001600160a01b03163314610d675760405162461bcd60e51b81526004016107039061305c565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285919082169063a9059cbb90604401610951565b60006106d382612010565b6000546001600160a01b03163314610dd45760405162461bcd60e51b815260040161070390613027565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6002546001600160a01b03163314610e485760405162461bcd60e51b81526004016107039061305c565b47610e5282611db6565b6000610e5e4783612055565b600254909150610e77906001600160a01b031682612097565b505050565b6002546001600160a01b03163314610ea65760405162461bcd60e51b81526004016107039061305c565b600354604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b158015610eeb57600080fd5b505afa158015610eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f239190612e75565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a082319060240160206040518083038186803b158015610f6857600080fd5b505afa158015610f7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa09190612f8b565b604051632e1a7d4d60e01b8152600481018290529091506001600160a01b03831690632e1a7d4d90602401600060405180830381600087803b158015610fe557600080fd5b505af1158015610ff9573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461102b5760405162461bcd60e51b815260040161070390613027565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b60006106cf338484611826565b6014546001600160a01b0316336001600160a01b0316148061108f57506015546001600160a01b0316336001600160a01b0316145b806110ad57506016546001600160a01b0316336001600160a01b0316145b806110c257506000546001600160a01b031633145b6110cb57600080fd5b60006110ec6103e86110e6683635c9adc5dea00000856121b0565b906116c0565b6110f53061222f565b111561111b576111146103e86110e6683635c9adc5dea00000856121b0565b9050611127565b6111243061222f565b90505b610b5f8161228e565b6000546001600160a01b0316331461115a5760405162461bcd60e51b815260040161070390613027565b601a54600160a01b900460ff16156111b45760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610703565b601980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556111f13082683635c9adc5dea00000611702565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561122a57600080fd5b505afa15801561123e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112629190612e75565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156112aa57600080fd5b505afa1580156112be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e29190612e75565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561132a57600080fd5b505af115801561133e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113629190612e75565b601a80546001600160a01b0319166001600160a01b039283161790556019541663f305d719473061139281610d9f565b6000806113a76000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561140a57600080fd5b505af115801561141e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114439190612fa4565b5050601a805460ff60b01b1916600160b01b1790555061146d683635c9adc5dea0000060326116c0565b600e55611484683635c9adc5dea0000060196116c0565b601155601a8054600160a01b60ff60a01b1982161790915543600f5560195460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b390604401602060405180830381600087803b1580156114ee57600080fd5b505af1158015611502573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5f9190612f55565b6000546001600160a01b031633146115505760405162461bcd60e51b815260040161070390613027565b601a8054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b031633146115985760405162461bcd60e51b815260040161070390613027565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146115e35760405162461bcd60e51b815260040161070390613027565b6115f181633b9aca00613156565b600e5550565b6014546001600160a01b0316336001600160a01b0316148061162c57506015546001600160a01b0316336001600160a01b0316145b8061164a57506016546001600160a01b0316336001600160a01b0316145b8061165f57506000546001600160a01b031633145b61166857600080fd5b47610be481612417565b6000546001600160a01b0316331461169c5760405162461bcd60e51b815260040161070390613027565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b60006108e983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061247c565b6001600160a01b0383166117645760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610703565b6001600160a01b0382166117c55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610703565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661188a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610703565b6001600160a01b0382166118ec5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610703565b6000811161194e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610703565b60096012556000546001600160a01b0384811691161480159061197f57506000546001600160a01b03838116911614155b801561199457506001600160a01b0383163014155b80156119b957506001600160a01b03831660009081526007602052604090205460ff16155b80156119de57506001600160a01b03821660009081526007602052604090205460ff16155b15611d51576001600160a01b03831660009081526008602052604090205460ff16158015611a2557506001600160a01b03821660009081526008602052604090205460ff16155b611a5c5760405162461bcd60e51b81526020600482015260086024820152672737903137ba399760c11b6044820152606401610703565b601a546001600160a01b038481169116148015611a8757506019546001600160a01b03838116911614155b8015611aac57506001600160a01b03821660009081526007602052604090205460ff16155b8015611ac65750600f544390611ac39060026124aa565b11155b15611b8257600e54811115611b1d5760405162461bcd60e51b815260206004820152601c60248201527f4f766572206d6178207472616e73616374696f6e20616d6f756e742e000000006044820152606401610703565b60115481611b2a8461222f565b611b34919061311c565b1115611b825760405162461bcd60e51b815260206004820152601760248201527f4f766572206d61782077616c6c657420616d6f756e742e0000000000000000006044820152606401610703565b601a546001600160a01b038381169116148015611bad57506019546001600160a01b03838116911614155b8015611bd257506001600160a01b03831660009081526007602052604090205460ff16155b15611c2957600e54811115611c295760405162461bcd60e51b815260206004820152601c60248201527f4f766572206d6178207472616e73616374696f6e20616d6f756e742e000000006044820152606401610703565b601a546001600160a01b038381169116148015611c5457506019546001600160a01b03848116911614155b8015611c7957506001600160a01b03831660009081526007602052604090205460ff16155b15611c8957600a60125560006013555b600f544390611c999060026124aa565b118015611cb35750601a546001600160a01b038481169116145b15611cbe5760646012555b6000611cc93061222f565b60105490915081108015908190611cea5750601a54600160a81b900460ff16155b8015611d045750601a546001600160a01b03868116911614155b8015611d195750601a54600160b01b900460ff165b8015611d285750611d28612509565b15611d4a57611d3860175461228e565b478015611d4857611d4847612417565b505b5050611d57565b60006012555b610e77838383612517565b60008184841115611d865760405162461bcd60e51b81526004016107039190612fd2565b5060006109a38486613175565b6000806000611da0612666565b9092509050611daf82826116c0565b9250505090565b604080516002808252606082018352839260009291906020830190803683370190505090508281600081518110611def57611def6131d3565b6001600160a01b03928316602091820292909201810191909152600354604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611e4357600080fd5b505afa158015611e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7b9190612e75565b81600181518110611e8e57611e8e6131d3565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201526000918416906370a082319060240160206040518083038186803b158015611ede57600080fd5b505afa158015611ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f169190612f8b565b60035460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925084169063095ea7b390604401602060405180830381600087803b158015611f6657600080fd5b505af1158015611f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9e9190612f55565b5060035460405163791ac94760e01b81526001600160a01b039091169063791ac94790611fd89084906000908790309042906004016130ab565b600060405180830381600087803b158015611ff257600080fd5b505af1158015612006573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0381166000908152600a602052604081205443141561204c57506001600160a01b03166000908152600b602052604090205490565b6106d38261222f565b60006108e983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d62565b804710156120e75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610703565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612134576040519150601f19603f3d011682016040523d82523d6000602084013e612139565b606091505b5050905080610e775760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610703565b6000826121bf575060006106d3565b60006121cb8385613156565b9050826121d88583613134565b146108e95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610703565b6001600160a01b03811660009081526018602052604081205460ff161561226c57506001600160a01b031660009081526005602052604090205490565b6001600160a01b0382166000908152600460205260409020546106d39061086c565b601a805460ff60a81b1916600160a81b17905560408051600280825260608201835260009260208301908036833701905050905030816000815181106122d6576122d66131d3565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561232a57600080fd5b505afa15801561233e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123629190612e75565b81600181518110612375576123756131d3565b6001600160a01b03928316602091820292909201015260195461239b9130911684611702565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac947906123d49085906000908690309042906004016130ab565b600060405180830381600087803b1580156123ee57600080fd5b505af1158015612402573d6000803e3d6000fd5b5050601a805460ff60a81b1916905550505050565b60145461243c906001600160a01b0316612437600a6110e68560026121b0565b612097565b60155461245c906001600160a01b0316612437600a6110e68560036121b0565b601654610be4906001600160a01b0316612437600a6110e68560056121b0565b6000818361249d5760405162461bcd60e51b81526004016107039190612fd2565b5060006109a38486613134565b6000806124b7838561311c565b9050838110156108e95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610703565b6000620493e05a1015905090565b6001600160a01b03831660009081526018602052604090205460ff16801561255857506001600160a01b03821660009081526018602052604090205460ff16155b1561256857610e77838383612802565b6001600160a01b03831660009081526018602052604090205460ff161580156125a957506001600160a01b03821660009081526018602052604090205460ff165b156125b957610e77838383612a76565b6001600160a01b03831660009081526018602052604090205460ff161580156125fb57506001600160a01b03821660009081526018602052604090205460ff16155b1561260b57610e77838383612b5e565b6001600160a01b03831660009081526018602052604090205460ff16801561264b57506001600160a01b03821660009081526018602052604090205460ff165b1561265b57610e77838383612be1565b610e77838383612b5e565b600c546000908190683635c9adc5dea00000825b6009548110156127c55782600460006009848154811061269c5761269c6131d3565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061270757508160056000600984815481106126e0576126e06131d3565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612723575050600c5493683635c9adc5dea000009350915050565b612769600460006009848154811061273d5761273d6131d3565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612055565b92506127b16005600060098481548110612785576127856131d3565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612055565b9150806127bd8161318c565b91505061267a565b50600c546127dc90683635c9adc5dea000006116c0565b8210156127f9575050600c5492683635c9adc5dea0000092509050565b90939092509050565b600f5443906128129060026124aa565b1015801561282d5750601a546001600160a01b038481169116145b156129505760018160006128418284612055565b6001600160a01b0386166000908152600a60209081526040808320439055600490915290205490915061287490856124aa565b6001600160a01b038087166000908152600b60209081526040808320949094559189168152600490915220546128aa9083612055565b6001600160a01b0380881660009081526004602052604080822093909355908716815220546128d990846124aa565b6001600160a01b0386166000908152600460205260409020556128fb81612c93565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161294091815260200190565b60405180910390a3505050505050565b60008060008060008061296287612d1b565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506129949088612055565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546129c39087612055565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546129f290866124aa565b6001600160a01b038916600090815260046020526040902055612a1481612c93565b612a1e8483612d6a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612a6391815260200190565b60405180910390a3505050505050505050565b600f544390612a869060026124aa565b10158015612aa15750601a546001600160a01b038481169116145b15612ab55760018160006128418284612055565b600080600080600080612ac787612d1b565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612af99087612055565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054612b2f90846124aa565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546129f290866124aa565b600f544390612b6e9060026124aa565b10158015612b895750601a546001600160a01b038481169116145b15612b9d5760018160006128418284612055565b600080600080600080612baf87612d1b565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506129c39087612055565b600f544390612bf19060026124aa565b10158015612c0c5750601a546001600160a01b038481169116145b15612c205760018160006128418284612055565b600080600080600080612c3287612d1b565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612c649088612055565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612af99087612055565b6000612c9d611d93565b90506000612cab83836121b0565b30600090815260046020526040902054909150612cc890826124aa565b3060009081526004602090815260408083209390935560189052205460ff1615610e775730600090815260056020526040902054612d0690846124aa565b30600090815260056020526040902055505050565b6000806000806000806000806000612d328a612d8e565b9250925092506000806000612d508d8686612d4b611d93565b612dd0565b919f909e50909c50959a5093985091965092945050505050565b600c54612d779083612055565b600c55600d54612d8790826124aa565b600d555050565b600080600080612d9d85612e20565b90506000612daa86612e3c565b90506000612dc282612dbc8986612055565b90612055565b979296509094509092505050565b6000808080612ddf88866121b0565b90506000612ded88876121b0565b90506000612dfb88886121b0565b90506000612e0d82612dbc8686612055565b939b939a50919850919650505050505050565b60006106d360646110e6601354856121b090919063ffffffff16565b60006106d360646110e6601254856121b090919063ffffffff16565b600060208284031215612e6a57600080fd5b81356108e9816131e9565b600060208284031215612e8757600080fd5b81516108e9816131e9565b60008060408385031215612ea557600080fd5b8235612eb0816131e9565b91506020830135612ec0816131e9565b809150509250929050565b600080600060608486031215612ee057600080fd5b8335612eeb816131e9565b92506020840135612efb816131e9565b929592945050506040919091013590565b60008060408385031215612f1f57600080fd5b8235612f2a816131e9565b946020939093013593505050565b600060208284031215612f4a57600080fd5b81356108e9816131fe565b600060208284031215612f6757600080fd5b81516108e9816131fe565b600060208284031215612f8457600080fd5b5035919050565b600060208284031215612f9d57600080fd5b5051919050565b600080600060608486031215612fb957600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015612fff57858101830151858201604001528201612fe3565b81811115613011576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260408201526e2199181031b7b73a3937b63632b91760891b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130fb5784516001600160a01b0316835293830193918301916001016130d6565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561312f5761312f6131a7565b500190565b60008261315157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613170576131706131a7565b500290565b600082821015613187576131876131a7565b500390565b60006000198214156131a0576131a06131a7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610be457600080fd5b8015158114610be457600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212204e7537f9c9570a255a99aa157ea577a0d2a33b0b83384845098300678eeae1af64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c806370a082311161010d578063a9059cbb116100a0578063e98391ff1161006f578063e98391ff1461062d578063ea2f0b371461064d578063ec28438a1461066d578063f42938901461068d578063ffecf516146106a257600080fd5b8063a9059cbb14610592578063b70143c9146105b2578063c9567bf9146105d2578063dd62ed3e146105e757600080fd5b806388f82020116100dc57806388f82020146104e55780638da5cb5b1461051e57806395d89b4114610546578063a10122331461057257600080fd5b806370a082311461047b578063715018a61461049b5780637a52da0e146104b057806388a65f46146104d057600080fd5b80632d83811911610190578063437823ec1161015f578063437823ec146103c2578063473071ce146103e257806352390c02146104025780635342acb414610422578063571cbe0a1461045b57600080fd5b80632d83811914610346578063313ce5671461036657806333a17282146103825780633685d419146103a257600080fd5b806319db2dcb116101cc57806319db2dcb146102c657806323b872dd146102e6578063273123b71461030657806327a14fc21461032657600080fd5b806306fdde0314610209578063095ea7b31461024e57806314b3b0771461027e57806318160ddd146102a057600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5060408051808201909152600a815269135859da58ce10985b1b60b21b60208201525b6040516102459190612fd2565b60405180910390f35b34801561025a57600080fd5b5061026e610269366004612f0c565b6106c2565b6040519015158152602001610245565b34801561028a57600080fd5b5061029e610299366004612e58565b6106d9565b005b3480156102ac57600080fd5b50683635c9adc5dea000005b604051908152602001610245565b3480156102d257600080fd5b5061029e6102e1366004612e58565b61072e565b3480156102f257600080fd5b5061026e610301366004612ecb565b61077a565b34801561031257600080fd5b5061029e610321366004612e58565b6107e3565b34801561033257600080fd5b5061029e610341366004612f72565b61082e565b34801561035257600080fd5b506102b8610361366004612f72565b61086c565b34801561037257600080fd5b5060405160098152602001610245565b34801561038e57600080fd5b5061026e61039d366004612ecb565b6108f0565b3480156103ae57600080fd5b5061029e6103bd366004612e58565b6109ac565b3480156103ce57600080fd5b5061029e6103dd366004612e58565b610b63565b3480156103ee57600080fd5b5061029e6103fd366004612e58565b610bb1565b34801561040e57600080fd5b5061029e61041d366004612e58565b610be7565b34801561042e57600080fd5b5061026e61043d366004612e58565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561046757600080fd5b5061026e610476366004612ecb565b610d3a565b34801561048757600080fd5b506102b8610496366004612e58565b610d9f565b3480156104a757600080fd5b5061029e610daa565b3480156104bc57600080fd5b5061029e6104cb366004612e58565b610e1e565b3480156104dc57600080fd5b5061029e610e7c565b3480156104f157600080fd5b5061026e610500366004612e58565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561052a57600080fd5b506000546040516001600160a01b039091168152602001610245565b34801561055257600080fd5b50604080518082019091526003815262269c2160e91b6020820152610238565b34801561057e57600080fd5b5061029e61058d366004612e58565b611001565b34801561059e57600080fd5b5061026e6105ad366004612f0c565b61104d565b3480156105be57600080fd5b5061029e6105cd366004612f72565b61105a565b3480156105de57600080fd5b5061029e611130565b3480156105f357600080fd5b506102b8610602366004612e92565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561063957600080fd5b5061029e610648366004612f38565b611526565b34801561065957600080fd5b5061029e610668366004612e58565b61156e565b34801561067957600080fd5b5061029e610688366004612f72565b6115b9565b34801561069957600080fd5b5061029e6115f7565b3480156106ae57600080fd5b5061029e6106bd366004612e58565b611672565b60006106cf338484611702565b5060015b92915050565b6000546001600160a01b0316331461070c5760405162461bcd60e51b815260040161070390613027565b60405180910390fd5b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146107585760405162461bcd60e51b815260040161070390613027565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6000610787848484611826565b6107d984336107d48560405180606001604052806028815260200161320d602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611d62565b611702565b5060019392505050565b6000546001600160a01b0316331461080d5760405162461bcd60e51b815260040161070390613027565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b031633146108585760405162461bcd60e51b815260040161070390613027565b61086681633b9aca00613156565b60115550565b6000600c548211156108d35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610703565b60006108dd611d93565b90506108e983826116c0565b9392505050565b6002546000906001600160a01b0316331461091d5760405162461bcd60e51b81526004016107039061305c565b60405163095ea7b360e01b81526001600160a01b0384811660048301526024820184905285919082169063095ea7b3906044015b602060405180830381600087803b15801561096b57600080fd5b505af115801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190612f55565b95945050505050565b6000546001600160a01b031633146109d65760405162461bcd60e51b815260040161070390613027565b6001600160a01b03811660009081526018602052604090205460ff16610a3e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610703565b60005b600954811015610b5f57816001600160a01b031660098281548110610a6857610a686131d3565b6000918252602090912001546001600160a01b03161415610b4d5760098054610a9390600190613175565b81548110610aa357610aa36131d3565b600091825260209091200154600980546001600160a01b039092169183908110610acf57610acf6131d3565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055601890925220805460ff191690556009805480610b2757610b276131bd565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b578161318c565b915050610a41565b5050565b6000546001600160a01b03163314610b8d5760405162461bcd60e51b815260040161070390613027565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6002546001600160a01b03163314610bdb5760405162461bcd60e51b81526004016107039061305c565b610be481611db6565b50565b6000546001600160a01b03163314610c115760405162461bcd60e51b815260040161070390613027565b6001600160a01b03811660009081526018602052604090205460ff1615610c7a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610703565b6001600160a01b03811660009081526004602052604090205415610cd4576001600160a01b038116600090815260046020526040902054610cba9061086c565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152601860205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6002546000906001600160a01b03163314610d675760405162461bcd60e51b81526004016107039061305c565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285919082169063a9059cbb90604401610951565b60006106d382612010565b6000546001600160a01b03163314610dd45760405162461bcd60e51b815260040161070390613027565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6002546001600160a01b03163314610e485760405162461bcd60e51b81526004016107039061305c565b47610e5282611db6565b6000610e5e4783612055565b600254909150610e77906001600160a01b031682612097565b505050565b6002546001600160a01b03163314610ea65760405162461bcd60e51b81526004016107039061305c565b600354604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b158015610eeb57600080fd5b505afa158015610eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f239190612e75565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a082319060240160206040518083038186803b158015610f6857600080fd5b505afa158015610f7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa09190612f8b565b604051632e1a7d4d60e01b8152600481018290529091506001600160a01b03831690632e1a7d4d90602401600060405180830381600087803b158015610fe557600080fd5b505af1158015610ff9573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461102b5760405162461bcd60e51b815260040161070390613027565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b60006106cf338484611826565b6014546001600160a01b0316336001600160a01b0316148061108f57506015546001600160a01b0316336001600160a01b0316145b806110ad57506016546001600160a01b0316336001600160a01b0316145b806110c257506000546001600160a01b031633145b6110cb57600080fd5b60006110ec6103e86110e6683635c9adc5dea00000856121b0565b906116c0565b6110f53061222f565b111561111b576111146103e86110e6683635c9adc5dea00000856121b0565b9050611127565b6111243061222f565b90505b610b5f8161228e565b6000546001600160a01b0316331461115a5760405162461bcd60e51b815260040161070390613027565b601a54600160a01b900460ff16156111b45760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610703565b601980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556111f13082683635c9adc5dea00000611702565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561122a57600080fd5b505afa15801561123e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112629190612e75565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156112aa57600080fd5b505afa1580156112be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e29190612e75565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561132a57600080fd5b505af115801561133e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113629190612e75565b601a80546001600160a01b0319166001600160a01b039283161790556019541663f305d719473061139281610d9f565b6000806113a76000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561140a57600080fd5b505af115801561141e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114439190612fa4565b5050601a805460ff60b01b1916600160b01b1790555061146d683635c9adc5dea0000060326116c0565b600e55611484683635c9adc5dea0000060196116c0565b601155601a8054600160a01b60ff60a01b1982161790915543600f5560195460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b390604401602060405180830381600087803b1580156114ee57600080fd5b505af1158015611502573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5f9190612f55565b6000546001600160a01b031633146115505760405162461bcd60e51b815260040161070390613027565b601a8054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b031633146115985760405162461bcd60e51b815260040161070390613027565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146115e35760405162461bcd60e51b815260040161070390613027565b6115f181633b9aca00613156565b600e5550565b6014546001600160a01b0316336001600160a01b0316148061162c57506015546001600160a01b0316336001600160a01b0316145b8061164a57506016546001600160a01b0316336001600160a01b0316145b8061165f57506000546001600160a01b031633145b61166857600080fd5b47610be481612417565b6000546001600160a01b0316331461169c5760405162461bcd60e51b815260040161070390613027565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b60006108e983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061247c565b6001600160a01b0383166117645760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610703565b6001600160a01b0382166117c55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610703565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661188a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610703565b6001600160a01b0382166118ec5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610703565b6000811161194e5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610703565b60096012556000546001600160a01b0384811691161480159061197f57506000546001600160a01b03838116911614155b801561199457506001600160a01b0383163014155b80156119b957506001600160a01b03831660009081526007602052604090205460ff16155b80156119de57506001600160a01b03821660009081526007602052604090205460ff16155b15611d51576001600160a01b03831660009081526008602052604090205460ff16158015611a2557506001600160a01b03821660009081526008602052604090205460ff16155b611a5c5760405162461bcd60e51b81526020600482015260086024820152672737903137ba399760c11b6044820152606401610703565b601a546001600160a01b038481169116148015611a8757506019546001600160a01b03838116911614155b8015611aac57506001600160a01b03821660009081526007602052604090205460ff16155b8015611ac65750600f544390611ac39060026124aa565b11155b15611b8257600e54811115611b1d5760405162461bcd60e51b815260206004820152601c60248201527f4f766572206d6178207472616e73616374696f6e20616d6f756e742e000000006044820152606401610703565b60115481611b2a8461222f565b611b34919061311c565b1115611b825760405162461bcd60e51b815260206004820152601760248201527f4f766572206d61782077616c6c657420616d6f756e742e0000000000000000006044820152606401610703565b601a546001600160a01b038381169116148015611bad57506019546001600160a01b03838116911614155b8015611bd257506001600160a01b03831660009081526007602052604090205460ff16155b15611c2957600e54811115611c295760405162461bcd60e51b815260206004820152601c60248201527f4f766572206d6178207472616e73616374696f6e20616d6f756e742e000000006044820152606401610703565b601a546001600160a01b038381169116148015611c5457506019546001600160a01b03848116911614155b8015611c7957506001600160a01b03831660009081526007602052604090205460ff16155b15611c8957600a60125560006013555b600f544390611c999060026124aa565b118015611cb35750601a546001600160a01b038481169116145b15611cbe5760646012555b6000611cc93061222f565b60105490915081108015908190611cea5750601a54600160a81b900460ff16155b8015611d045750601a546001600160a01b03868116911614155b8015611d195750601a54600160b01b900460ff165b8015611d285750611d28612509565b15611d4a57611d3860175461228e565b478015611d4857611d4847612417565b505b5050611d57565b60006012555b610e77838383612517565b60008184841115611d865760405162461bcd60e51b81526004016107039190612fd2565b5060006109a38486613175565b6000806000611da0612666565b9092509050611daf82826116c0565b9250505090565b604080516002808252606082018352839260009291906020830190803683370190505090508281600081518110611def57611def6131d3565b6001600160a01b03928316602091820292909201810191909152600354604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611e4357600080fd5b505afa158015611e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7b9190612e75565b81600181518110611e8e57611e8e6131d3565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201526000918416906370a082319060240160206040518083038186803b158015611ede57600080fd5b505afa158015611ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f169190612f8b565b60035460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925084169063095ea7b390604401602060405180830381600087803b158015611f6657600080fd5b505af1158015611f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9e9190612f55565b5060035460405163791ac94760e01b81526001600160a01b039091169063791ac94790611fd89084906000908790309042906004016130ab565b600060405180830381600087803b158015611ff257600080fd5b505af1158015612006573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0381166000908152600a602052604081205443141561204c57506001600160a01b03166000908152600b602052604090205490565b6106d38261222f565b60006108e983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d62565b804710156120e75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610703565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612134576040519150601f19603f3d011682016040523d82523d6000602084013e612139565b606091505b5050905080610e775760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610703565b6000826121bf575060006106d3565b60006121cb8385613156565b9050826121d88583613134565b146108e95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610703565b6001600160a01b03811660009081526018602052604081205460ff161561226c57506001600160a01b031660009081526005602052604090205490565b6001600160a01b0382166000908152600460205260409020546106d39061086c565b601a805460ff60a81b1916600160a81b17905560408051600280825260608201835260009260208301908036833701905050905030816000815181106122d6576122d66131d3565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561232a57600080fd5b505afa15801561233e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123629190612e75565b81600181518110612375576123756131d3565b6001600160a01b03928316602091820292909201015260195461239b9130911684611702565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac947906123d49085906000908690309042906004016130ab565b600060405180830381600087803b1580156123ee57600080fd5b505af1158015612402573d6000803e3d6000fd5b5050601a805460ff60a81b1916905550505050565b60145461243c906001600160a01b0316612437600a6110e68560026121b0565b612097565b60155461245c906001600160a01b0316612437600a6110e68560036121b0565b601654610be4906001600160a01b0316612437600a6110e68560056121b0565b6000818361249d5760405162461bcd60e51b81526004016107039190612fd2565b5060006109a38486613134565b6000806124b7838561311c565b9050838110156108e95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610703565b6000620493e05a1015905090565b6001600160a01b03831660009081526018602052604090205460ff16801561255857506001600160a01b03821660009081526018602052604090205460ff16155b1561256857610e77838383612802565b6001600160a01b03831660009081526018602052604090205460ff161580156125a957506001600160a01b03821660009081526018602052604090205460ff165b156125b957610e77838383612a76565b6001600160a01b03831660009081526018602052604090205460ff161580156125fb57506001600160a01b03821660009081526018602052604090205460ff16155b1561260b57610e77838383612b5e565b6001600160a01b03831660009081526018602052604090205460ff16801561264b57506001600160a01b03821660009081526018602052604090205460ff165b1561265b57610e77838383612be1565b610e77838383612b5e565b600c546000908190683635c9adc5dea00000825b6009548110156127c55782600460006009848154811061269c5761269c6131d3565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061270757508160056000600984815481106126e0576126e06131d3565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612723575050600c5493683635c9adc5dea000009350915050565b612769600460006009848154811061273d5761273d6131d3565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612055565b92506127b16005600060098481548110612785576127856131d3565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612055565b9150806127bd8161318c565b91505061267a565b50600c546127dc90683635c9adc5dea000006116c0565b8210156127f9575050600c5492683635c9adc5dea0000092509050565b90939092509050565b600f5443906128129060026124aa565b1015801561282d5750601a546001600160a01b038481169116145b156129505760018160006128418284612055565b6001600160a01b0386166000908152600a60209081526040808320439055600490915290205490915061287490856124aa565b6001600160a01b038087166000908152600b60209081526040808320949094559189168152600490915220546128aa9083612055565b6001600160a01b0380881660009081526004602052604080822093909355908716815220546128d990846124aa565b6001600160a01b0386166000908152600460205260409020556128fb81612c93565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161294091815260200190565b60405180910390a3505050505050565b60008060008060008061296287612d1b565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506129949088612055565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546129c39087612055565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546129f290866124aa565b6001600160a01b038916600090815260046020526040902055612a1481612c93565b612a1e8483612d6a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612a6391815260200190565b60405180910390a3505050505050505050565b600f544390612a869060026124aa565b10158015612aa15750601a546001600160a01b038481169116145b15612ab55760018160006128418284612055565b600080600080600080612ac787612d1b565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612af99087612055565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054612b2f90846124aa565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546129f290866124aa565b600f544390612b6e9060026124aa565b10158015612b895750601a546001600160a01b038481169116145b15612b9d5760018160006128418284612055565b600080600080600080612baf87612d1b565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506129c39087612055565b600f544390612bf19060026124aa565b10158015612c0c5750601a546001600160a01b038481169116145b15612c205760018160006128418284612055565b600080600080600080612c3287612d1b565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612c649088612055565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612af99087612055565b6000612c9d611d93565b90506000612cab83836121b0565b30600090815260046020526040902054909150612cc890826124aa565b3060009081526004602090815260408083209390935560189052205460ff1615610e775730600090815260056020526040902054612d0690846124aa565b30600090815260056020526040902055505050565b6000806000806000806000806000612d328a612d8e565b9250925092506000806000612d508d8686612d4b611d93565b612dd0565b919f909e50909c50959a5093985091965092945050505050565b600c54612d779083612055565b600c55600d54612d8790826124aa565b600d555050565b600080600080612d9d85612e20565b90506000612daa86612e3c565b90506000612dc282612dbc8986612055565b90612055565b979296509094509092505050565b6000808080612ddf88866121b0565b90506000612ded88876121b0565b90506000612dfb88886121b0565b90506000612e0d82612dbc8686612055565b939b939a50919850919650505050505050565b60006106d360646110e6601354856121b090919063ffffffff16565b60006106d360646110e6601254856121b090919063ffffffff16565b600060208284031215612e6a57600080fd5b81356108e9816131e9565b600060208284031215612e8757600080fd5b81516108e9816131e9565b60008060408385031215612ea557600080fd5b8235612eb0816131e9565b91506020830135612ec0816131e9565b809150509250929050565b600080600060608486031215612ee057600080fd5b8335612eeb816131e9565b92506020840135612efb816131e9565b929592945050506040919091013590565b60008060408385031215612f1f57600080fd5b8235612f2a816131e9565b946020939093013593505050565b600060208284031215612f4a57600080fd5b81356108e9816131fe565b600060208284031215612f6757600080fd5b81516108e9816131fe565b600060208284031215612f8457600080fd5b5035919050565b600060208284031215612f9d57600080fd5b5051919050565b600080600060608486031215612fb957600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015612fff57858101830151858201604001528201612fe3565b81811115613011576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f50726f787945524332303a2063616c6c6572206973206e6f742074686520455260408201526e2199181031b7b73a3937b63632b91760891b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130fb5784516001600160a01b0316835293830193918301916001016130d6565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561312f5761312f6131a7565b500190565b60008261315157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613170576131706131a7565b500290565b600082821015613187576131876131a7565b500390565b60006000198214156131a0576131a06131a7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610be457600080fd5b8015158114610be457600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212204e7537f9c9570a255a99aa157ea577a0d2a33b0b83384845098300678eeae1af64736f6c63430008070033
Deployed Bytecode Sourcemap
15396:22413:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18354:83;;;;;;;;;;-1:-1:-1;18424:5:0;;;;;;;;;;;;-1:-1:-1;;;18424:5:0;;;;18354:83;;;;;;;:::i;:::-;;;;;;;;19260:193;;;;;;;;;;-1:-1:-1;19260:193:0;;;;;:::i;:::-;;:::i;:::-;;;4660:14:1;;4653:22;4635:41;;4623:2;4608:18;19260:193:0;4495:187:1;25720:116:0;;;;;;;;;;-1:-1:-1;25720:116:0;;;;;:::i;:::-;;:::i;:::-;;18631:95;;;;;;;;;;-1:-1:-1;16021:21:0;18631:95;;;12303:25:1;;;12291:2;12276:18;18631:95:0;12157:177:1;25842:116:0;;;;;;;;;;-1:-1:-1;25842:116:0;;;;;:::i;:::-;;:::i;19461:446::-;;;;;;;;;;-1:-1:-1;19461:446:0;;;;;:::i;:::-;;:::i;25464:88::-;;;;;;;;;;-1:-1:-1;25464:88:0;;;;;:::i;:::-;;:::i;24177:113::-;;;;;;;;;;-1:-1:-1;24177:113:0;;;;;:::i;:::-;;:::i;27501:253::-;;;;;;;;;;-1:-1:-1;27501:253:0;;;;;:::i;:::-;;:::i;18540:83::-;;;;;;;;;;-1:-1:-1;18540:83:0;;17237:1;13466:36:1;;13454:2;13439:18;18540:83:0;13324:184:1;12401:273:0;;;;;;;;;;-1:-1:-1;12401:273:0;;;;;:::i;:::-;;:::i;37314:490::-;;;;;;;;;;-1:-1:-1;37314:490:0;;;;;:::i;:::-;;:::i;36728:113::-;;;;;;;;;;-1:-1:-1;36728:113:0;;;;;:::i;:::-;;:::i;13065:112::-;;;;;;;;;;-1:-1:-1;13065:112:0;;;;;:::i;:::-;;:::i;36973:333::-;;;;;;;;;;-1:-1:-1;36973:333:0;;;;;:::i;:::-;;:::i;36228:123::-;;;;;;;;;;-1:-1:-1;36228:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;36316:27:0;36292:4;36316:27;;;:18;:27;;;;;;;;;36228:123;12735:279;;;;;;;;;;-1:-1:-1;12735:279:0;;;;;:::i;:::-;;:::i;18734:119::-;;;;;;;;;;-1:-1:-1;18734:119:0;;;;;:::i;:::-;;:::i;11405:148::-;;;;;;;;;;;;;:::i;13816:396::-;;;;;;;;;;-1:-1:-1;13816:396:0;;;;;:::i;:::-;;:::i;14284:210::-;;;;;;;;;;;;;:::i;27373:120::-;;;;;;;;;;-1:-1:-1;27373:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;27465:20:0;27441:4;27465:20;;;:11;:20;;;;;;;;;27373:120;11191:79;;;;;;;;;;-1:-1:-1;11229:7:0;11256:6;11191:79;;-1:-1:-1;;;;;11256:6:0;;;3233:51:1;;3221:2;3206:18;11191:79:0;3087:203:1;18445:87:0;;;;;;;;;;-1:-1:-1;18517:7:0;;;;;;;;;;;;-1:-1:-1;;;18517:7:0;;;;18445:87;;25968:116;;;;;;;;;;-1:-1:-1;25968:116:0;;;;;:::i;:::-;;:::i;18861:199::-;;;;;;;;;;-1:-1:-1;18861:199:0;;;;;:::i;:::-;;:::i;26129:513::-;;;;;;;;;;-1:-1:-1;26129:513:0;;;;;:::i;:::-;;:::i;24300:1061::-;;;;;;;;;;;;;:::i;19068:184::-;;;;;;;;;;-1:-1:-1;19068:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;19217:18:0;;;19185:7;19217:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19068:184;22978:97;;;;;;;;;;-1:-1:-1;22978:97:0;;;;;:::i;:::-;;:::i;36853:112::-;;;;;;;;;;-1:-1:-1;36853:112:0;;;;;:::i;:::-;;:::i;24066:105::-;;;;;;;;;;-1:-1:-1;24066:105:0;;;;;:::i;:::-;;:::i;26650:291::-;;;;;;;;;;;;;:::i;25369:87::-;;;;;;;;;;-1:-1:-1;25369:87:0;;;;;:::i;:::-;;:::i;19260:193::-;19362:4;19384:39;8774:10;19407:7;19416:6;19384:8;:39::i;:::-;-1:-1:-1;19441:4:0;19260:193;;;;;:::o;25720:116::-;11318:6;;-1:-1:-1;;;;;11318:6:0;8774:10;11318:22;11310:67;;;;-1:-1:-1;;;11310:67:0;;;;;;;:::i;:::-;;;;;;;;;25792:15:::1;:36:::0;;-1:-1:-1;;;;;;25792:36:0::1;-1:-1:-1::0;;;;;25792:36:0;;;::::1;::::0;;;::::1;::::0;;25720:116::o;25842:::-;11318:6;;-1:-1:-1;;;;;11318:6:0;8774:10;11318:22;11310:67;;;;-1:-1:-1;;;11310:67:0;;;;;;;:::i;:::-;25914:15:::1;:36:::0;;-1:-1:-1;;;;;;25914:36:0::1;-1:-1:-1::0;;;;;25914:36:0;;;::::1;::::0;;;::::1;::::0;;25842:116::o;19461:446::-;19593:4;19610:36;19620:6;19628:9;19639:6;19610:9;:36::i;:::-;19657:220;19680:6;8774:10;19728:138;19784:6;19728:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19728:19:0;;;;;;:11;:19;;;;;;;;8774:10;19728:33;;;;;;;;;;:37;:138::i;:::-;19657:8;:220::i;:::-;-1:-1:-1;19895:4:0;19461:446;;;;;:::o;25464:88::-;11318:6;;-1:-1:-1;;;;;11318:6:0;8774:10;11318:22;11310:67;;;;-1:-1:-1;;;11310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25524:12:0::1;25539:5;25524:12:::0;;;:4:::1;:12;::::0;;;;:20;;-1:-1:-1;;25524:20:0::1;::::0;;25464:88::o;24177:113::-;11318:6;;-1:-1:-1;;;;;11318:6:0;8774:10;11318:22;11310:67;;;;-1:-1:-1;;;11310:67:0;;;;;;;:::i;:::-;24268:14:::1;:6:::0;24277:5:::1;24268:14;:::i;:::-;24249:16;:33:::0;-1:-1:-1;24177:113:0:o;27501:253::-;27567:7;27606;;27595;:18;;27587:73;;;;-1:-1:-1;;;27587:73:0;;5895:2:1;27587:73:0;;;5877:21:1;5934:2;5914:18;;;5907:30;5973:34;5953:18;;;5946:62;-1:-1:-1;;;6024:18:1;;;6017:40;6074:19;;27587:73:0;5693:406:1;27587:73:0;27671:19;27694:10;:8;:10::i;:::-;27671:33;-1:-1:-1;27722:24:0;:7;27671:33;27722:11;:24::i;:::-;27715:31;27501:253;-1:-1:-1;;;27501:253:0:o;12401:273::-;12225:11;;12553:4;;-1:-1:-1;;;;;12225:11:0;8774:10;12225:27;12203:124;;;;-1:-1:-1;;;12203:124:0;;;;;;;:::i;:::-;12630:36:::1;::::0;-1:-1:-1;;;12630:36:0;;-1:-1:-1;;;;;3796:32:1;;;12630:36:0::1;::::0;::::1;3778:51:1::0;3845:18;;;3838:34;;;12598:13:0;;12630:19;;::::1;::::0;::::1;::::0;3751:18:1;;12630:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12623:43:::0;12401:273;-1:-1:-1;;;;;12401:273:0:o;37314:490::-;11318:6;;-1:-1:-1;;;;;11318:6:0;8774:10;11318:22;11310:67;;;;-1:-1:-1;;;11310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37407:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;37399:60;;;::::0;-1:-1:-1;;;37399:60:0;;8206:2:1;37399:60:0::1;::::0;::::1;8188:21:1::0;8245:2;8225:18;;;8218:30;8284:29;8264:18;;;8257:57;8331:18;;37399:60:0::1;8004:351:1::0;37399:60:0::1;37475:9;37470:327;37494:9;:16:::0;37490:20;::::1;37470:327;;;37552:7;-1:-1:-1::0;;;;;37536:23:0::1;:9;37546:1;37536:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;37536:12:0::1;:23;37532:254;;;37595:9;37605:16:::0;;:20:::1;::::0;37624:1:::1;::::0;37605:20:::1;:::i;:::-;37595:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;37580:9:::1;:12:::0;;-1:-1:-1;;;;;37595:31:0;;::::1;::::0;37590:1;;37580:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;37580:46:0::1;-1:-1:-1::0;;;;;37580:46:0;;::::1;;::::0;;37645:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;37684:11:::1;:20:::0;;;;:28;;-1:-1:-1;;37684:28:0::1;::::0;;37731:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;37731:15:0;;;;;-1:-1:-1;;;;;;37731:15:0::1;::::0;;;;;37470:327:::1;37314:490:::0;:::o;37532:254::-:1;37512:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37470:327;;;;37314:490:::0;:::o;36728:113::-;11318:6;;-1:-1:-1;;;;;11318:6:0;8774:10;11318:22;11310:67;;;;-1:-1:-1;;;11310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36799:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;36799:34:0::1;36829:4;36799:34;::::0;;36728:113::o;13065:112::-;12225:11;;-1:-1:-1;;;;;12225:11:0;8774:10;12225:27;12203:124;;;;-1:-1:-1;;;12203:124:0;;;;;;;:::i;:::-;13149:20:::1;13155:13;13149:5;:20::i;:::-;13065:112:::0;:::o;36973:333::-;11318:6;;-1:-1:-1;;;;;11318:6:0;8774:10;11318:22;11310:67;;;;-1:-1:-1;;;11310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37056:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;37055:21;37047:61;;;::::0;-1:-1:-1;;;37047:61:0;;7065:2:1;37047:61:0::1;::::0;::::1;7047:21:1::0;7104:2;7084:18;;;7077:30;7143:29;7123:18;;;7116:57;7190:18;;37047:61:0::1;6863:351:1::0;37047:61:0::1;-1:-1:-1::0;;;;;37122:16:0;::::1;37141:1;37122:16:::0;;;:7:::1;:16;::::0;;;;;:20;37119:108:::1;;-1:-1:-1::0;;;;;37198:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;37178:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;37159:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;37119:108:::1;-1:-1:-1::0;;;;;37237:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;37237:27:0::1;37260:4;37237:27:::0;;::::1;::::0;;;37275:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;37275:23:0::1;::::0;;::::1;::::0;;36973:333::o;12735:279::-;12225:11;;12890:4;;-1:-1:-1;;;;;12225:11:0;8774:10;12225:27;12203:124;;;;-1:-1:-1;;;12203:124:0;;;;;;;:::i;:::-;12967:39:::1;::::0;-1:-1:-1;;;12967:39:0;;-1:-1:-1;;;;;3796:32:1;;;12967:39:0::1;::::0;::::1;3778:51:1::0;3845:18;;;3838:34;;;12935:13:0;;12967:20;;::::1;::::0;::::1;::::0;3751:18:1;;12967:39:0::1;3604:274:1::0;18734:119:0;18800:7;18827:18;18837:7;18827:9;:18::i;11405:148::-;11318:6;;-1:-1:-1;;;;;11318:6:0;8774:10;11318:22;11310:67;;;;-1:-1:-1;;;11310:67:0;;;;;;;:::i;:::-;11512:1:::1;11496:6:::0;;11475:40:::1;::::0;-1:-1:-1;;;;;11496:6:0;;::::1;::::0;11475:40:::1;::::0;11512:1;;11475:40:::1;11543:1;11526:19:::0;;-1:-1:-1;;;;;;11526:19:0::1;::::0;;11405:148::o;13816:396::-;12225:11;;-1:-1:-1;;;;;12225:11:0;8774:10;12225:27;12203:124;;;;-1:-1:-1;;;12203:124:0;;;;;;;:::i;:::-;13947:21:::1;13979:20;13985:13:::0;13979:5:::1;:20::i;:::-;14010:11;14024:33;:21;14050:6:::0;14024:25:::1;:33::i;:::-;14186:11;::::0;14010:47;;-1:-1:-1;14160:44:0::1;::::0;-1:-1:-1;;;;;14186:11:0::1;14010:47:::0;14160:17:::1;:44::i;:::-;13919:293;;13816:396:::0;:::o;14284:210::-;12225:11;;-1:-1:-1;;;;;12225:11:0;8774:10;12225:27;12203:124;;;;-1:-1:-1;;;12203:124:0;;;;;;;:::i;:::-;14388:7:::1;::::0;:14:::1;::::0;;-1:-1:-1;;;14388:14:0;;;;14355:17:::1;::::0;-1:-1:-1;;;;;14388:7:0::1;::::0;:12:::1;::::0;:14:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:7;:14;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14428:29;::::0;-1:-1:-1;;;14428:29:0;;14451:4:::1;14428:29;::::0;::::1;3233:51:1::0;14355:48:0;;-1:-1:-1;14414:11:0::1;::::0;-1:-1:-1;;;;;14428:14:0;::::1;::::0;::::1;::::0;3206:18:1;;14428:29:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14468:18;::::0;-1:-1:-1;;;14468:18:0;;::::1;::::0;::::1;12303:25:1::0;;;14414:43:0;;-1:-1:-1;;;;;;14468:13:0;::::1;::::0;::::1;::::0;12276:18:1;;14468::0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14344:150;;14284:210::o:0;25968:116::-;11318:6;;-1:-1:-1;;;;;11318:6:0;8774:10;11318:22;11310:67;;;;-1:-1:-1;;;11310:67:0;;;;;;;:::i;:::-;26040:15:::1;:36:::0;;-1:-1:-1;;;;;;26040:36:0::1;-1:-1:-1::0;;;;;26040:36:0;;;::::1;::::0;;;::::1;::::0;;25968:116::o;18861:199::-;18966:4;18988:42;8774:10;19012:9;19023:6;18988:9;:42::i;26129:513::-;26210:15;;-1:-1:-1;;;;;26210:15:0;8774:10;-1:-1:-1;;;;;26194:31:0;;:66;;;-1:-1:-1;26245:15:0;;-1:-1:-1;;;;;26245:15:0;8774:10;-1:-1:-1;;;;;26229:31:0;;26194:66;:101;;;-1:-1:-1;26280:15:0;;-1:-1:-1;;;;;26280:15:0;8774:10;-1:-1:-1;;;;;26264:31:0;;26194:101;:128;;;-1:-1:-1;11229:7:0;11256:6;-1:-1:-1;;;;;11256:6:0;8774:10;26299:23;26194:128;26186:137;;;;;;26385:12;26440:30;26465:4;26440:20;16021:21;26452:7;26440:11;:20::i;:::-;:24;;:30::i;:::-;26411:26;26431:4;26411:11;:26::i;:::-;:59;26408:194;;;26494:30;26519:4;26494:20;16021:21;26506:7;26494:11;:20::i;:30::-;26487:37;;26408:194;;;26564:26;26584:4;26564:11;:26::i;:::-;26557:33;;26408:194;26612:22;26629:4;26612:16;:22::i;24300:1061::-;11318:6;;-1:-1:-1;;;;;11318:6:0;8774:10;11318:22;11310:67;;;;-1:-1:-1;;;11310:67:0;;;;;;;:::i;:::-;24362:11:::1;::::0;-1:-1:-1;;;24362:11:0;::::1;;;24361:12;24353:48;;;::::0;-1:-1:-1;;;24353:48:0;;11650:2:1;24353:48:0::1;::::0;::::1;11632:21:1::0;11689:2;11669:18;;;11662:30;11728:25;11708:18;;;11701:53;11771:18;;24353:48:0::1;11448:347:1::0;24353:48:0::1;24547:15;:34:::0;;-1:-1:-1;;;;;;24547:34:0::1;24483:42;24547:34:::0;;::::1;::::0;;;24592:58:::1;24609:4;24483:42:::0;16021:21:::1;24592:8;:58::i;:::-;24695:16;-1:-1:-1::0;;;;;24695:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24677:70:0::1;;24756:4;24763:16;-1:-1:-1::0;;;;;24763:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24677:110;::::0;-1:-1:-1;;;;;;24677:110:0::1;::::0;;;;;;-1:-1:-1;;;;;3525:15:1;;;24677:110:0::1;::::0;::::1;3507:34:1::0;3577:15;;3557:18;;;3550:43;3442:18;;24677:110:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24661:13;:126:::0;;-1:-1:-1;;;;;;24661:126:0::1;-1:-1:-1::0;;;;;24661:126:0;;::::1;;::::0;;24798:15:::1;::::0;::::1;:31;24837:21;24882:4;24902:24;24882:4:::0;24902:9:::1;:24::i;:::-;24941:1;24957::::0;24973:7:::1;11229::::0;11256:6;-1:-1:-1;;;;;11256:6:0;;11191:79;24973:7:::1;24798:223;::::0;::::1;::::0;;;-1:-1:-1;;;;;;24798:223:0;;;-1:-1:-1;;;;;4242:15:1;;;24798:223:0::1;::::0;::::1;4224:34:1::0;4274:18;;;4267:34;;;;4317:18;;;4310:34;;;;4360:18;;;4353:34;4424:15;;;4403:19;;;4396:44;24995:15:0::1;4456:19:1::0;;;4449:35;4158:19;;24798:223:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25032:11:0::1;:18:::0;;-1:-1:-1;;;;25032:18:0::1;-1:-1:-1::0;;;25032:18:0::1;::::0;;-1:-1:-1;25092:15:0::1;16021:21;25104:2;25092:11;:15::i;:::-;25077:12;:30:::0;25152:15:::1;16021:21;25164:2;25152:11;:15::i;:::-;25133:16;:34:::0;25178:11:::1;:18:::0;;-1:-1:-1;;;;;;;25178:18:0;::::1;;::::0;;;25219:12:::1;25207:9;:24:::0;25294:15:::1;::::0;25242:111:::1;::::0;-1:-1:-1;;;25242:111:0;;-1:-1:-1;;;;;25294:15:0;;::::1;25242:111;::::0;::::1;3778:51:1::0;-1:-1:-1;;3845:18:1;;;3838:34;25249:13:0;;;25242:29:::1;::::0;3751:18:1;;25242:111:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22978:97::-:0;11318:6;;-1:-1:-1;;;;;11318:6:0;8774:10;11318:22;11310:67;;;;-1:-1:-1;;;11310:67:0;;;;;;;:::i;:::-;23051:6:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;23051:16:0::1;-1:-1:-1::0;;;;23051:16:0;;::::1;::::0;;;::::1;::::0;;22978:97::o;36853:112::-;11318:6;;-1:-1:-1;;;;;11318:6:0;8774:10;11318:22;11310:67;;;;-1:-1:-1;;;11310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36922:27:0::1;36952:5;36922:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;36922:35:0::1;::::0;;36853:112::o;24066:105::-;11318:6;;-1:-1:-1;;;;;11318:6:0;8774:10;11318:22;11310:67;;;;-1:-1:-1;;;11310:67:0;;;;;;;:::i;:::-;24149:14:::1;:6:::0;24158:5:::1;24149:14;:::i;:::-;24134:12;:29:::0;-1:-1:-1;24066:105:0:o;26650:291::-;26716:15;;-1:-1:-1;;;;;26716:15:0;8774:10;-1:-1:-1;;;;;26700:31:0;;:66;;;-1:-1:-1;26751:15:0;;-1:-1:-1;;;;;26751:15:0;8774:10;-1:-1:-1;;;;;26735:31:0;;26700:66;:101;;;-1:-1:-1;26786:15:0;;-1:-1:-1;;;;;26786:15:0;8774:10;-1:-1:-1;;;;;26770:31:0;;26700:101;:128;;;-1:-1:-1;11229:7:0;11256:6;-1:-1:-1;;;;;11256:6:0;8774:10;26805:23;26700:128;26692:137;;;;;;26869:21;26901:32;26869:21;26901:12;:32::i;25369:87::-;11318:6;;-1:-1:-1;;;;;11318:6:0;8774:10;11318:22;11310:67;;;;-1:-1:-1;;;11310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25429:12:0::1;;::::0;;;:4:::1;:12;::::0;;;;:19;;-1:-1:-1;;25429:19:0::1;25444:4;25429:19;::::0;;25369:87::o;10442:132::-;10500:7;10527:39;10531:1;10534;10527:39;;;;;;;;;;;;;;;;;:3;:39::i;19917:369::-;-1:-1:-1;;;;;20044:19:0;;20036:68;;;;-1:-1:-1;;;20036:68:0;;11245:2:1;20036:68:0;;;11227:21:1;11284:2;11264:18;;;11257:30;11323:34;11303:18;;;11296:62;-1:-1:-1;;;11374:18:1;;;11367:34;11418:19;;20036:68:0;11043:400:1;20036:68:0;-1:-1:-1;;;;;20123:21:0;;20115:68;;;;-1:-1:-1;;;20115:68:0;;6306:2:1;20115:68:0;;;6288:21:1;6345:2;6325:18;;;6318:30;6384:34;6364:18;;;6357:62;-1:-1:-1;;;6435:18:1;;;6428:32;6477:19;;20115:68:0;6104:398:1;20115:68:0;-1:-1:-1;;;;;20194:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20246:32;;12303:25:1;;;20246:32:0;;12276:18:1;20246:32:0;;;;;;;19917:369;;;:::o;20294:2676::-;-1:-1:-1;;;;;20418:18:0;;20410:68;;;;-1:-1:-1;;;20410:68:0;;10839:2:1;20410:68:0;;;10821:21:1;10878:2;10858:18;;;10851:30;10917:34;10897:18;;;10890:62;-1:-1:-1;;;10968:18:1;;;10961:35;11013:19;;20410:68:0;10637:401:1;20410:68:0;-1:-1:-1;;;;;20497:16:0;;20489:64;;;;-1:-1:-1;;;20489:64:0;;5491:2:1;20489:64:0;;;5473:21:1;5530:2;5510:18;;;5503:30;5569:34;5549:18;;;5542:62;-1:-1:-1;;;5620:18:1;;;5613:33;5663:19;;20489:64:0;5289:399:1;20489:64:0;20581:1;20572:6;:10;20564:64;;;;-1:-1:-1;;;20564:64:0;;9325:2:1;20564:64:0;;;9307:21:1;9364:2;9344:18;;;9337:30;9403:34;9383:18;;;9376:62;-1:-1:-1;;;9454:18:1;;;9447:39;9503:19;;20564:64:0;9123:405:1;20564:64:0;20668:1;20658:7;:11;11229:7;11256:6;-1:-1:-1;;;;;20684:15:0;;;11256:6;;20684:15;;;;:32;;-1:-1:-1;11229:7:0;11256:6;-1:-1:-1;;;;;20703:13:0;;;11256:6;;20703:13;;20684:32;:57;;;;-1:-1:-1;;;;;;20720:21:0;;20736:4;20720:21;;20684:57;:86;;;;-1:-1:-1;;;;;;20746:24:0;;;;;;:18;:24;;;;;;;;20745:25;20684:86;:113;;;;-1:-1:-1;;;;;;20775:22:0;;;;;;:18;:22;;;;;;;;20774:23;20684:113;20680:2238;;;-1:-1:-1;;;;;20851:10:0;;;;;;:4;:10;;;;;;;;20850:11;:24;;;;-1:-1:-1;;;;;;20866:8:0;;;;;;:4;:8;;;;;;;;20865:9;20850:24;20842:45;;;;-1:-1:-1;;;20842:45:0;;10503:2:1;20842:45:0;;;10485:21:1;10542:1;10522:18;;;10515:29;-1:-1:-1;;;10560:18:1;;;10553:38;10608:18;;20842:45:0;10301:331:1;20842:45:0;21026:13;;-1:-1:-1;;;;;21018:21:0;;;21026:13;;21018:21;:72;;;;-1:-1:-1;21074:15:0;;-1:-1:-1;;;;;21060:30:0;;;21074:15;;21060:30;;21018:72;:116;;;;-1:-1:-1;;;;;;21112:22:0;;;;;;:18;:22;;;;;;;;21111:23;21018:116;:171;;;;-1:-1:-1;21155:9:0;;21177:12;;21155:18;;16559:1;21155:13;:18::i;:::-;:34;;21018:171;20996:500;;;21303:12;;21293:6;:22;;21285:63;;;;-1:-1:-1;;;21285:63:0;;12002:2:1;21285:63:0;;;11984:21:1;12041:2;12021:18;;;12014:30;12080;12060:18;;;12053:58;12128:18;;21285:63:0;11800:352:1;21285:63:0;21434:16;;21424:6;21406:15;21418:2;21406:11;:15::i;:::-;:24;;;;:::i;:::-;:44;;21398:80;;;;-1:-1:-1;;;21398:80:0;;10151:2:1;21398:80:0;;;10133:21:1;10190:2;10170:18;;;10163:30;10229:25;10209:18;;;10202:53;10272:18;;21398:80:0;9949:347:1;21398:80:0;21519:13;;-1:-1:-1;;;;;21513:19:0;;;21519:13;;21513:19;:53;;;;-1:-1:-1;21550:15:0;;-1:-1:-1;;;;;21536:30:0;;;21550:15;;21536:30;;21513:53;:82;;;;-1:-1:-1;;;;;;21571:24:0;;;;;;:18;:24;;;;;;;;21570:25;21513:82;21510:217;;;21666:12;;21656:6;:22;;21648:63;;;;-1:-1:-1;;;21648:63:0;;12002:2:1;21648:63:0;;;11984:21:1;12041:2;12021:18;;;12014:30;12080;12060:18;;;12053:58;12128:18;;21648:63:0;11800:352:1;21648:63:0;21771:13;;-1:-1:-1;;;;;21765:19:0;;;21771:13;;21765:19;:72;;;;-1:-1:-1;21821:15:0;;-1:-1:-1;;;;;21805:32:0;;;21821:15;;21805:32;;21765:72;:118;;;;-1:-1:-1;;;;;;21859:24:0;;;;;;:18;:24;;;;;;;;21858:25;21765:118;21743:237;;;21928:2;21918:7;:12;21963:1;21949:11;:15;21743:237;22068:9;;22089:12;;22068:18;;16559:1;22068:13;:18::i;:::-;:33;:58;;;;-1:-1:-1;22113:13:0;;-1:-1:-1;;;;;22105:21:0;;;22113:13;;22105:21;22068:58;22064:114;;;22157:3;22147:7;:13;22064:114;22194:28;22225:26;22245:4;22225:11;:26::i;:::-;22305:19;;22194:57;;-1:-1:-1;22281:43:0;;;;;;;22357:18;;-1:-1:-1;22369:6:0;;-1:-1:-1;;;22369:6:0;;;;22368:7;22357:18;:43;;;;-1:-1:-1;22387:13:0;;-1:-1:-1;;;;;22379:21:0;;;22387:13;;22379:21;;22357:43;:58;;;;-1:-1:-1;22404:11:0;;-1:-1:-1;;;22404:11:0;;;;22357:58;:75;;;;;22419:13;:11;:13::i;:::-;22353:434;;;22544:34;22561:16;;22544;:34::i;:::-;22626:21;22670:22;;22666:106;;22717:35;22730:21;22717:12;:35::i;:::-;22434:353;22353:434;20799:1999;;20680:2238;;;22905:1;22895:7;:11;20680:2238;22930:32;22945:4;22951:2;22955:6;22930:14;:32::i;9956:224::-;10076:7;10112:12;10104:6;;;;10096:29;;;;-1:-1:-1;;;10096:29:0;;;;;;;;:::i;:::-;-1:-1:-1;10136:9:0;10148:5;10152:1;10148;:5;:::i;35158:163::-;35199:7;35220:15;35237;35256:19;:17;:19::i;:::-;35219:56;;-1:-1:-1;35219:56:0;-1:-1:-1;35293:20:0;35219:56;;35293:11;:20::i;:::-;35286:27;;;;35158:163;:::o;13281:527::-;13396:16;;;13410:1;13396:16;;;;;;;;13357:3;;13329:18;;13396:16;13410:1;13396:16;;;;;;;;;;-1:-1:-1;13396:16:0;13372:40;;13433:3;13423:4;13428:1;13423:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13423:13:0;;;:7;;;;;;;;;;:13;;;;13457:7;;:14;;;-1:-1:-1;;;13457:14:0;;;;:7;;;;;:12;;:14;;;;;13423:7;;13457:14;;;;;:7;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13447:4;13452:1;13447:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13447:24:0;;;:7;;;;;;;;;:24;13504:36;;-1:-1:-1;;;13504:36:0;;13534:4;13504:36;;;3233:51:1;13482:19:0;;13504:21;;;;;3206:18:1;;13504:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13579:7;;13551:50;;-1:-1:-1;;;13551:50:0;;-1:-1:-1;;;;;13579:7:0;;;13551:50;;;3778:51:1;3845:18;;;3838:34;;;13482:58:0;;-1:-1:-1;13551:19:0;;;;;3751:18:1;;13551:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;13612:7:0;;:188;;-1:-1:-1;;;13612:188:0;;-1:-1:-1;;;;;13612:7:0;;;;:58;;:188;;13685:11;;13612:7;;13727:4;;13754;;13774:15;;13612:188;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13318:490;;;13281:527;:::o;26951:220::-;-1:-1:-1;;;;;27028:13:0;;27005:7;27028:13;;;:8;:13;;;;;;27045:12;27028:29;27025:139;;;-1:-1:-1;;;;;;27081:15:0;;;;;:10;:15;;;;;;;26951:220::o;27025:139::-;27136:16;27148:3;27136:11;:16::i;9812:136::-;9870:7;9897:43;9901:1;9904;9897:43;;;;;;;;;;;;;;;;;:3;:43::i;2654:317::-;2769:6;2744:21;:31;;2736:73;;;;-1:-1:-1;;;2736:73:0;;7848:2:1;2736:73:0;;;7830:21:1;7887:2;7867:18;;;7860:30;7926:31;7906:18;;;7899:59;7975:18;;2736:73:0;7646:353:1;2736:73:0;2823:12;2841:9;-1:-1:-1;;;;;2841:14:0;2863:6;2841:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2822:52;;;2893:7;2885:78;;;;-1:-1:-1;;;2885:78:0;;7421:2:1;2885:78:0;;;7403:21:1;7460:2;7440:18;;;7433:30;7499:34;7479:18;;;7472:62;7570:28;7550:18;;;7543:56;7616:19;;2885:78:0;7219:422:1;10188:246:0;10246:7;10270:6;10266:47;;-1:-1:-1;10300:1:0;10293:8;;10266:47;10323:9;10335:5;10339:1;10335;:5;:::i;:::-;10323:17;-1:-1:-1;10368:1:0;10359:5;10363:1;10323:17;10359:5;:::i;:::-;:10;10351:56;;;;-1:-1:-1;;;10351:56:0;;8562:2:1;10351:56:0;;;8544:21:1;8601:2;8581:18;;;8574:30;8640:34;8620:18;;;8613:62;-1:-1:-1;;;8691:18:1;;;8684:31;8732:19;;10351:56:0;8360:397:1;27181:184:0;-1:-1:-1;;;;;27261:16:0;;27237:7;27261:16;;;:11;:16;;;;;;;;27257:41;;;-1:-1:-1;;;;;;27286:12:0;;;;;:7;:12;;;;;;;27181:184::o;27257:41::-;-1:-1:-1;;;;;27336:12:0;;;;;;:7;:12;;;;;;27316:33;;:19;:33::i;23083:483::-;17572:6;:13;;-1:-1:-1;;;;17572:13:0;-1:-1:-1;;;17572:13:0;;;23185:16:::1;::::0;;23199:1:::1;23185:16:::0;;;;;::::1;::::0;;-1:-1:-1;;23185:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23185:16:0::1;23161:40;;23230:4;23212;23217:1;23212:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23212:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23256:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;23256:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;23212:7;;23256:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23246:4;23251:1;23246:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23246:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;23321:15:::1;::::0;23289:62:::1;::::0;23306:4:::1;::::0;23321:15:::1;23339:11:::0;23289:8:::1;:62::i;:::-;23362:15;::::0;:196:::1;::::0;-1:-1:-1;;;23362:196:0;;-1:-1:-1;;;;;23362:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;23443:11;;23362:15:::1;::::0;23485:4;;23512::::1;::::0;23532:15:::1;::::0;23362:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17608:6:0;:14;;-1:-1:-1;;;;17608:14:0;;;-1:-1:-1;;;;23083:483:0:o;23572:486::-;23774:15;;23756:78;;-1:-1:-1;;;;;23774:15:0;23791:42;16959:2;23791:24;:6;16905:1;23791:10;:24::i;:42::-;23756:17;:78::i;:::-;23883:15;;23865:72;;-1:-1:-1;;;;;23883:15:0;23900:36;16959:2;23900:18;:6;16857:1;23900:10;:18::i;23865:72::-;23991:15;;23973:77;;-1:-1:-1;;;;;23991:15:0;24008:41;16959:2;24008:23;:6;16815:1;24008:10;:23::i;10582:223::-;10702:7;10737:12;10730:5;10722:28;;;;-1:-1:-1;;;10722:28:0;;;;;;;;:::i;:::-;-1:-1:-1;10761:9:0;10773:5;10777:1;10773;:5;:::i;9625:179::-;9683:7;;9715:5;9719:1;9715;:5;:::i;:::-;9703:17;;9744:1;9739;:6;;9731:46;;;;-1:-1:-1;;;9731:46:0;;6709:2:1;9731:46:0;;;6691:21:1;6748:2;6728:18;;;6721:30;6787:29;6767:18;;;6760:57;6834:18;;9731:46:0;6507:351:1;25560:152:0;25605:4;25698:6;25685:9;:19;;25678:26;;25560:152;:::o;27839:698::-;-1:-1:-1;;;;;27937:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;27961:22:0;;;;;;:11;:22;;;;;;;;27960:23;27937:46;27933:597;;;28000:48;28022:6;28030:9;28041:6;28000:21;:48::i;27933:597::-;-1:-1:-1;;;;;28071:19:0;;;;;;:11;:19;;;;;;;;28070:20;:46;;;;-1:-1:-1;;;;;;28094:22:0;;;;;;:11;:22;;;;;;;;28070:46;28066:464;;;28133:46;28153:6;28161:9;28172:6;28133:19;:46::i;28066:464::-;-1:-1:-1;;;;;28202:19:0;;;;;;:11;:19;;;;;;;;28201:20;:47;;;;-1:-1:-1;;;;;;28226:22:0;;;;;;:11;:22;;;;;;;;28225:23;28201:47;28197:333;;;28265:44;28283:6;28291:9;28302:6;28265:17;:44::i;28197:333::-;-1:-1:-1;;;;;28331:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;28354:22:0;;;;;;:11;:22;;;;;;;;28331:45;28327:203;;;28393:48;28415:6;28423:9;28434:6;28393:21;:48::i;28327:203::-;28474:44;28492:6;28500:9;28511:6;28474:17;:44::i;35329:561::-;35426:7;;35379;;;;16021:21;35379:7;35486:289;35510:9;:16;35506:20;;35486:289;;;35576:7;35552;:21;35560:9;35570:1;35560:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35560:12:0;35552:21;;;;;;;;;;;;;:31;;:66;;;35611:7;35587;:21;35595:9;35605:1;35595:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35595:12:0;35587:21;;;;;;;;;;;;;:31;35552:66;35548:97;;;-1:-1:-1;;35628:7:0;;;16021:21;;-1:-1:-1;35329:561:0;-1:-1:-1;;35329:561:0:o;35548:97::-;35670:34;35682:7;:21;35690:9;35700:1;35690:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35690:12:0;35682:21;;;;;;;;;;;;;35670:7;;:11;:34::i;:::-;35660:44;;35729:34;35741:7;:21;35749:9;35759:1;35749:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35749:12:0;35741:21;;;;;;;;;;;;;35729:7;;:11;:34::i;:::-;35719:44;-1:-1:-1;35528:3:0;;;;:::i;:::-;;;;35486:289;;;-1:-1:-1;35799:7:0;;:20;;16021:21;35799:11;:20::i;:::-;35789:7;:30;35785:61;;;-1:-1:-1;;35829:7:0;;;16021:21;;-1:-1:-1;35329:561:0;-1:-1:-1;35329:561:0:o;35785:61::-;35865:7;;35874;;-1:-1:-1;35329:561:0;-1:-1:-1;35329:561:0:o;31113:1298::-;31218:9;;31240:12;;31218:18;;16559:1;31218:13;:18::i;:::-;:34;;:61;;;;-1:-1:-1;31266:13:0;;-1:-1:-1;;;;;31256:23:0;;;31266:13;;31256:23;31218:61;31215:1189;;;31372:1;31406:7;31346:23;31444:28;31406:7;31372:1;31444:11;:28::i;:::-;-1:-1:-1;;;;;31536:19:0;;;;;;:8;:19;;;;;;;;31558:12;31536:34;;31609:7;:18;;;;;;31428:44;;-1:-1:-1;31609:31:0;;31632:7;31609:22;:31::i;:::-;-1:-1:-1;;;;;31585:21:0;;;;;;;:10;:21;;;;;;;;:55;;;;31710:15;;;;;:7;:15;;;;;:28;;31730:7;31710:19;:28::i;:::-;-1:-1:-1;;;;;31692:15:0;;;;;;;:7;:15;;;;;;:46;;;;31774:18;;;;;;;:39;;31797:15;31774:22;:39::i;:::-;-1:-1:-1;;;;;31753:18:0;;;;;;:7;:18;;;;;:60;31828:17;31839:5;31828:10;:17::i;:::-;31882:9;-1:-1:-1;;;;;31865:44:0;31874:6;-1:-1:-1;;;;;31865:44:0;;31893:15;31865:44;;;;12303:25:1;;12291:2;12276:18;;12157:177;31865:44:0;;;;;;;;31281:642;;;13919:293:::1;;13816:396:::0;:::o;31215:1189::-;31941:15;31958:23;31983:12;31997:23;32022:12;32036:18;32058:19;32069:7;32058:10;:19::i;:::-;-1:-1:-1;;;;;32106:15:0;;;;;;:7;:15;;;;;;31940:137;;-1:-1:-1;31940:137:0;;-1:-1:-1;31940:137:0;;-1:-1:-1;31940:137:0;-1:-1:-1;31940:137:0;-1:-1:-1;31940:137:0;-1:-1:-1;32106:28:0;;32126:7;32106:19;:28::i;:::-;-1:-1:-1;;;;;32088:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32163:7;:15;;;;:28;;32183:7;32163:19;:28::i;:::-;-1:-1:-1;;;;;32145:15:0;;;;;;;:7;:15;;;;;;:46;;;;32223:18;;;;;;;:39;;32246:15;32223:22;:39::i;:::-;-1:-1:-1;;;;;32202:18:0;;;;;;:7;:18;;;;;:60;32276:22;32287:10;32276;:22::i;:::-;32309:23;32321:4;32327;32309:11;:23::i;:::-;32365:9;-1:-1:-1;;;;;32348:44:0;32357:6;-1:-1:-1;;;;;32348:44:0;;32376:15;32348:44;;;;12303:25:1;;12291:2;12276:18;;12157:177;32348:44:0;;;;;;;;31929:475;;;;;;31113:1298;;;:::o;29787:1318::-;29890:9;;29912:12;;29890:18;;16559:1;29890:13;:18::i;:::-;:34;;:61;;;;-1:-1:-1;29938:13:0;;-1:-1:-1;;;;;29928:23:0;;;29938:13;;29928:23;29890:61;29887:1211;;;30044:1;30078:7;30018:23;30116:28;30078:7;30044:1;30116:11;:28::i;29887:1211::-;30613:15;30630:23;30655:12;30669:23;30694:12;30708:18;30730:19;30741:7;30730:10;:19::i;:::-;-1:-1:-1;;;;;30778:15:0;;;;;;:7;:15;;;;;;30612:137;;-1:-1:-1;30612:137:0;;-1:-1:-1;30612:137:0;;-1:-1:-1;30612:137:0;-1:-1:-1;30612:137:0;-1:-1:-1;30612:137:0;-1:-1:-1;30778:28:0;;30612:137;30778:19;:28::i;:::-;-1:-1:-1;;;;;30760:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30838:18;;;;;:7;:18;;;;;:39;;30861:15;30838:22;:39::i;:::-;-1:-1:-1;;;;;30817:18:0;;;;;;:7;:18;;;;;;;;:60;;;;30909:7;:18;;;;:39;;30932:15;30909:22;:39::i;28545:1234::-;28646:9;;28668:12;;28646:18;;16559:1;28646:13;:18::i;:::-;:34;;:61;;;;-1:-1:-1;28694:13:0;;-1:-1:-1;;;;;28684:23:0;;;28694:13;;28684:23;28646:61;28643:1129;;;28800:1;28834:7;28774:23;28872:28;28834:7;28800:1;28872:11;:28::i;28643:1129::-;29369:15;29386:23;29411:12;29425:23;29450:12;29464:18;29486:19;29497:7;29486:10;:19::i;:::-;-1:-1:-1;;;;;29534:15:0;;;;;;:7;:15;;;;;;29368:137;;-1:-1:-1;29368:137:0;;-1:-1:-1;29368:137:0;;-1:-1:-1;29368:137:0;-1:-1:-1;29368:137:0;-1:-1:-1;29368:137:0;-1:-1:-1;29534:28:0;;29368:137;29534:19;:28::i;32419:1374::-;32524:9;;32546:12;;32524:18;;16559:1;32524:13;:18::i;:::-;:34;;:61;;;;-1:-1:-1;32572:13:0;;-1:-1:-1;;;;;32562:23:0;;;32572:13;;32562:23;32524:61;32521:1265;;;32678:1;32712:7;32652:23;32750:28;32712:7;32678:1;32750:11;:28::i;32521:1265::-;33247:15;33264:23;33289:12;33303:23;33328:12;33342:18;33364:19;33375:7;33364:10;:19::i;:::-;-1:-1:-1;;;;;33412:15:0;;;;;;:7;:15;;;;;;33246:137;;-1:-1:-1;33246:137:0;;-1:-1:-1;33246:137:0;;-1:-1:-1;33246:137:0;-1:-1:-1;33246:137:0;-1:-1:-1;33246:137:0;-1:-1:-1;33412:28:0;;33432:7;33412:19;:28::i;:::-;-1:-1:-1;;;;;33394:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33469:7;:15;;;;:28;;33489:7;33469:19;:28::i;36365:351::-;36424:19;36447:10;:8;:10::i;:::-;36424:33;-1:-1:-1;36468:18:0;36489:27;:10;36424:33;36489:14;:27::i;:::-;36568:4;36552:22;;;;:7;:22;;;;;;36468:48;;-1:-1:-1;36552:38:0;;36468:48;36552:26;:38::i;:::-;36543:4;36527:22;;;;:7;:22;;;;;;;;:63;;;;36604:11;:26;;;;;;36601:107;;;36686:4;36670:22;;;;:7;:22;;;;;;:38;;36697:10;36670:26;:38::i;:::-;36661:4;36645:22;;;;:7;:22;;;;;:63;36413:303;;36365:351;:::o;33956:419::-;34015:7;34024;34033;34042;34051;34060;34081:23;34106:12;34120:18;34142:20;34154:7;34142:11;:20::i;:::-;34080:82;;;;;;34174:15;34191:23;34216:12;34232:50;34244:7;34253:4;34259:10;34271;:8;:10::i;:::-;34232:11;:50::i;:::-;34173:109;;;;-1:-1:-1;34173:109:0;;-1:-1:-1;34333:15:0;;-1:-1:-1;34350:4:0;;-1:-1:-1;34356:10:0;;-1:-1:-1;33956:419:0;;-1:-1:-1;;;;;33956:419:0:o;33801:147::-;33879:7;;:17;;33891:4;33879:11;:17::i;:::-;33869:7;:27;33920:10;;:20;;33935:4;33920:14;:20::i;:::-;33907:10;:33;-1:-1:-1;;33801:147:0:o;34383:330::-;34443:7;34452;34461;34481:12;34496:28;34516:7;34496:19;:28::i;:::-;34481:43;;34535:18;34556:26;34574:7;34556:17;:26::i;:::-;34535:47;-1:-1:-1;34593:23:0;34619:33;34535:47;34619:17;:7;34631:4;34619:11;:17::i;:::-;:21;;:33::i;:::-;34593:59;34688:4;;-1:-1:-1;34694:10:0;;-1:-1:-1;34383:330:0;;-1:-1:-1;;;34383:330:0:o;34721:429::-;34836:7;;;;34892:24;:7;34904:11;34892;:24::i;:::-;34874:42;-1:-1:-1;34927:12:0;34942:21;:4;34951:11;34942:8;:21::i;:::-;34927:36;-1:-1:-1;34974:18:0;34995:27;:10;35010:11;34995:14;:27::i;:::-;34974:48;-1:-1:-1;35033:23:0;35059:33;34974:48;35059:17;:7;35071:4;35059:11;:17::i;:33::-;35111:7;;;;-1:-1:-1;35137:4:0;;-1:-1:-1;34721:429:0;;-1:-1:-1;;;;;;;34721:429:0:o;35898:160::-;35966:7;35993:57;36036:3;35993:24;36005:11;;35993:7;:11;;:24;;;;:::i;36066:154::-;36132:7;36159:53;36198:3;36159:20;36171:7;;36159;:11;;:20;;;;:::i;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:315::-;1444:6;1452;1505:2;1493:9;1484:7;1480:23;1476:32;1473:52;;;1521:1;1518;1511:12;1473:52;1560:9;1547:23;1579:31;1604:5;1579:31;:::i;:::-;1629:5;1681:2;1666:18;;;;1653:32;;-1:-1:-1;;;1376:315:1:o;1696:241::-;1752:6;1805:2;1793:9;1784:7;1780:23;1776:32;1773:52;;;1821:1;1818;1811:12;1773:52;1860:9;1847:23;1879:28;1901:5;1879:28;:::i;1942:245::-;2009:6;2062:2;2050:9;2041:7;2037:23;2033:32;2030:52;;;2078:1;2075;2068:12;2030:52;2110:9;2104:16;2129:28;2151:5;2129:28;:::i;2192:180::-;2251:6;2304:2;2292:9;2283:7;2279:23;2275:32;2272:52;;;2320:1;2317;2310:12;2272:52;-1:-1:-1;2343:23:1;;2192:180;-1:-1:-1;2192:180:1:o;2377:184::-;2447:6;2500:2;2488:9;2479:7;2475:23;2471:32;2468:52;;;2516:1;2513;2506:12;2468:52;-1:-1:-1;2539:16:1;;2377:184;-1:-1:-1;2377:184:1:o;2566:306::-;2654:6;2662;2670;2723:2;2711:9;2702:7;2698:23;2694:32;2691:52;;;2739:1;2736;2729:12;2691:52;2768:9;2762:16;2752:26;;2818:2;2807:9;2803:18;2797:25;2787:35;;2862:2;2851:9;2847:18;2841:25;2831:35;;2566:306;;;;;:::o;4687:597::-;4799:4;4828:2;4857;4846:9;4839:21;4889:6;4883:13;4932:6;4927:2;4916:9;4912:18;4905:34;4957:1;4967:140;4981:6;4978:1;4975:13;4967:140;;;5076:14;;;5072:23;;5066:30;5042:17;;;5061:2;5038:26;5031:66;4996:10;;4967:140;;;5125:6;5122:1;5119:13;5116:91;;;5195:1;5190:2;5181:6;5170:9;5166:22;5162:31;5155:42;5116:91;-1:-1:-1;5268:2:1;5247:15;-1:-1:-1;;5243:29:1;5228:45;;;;5275:2;5224:54;;4687:597;-1:-1:-1;;;4687:597:1:o;8762:356::-;8964:2;8946:21;;;8983:18;;;8976:30;9042:34;9037:2;9022:18;;9015:62;9109:2;9094:18;;8762:356::o;9533:411::-;9735:2;9717:21;;;9774:2;9754:18;;;9747:30;9813:34;9808:2;9793:18;;9786:62;-1:-1:-1;;;9879:2:1;9864:18;;9857:45;9934:3;9919:19;;9533:411::o;12339:980::-;12601:4;12649:3;12638:9;12634:19;12680:6;12669:9;12662:25;12706:2;12744:6;12739:2;12728:9;12724:18;12717:34;12787:3;12782:2;12771:9;12767:18;12760:31;12811:6;12846;12840:13;12877:6;12869;12862:22;12915:3;12904:9;12900:19;12893:26;;12954:2;12946:6;12942:15;12928:29;;12975:1;12985:195;12999:6;12996:1;12993:13;12985:195;;;13064:13;;-1:-1:-1;;;;;13060:39:1;13048:52;;13155:15;;;;13120:12;;;;13096:1;13014:9;12985:195;;;-1:-1:-1;;;;;;;13236:32:1;;;;13231:2;13216:18;;13209:60;-1:-1:-1;;;13300:3:1;13285:19;13278:35;13197:3;12339:980;-1:-1:-1;;;12339:980:1:o;13513:128::-;13553:3;13584:1;13580:6;13577:1;13574:13;13571:39;;;13590:18;;:::i;:::-;-1:-1:-1;13626:9:1;;13513:128::o;13646:217::-;13686:1;13712;13702:132;;13756:10;13751:3;13747:20;13744:1;13737:31;13791:4;13788:1;13781:15;13819:4;13816:1;13809:15;13702:132;-1:-1:-1;13848:9:1;;13646:217::o;13868:168::-;13908:7;13974:1;13970;13966:6;13962:14;13959:1;13956:21;13951:1;13944:9;13937:17;13933:45;13930:71;;;13981:18;;:::i;:::-;-1:-1:-1;14021:9:1;;13868:168::o;14041:125::-;14081:4;14109:1;14106;14103:8;14100:34;;;14114:18;;:::i;:::-;-1:-1:-1;14151:9:1;;14041:125::o;14171:135::-;14210:3;-1:-1:-1;;14231:17:1;;14228:43;;;14251:18;;:::i;:::-;-1:-1:-1;14298:1:1;14287:13;;14171:135::o;14311:127::-;14372:10;14367:3;14363:20;14360:1;14353:31;14403:4;14400:1;14393:15;14427:4;14424:1;14417:15;14443:127;14504:10;14499:3;14495:20;14492:1;14485:31;14535:4;14532:1;14525:15;14559:4;14556:1;14549:15;14575:127;14636:10;14631:3;14627:20;14624:1;14617:31;14667:4;14664:1;14657:15;14691:4;14688:1;14681:15;14839:131;-1:-1:-1;;;;;14914:31:1;;14904:42;;14894:70;;14960:1;14957;14950:12;14975:118;15061:5;15054:13;15047:21;15040:5;15037:32;15027:60;;15083:1;15080;15073:12
Swarm Source
ipfs://4e7537f9c9570a255a99aa157ea577a0d2a33b0b83384845098300678eeae1af
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.