Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000,000 HEINU
Holders
55
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
17,553,713.485194946 HEINUValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TokenContract
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-05 */ // SPDX-License-Identifier: Unlicensed pragma solidity >=0.8.0 <0.9.0; abstract contract Context { function _msgSender() internal view returns (address payable) { return payable(msg.sender); } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library 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 * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } abstract contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract TokenContract is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; 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 _isExcluded; address[] private _excluded; mapping (address => bool) private _liquidityHolders; mapping (address => bool) private _isSniper; mapping (address => bool) private _isBlackListedBot; address[] private _blackListedBots; uint private startingSupply = 1_000_000_000_000; //1 Trillion, underscores aid readability uint256 private constant MAX = ~uint256(0); uint8 private _decimals = 9; uint256 private _decimalsMul = _decimals; uint256 private _tTotal = startingSupply * 10**_decimalsMul; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Heavenly Emperor Inu"; string private _symbol = "HEINU"; uint256 public _taxFee = 2; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 7; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; // UNI ROUTER address private _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address public uniswapV2Pair; address public burnAddress = 0x000000000000000000000000000000000000dEaD; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; // Max TX amount is 1% of the total supply. uint256 private maxTxPercent = 5; // Starting value, managed by changingMaxTxAmt. uint256 private maxTxDivisor = 1000; uint256 private _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor; uint256 private _previousMaxTxAmount = _maxTxAmount; uint256 public maxTxAmountUI = (startingSupply * maxTxPercent) / maxTxDivisor; // Actual amount for UI's uint256 public amountOfTxs = 0; // 0.05% of Total Supply uint256 private numTokensSellToAddToLiquidity = (_tTotal * 5) / 10000; bool private sniperProtection = true; bool public _hasLiqBeenAdded = false; uint256 private _liqAddBlock = 0; uint256 private snipeBlockAmt = 2; uint256 public snipersCaught = 0; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SniperCaught(address sniperAddress); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _tOwned[_msgSender()] = _tTotal; _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_v2Router); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _liquidityHolders[owner()] = true; _isExcluded[address(this)] = true; _excluded.push(address(this)); _isExcluded[owner()] = true; _excluded.push(owner()); _isExcluded[burnAddress] = true; _excluded.push(burnAddress); _isExcluded[uniswapV2Pair] = true; _excluded.push(uniswapV2Pair); // BLACKLIST _isBlackListedBot[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true; _blackListedBots.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)); _isBlackListedBot[address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345)] = true; _blackListedBots.push(address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345)); _isBlackListedBot[address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)] = true; _blackListedBots.push(address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)); _isBlackListedBot[address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)] = true; _blackListedBots.push(address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)); _isBlackListedBot[address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)] = true; _blackListedBots.push(address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)); _isBlackListedBot[address(0xDC81a3450817A58D00f45C86d0368290088db848)] = true; _blackListedBots.push(address(0xDC81a3450817A58D00f45C86d0368290088db848)); _isBlackListedBot[address(0x45fD07C63e5c316540F14b2002B085aEE78E3881)] = true; _blackListedBots.push(address(0x45fD07C63e5c316540F14b2002B085aEE78E3881)); _isBlackListedBot[address(0x27F9Adb26D532a41D97e00206114e429ad58c679)] = true; _blackListedBots.push(address(0x27F9Adb26D532a41D97e00206114e429ad58c679)); emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function isSniper(address account) public view returns (bool) { return _isSniper[account]; } function removeSniper(address account) external onlyOwner() { require(_isSniper[account], "Account is not a recorded sniper."); _isSniper[account] = false; } function setSniperProtectionEnabled(bool enabled) external onlyOwner() { sniperProtection = enabled; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { require(taxFee <= 8); // Prevents owner from abusing fees. _taxFee = taxFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { require(liquidityFee <= 8); // Prevents owner from abusing fees. _liquidityFee = liquidityFee; } // Adjusted to allow for smaller than 1%'s, as low as 0.1% function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner() { require(divisor <= 10000); // Cannot set lower than 0.01% _maxTxAmount = _tTotal.mul(percent).div( divisor // Division by divisor, makes it mutable. ); maxTxAmountUI = startingSupply.mul(percent).div(divisor); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) external onlyOwner { _isExcludedFromFee[account] = false; } function addBotToBlackList(address account) external onlyOwner() { require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.'); require(!_isBlackListedBot[account], "Account is already blacklisted"); _isBlackListedBot[account] = true; _blackListedBots.push(account); } function removeBotFromBlackList(address account) external onlyOwner() { require(_isBlackListedBot[account], "Account is not blacklisted"); for (uint256 i = 0; i < _blackListedBots.length; i++) { if (_blackListedBots[i] == account) { _blackListedBots[i] = _blackListedBots[_blackListedBots.length - 1]; _isBlackListedBot[account] = false; _blackListedBots.pop(); break; } } } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } 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); } function excludeFromReward(address account) public onlyOwner() { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); 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 excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} 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 = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(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 _takeLiquidity(address sender, 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); emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success. } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } 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 changingMaxTxAmt() internal { uint256 percent; uint256 divisor; if (amountOfTxs <=50) { percent = 5; divisor = 1000; } else if (amountOfTxs <=100) { percent = 1; divisor = 100; } else if (amountOfTxs <=150) { percent = 2; divisor = 100; } else { percent = 100; divisor = 100; } _maxTxAmount = _tTotal.mul(percent).div(divisor); // Division by divisor, makes it mutable. maxTxAmountUI = startingSupply.mul(percent).div(divisor); } 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"); require(!_isBlackListedBot[from], "You have no power here!"); require(!_isBlackListedBot[to], "You have no power here!"); require(!_isBlackListedBot[tx.origin], "You have no power here!"); if (amountOfTxs <=155) { if(!_liquidityHolders[from] && !_liquidityHolders[to] && from == uniswapV2Pair) { changingMaxTxAmt(); require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } } // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount && amountOfTxs <= 151) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if (overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable burnAddress, block.timestamp ); } function _checkLiquidityAdd(address from, address to) private { require(!_hasLiqBeenAdded, "Liquidity already added and marked."); if (_liquidityHolders[from] && to == uniswapV2Pair) { _hasLiqBeenAdded = true; _liqAddBlock = block.number; swapAndLiquifyEnabled = true; emit SwapAndLiquifyEnabledUpdated(true); } } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { // Failsafe, disable the whole system if needed. if (sniperProtection){ // If sender is a sniper address, reject the sell. if (isSniper(sender)) { revert("Sniper rejected."); } // Check if this is the liquidity adding tx to startup. if (!_hasLiqBeenAdded) { _checkLiquidityAdd(sender, recipient); } else { if (_liqAddBlock > 0 && sender == uniswapV2Pair && !_liquidityHolders[sender] && !_liquidityHolders[recipient] ) { if (block.number - _liqAddBlock < snipeBlockAmt) { _isSniper[recipient] = true; snipersCaught ++; emit SniperCaught(recipient); } } } } if(!takeFee) removeAllFee(); 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); } if(!takeFee) restoreAllFee(); if (amountOfTxs < 155 && _hasLiqBeenAdded && sender == uniswapV2Pair) { amountOfTxs++; } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (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); _takeLiquidity(sender, tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (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); _takeLiquidity(sender, tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (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); _takeLiquidity(sender, tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (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); _takeLiquidity(sender, tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
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":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","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":[],"name":"amountOfTxs","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":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSniperProtectionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a060405264e8d4a51000600d55600e805460ff19166009908117909155600f8190556200002f90600a6200092c565b600d546200003e9190620009ea565b6010819055620000519060001962000a63565b6200005f9060001962000a0c565b6011556040805180820190915260148082527f48656176656e6c7920456d7065726f7220496e750000000000000000000000006020909201918252620000a891601391620007f6565b50604080518082019091526005808252644845494e5560d81b6020909201918252620000d791601491620007f6565b506002601581905560165560076017819055601855601980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055601b8054600161ff0160a01b03191661dead1790556005601c8190556103e8601d81905560105490916200014691620009ea565b620001529190620008cc565b601e55601e54601f55601d54601c54600d54620001709190620009ea565b6200017c9190620008cc565b60205560006021556127106010546005620001989190620009ea565b620001a49190620008cc565b6022556023805461ffff19166001179055600060248190556002602555602655348015620001d157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060105433600090815260046020818152604080842094909455601154600382529284902092909255601954835163c45a015560e01b815293516001600160a01b0390911693849363c45a015593828101939192829003018186803b1580156200027b57600080fd5b505afa15801562000290573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b691906200089c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002ff57600080fd5b505afa15801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a91906200089c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200038357600080fd5b505af115801562000398573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003be91906200089c565b601a80546001600160a01b03199081166001600160a01b03938416178255606084901b6001600160601b0319166080526000805484168152600660209081526040808320805460ff1990811660019081179092553080865283862080548316841790558554891686526009855283862080548316841790558086526007855283862080548316841790556008805480850182557ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee390810180548a1690931790925586548a168752848720805484168517905586548154808601835583018054918c16918a16919091179055601b80548b16885285882080548516861790555481548086018355830180548a16918c1691909117905588548a16875293862080548316841790559654835480840190945592909601805486169290971691909117909555600b90527f74d7fc0a45c6928cce922f294b8bf5e7fff3f89771e2114b18a5cd1d1f4577358054841685179055600c805480860182557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79081018054851673e031b36b53e53a292a20c5f08fd1658cddf74fce1790557f0f1b60510ca1e1bf00eec02fea41847afc989fbd83852cdb3ca91ce622a1d54d80548616871790558154808701835581018054851673e516bdee55b0b4e9bacaf6285130de15589b13451790557ff8ebe5e7623ca891e5bb8ce5e72b0c5ddeae8c7d8c0932740de908fdac44ec0080548616871790558154808701835581018054851673a1cec245c456dd1bd9f2815a6955fef44eb4191b1790557f16a15fb2aa0b66ff4f4234d97be437d134114b368ffd745d8de6e6838f9fba3a80548616871790558154808701835581018054851673d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf951790557f287292fc49b5d73ef6d6f7f228ef3fe49c8cd2ac6e9c89064eb61fd7fb9f519a80548616871790558154808701835581018054851673fe76f05dc59fec04184fa0245ad0c3cf9a57b9641790557f66504bab4295e88d515a9325b1909b99559a398602c86c64fe2ad7b94e0f761680548616871790558154808701835581018054851673dc81a3450817a58d00f45c86d0368290088db8481790557f4c88ad78a60fb4355141b4ac46c8f7af9256d7dcebaf319200612bf767c0bd8a8054861687179055815480870183558101805485167345fd07c63e5c316540f14b2002b085aee78e38811790557f509f0c09776cdc3f0041fbef622c53cd68b7fdb9a9aa03b44d173795d33d9a2c80549095168617909455805494850181559052910180549091167327f9adb26d532a41d97e00206114e429ad58c679179055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601054604051620007e791815260200190565b60405180910390a35062000aa6565b828054620008049062000a26565b90600052602060002090601f01602090048101928262000828576000855562000873565b82601f106200084357805160ff191683800117855562000873565b8280016001018555821562000873579182015b828111156200087357825182559160200191906001019062000856565b506200088192915062000885565b5090565b5b8082111562000881576000815560010162000886565b600060208284031215620008ae578081fd5b81516001600160a01b0381168114620008c5578182fd5b9392505050565b600082620008de57620008de62000a90565b500490565b600181815b808511156200092457816000190482111562000908576200090862000a7a565b808516156200091657918102915b93841c9390800290620008e8565b509250929050565b6000620008c583836000826200094557506001620009e4565b816200095457506000620009e4565b81600181146200096d5760028114620009785762000998565b6001915050620009e4565b60ff8411156200098c576200098c62000a7a565b50506001821b620009e4565b5060208310610133831016604e8410600b8410161715620009bd575081810a620009e4565b620009c98383620008e3565b8060001904821115620009e057620009e062000a7a565b0290505b92915050565b600081600019048311821515161562000a075762000a0762000a7a565b500290565b60008282101562000a215762000a2162000a7a565b500390565b600181811c9082168062000a3b57607f821691505b6020821081141562000a5d57634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000a755762000a7562000a90565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b60805160601c61309962000ae86000396000818161035301528181612507015281816125dd015281816126190152818161268b01526126f301526130996000f3fe6080604052600436106102605760003560e01c806350a8e016116101445780638ee88c53116100b6578063c49b9a801161007a578063c49b9a8014610756578063d7124d9f14610776578063dd62ed3e14610796578063e79d4160146107dc578063ea2f0b37146107f2578063f2fde38b1461081257600080fd5b80638ee88c53146106cb57806395d89b41146106eb5780639ab24e4b14610700578063a457c2d714610716578063a9059cbb1461073657600080fd5b806370a082311161010857806370a08231146105ff57806370d5ae051461061f578063715018a61461063f5780637ded4d6a1461065457806388f82020146106745780638da5cb5b146106ad57600080fd5b806350a8e0161461055b57806352390c021461057a5780635342acb41461059a57806364038409146105d35780636bc87c3a146105e957600080fd5b806333251a0b116101dd5780633f3cf56c116101a15780633f3cf56c1461049a5780634303443d146104ba578063437823ec146104da5780634549b039146104fa57806349bd5a5e1461051a5780634a74bb021461053a57600080fd5b806333251a0b146104045780633685d4191461042457806339509351146104445780633b124fe7146104645780633bd5d1731461047a57600080fd5b80631694505e116102245780631694505e1461034157806318160ddd1461038d57806323b872dd146103a25780632d838119146103c2578063313ce567146103e257600080fd5b8063061c82d01461026c57806306fdde031461028e578063095ea7b3146102b95780630f3a325f146102e957806313114a9d1461032257600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c610287366004612d64565b610832565b005b34801561029a57600080fd5b506102a3610878565b6040516102b09190612df5565b60405180910390f35b3480156102c557600080fd5b506102d96102d4366004612d1f565b61090a565b60405190151581526020016102b0565b3480156102f557600080fd5b506102d9610304366004612c6f565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561032e57600080fd5b506012545b6040519081526020016102b0565b34801561034d57600080fd5b506103757f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102b0565b34801561039957600080fd5b50601054610333565b3480156103ae57600080fd5b506102d96103bd366004612cdf565b610921565b3480156103ce57600080fd5b506103336103dd366004612d64565b61098a565b3480156103ee57600080fd5b50600e5460405160ff90911681526020016102b0565b34801561041057600080fd5b5061028c61041f366004612c6f565b610a0e565b34801561043057600080fd5b5061028c61043f366004612c6f565b610acb565b34801561045057600080fd5b506102d961045f366004612d1f565b610cba565b34801561047057600080fd5b5061033360155481565b34801561048657600080fd5b5061028c610495366004612d64565b610cf0565b3480156104a657600080fd5b5061028c6104b5366004612da7565b610dda565b3480156104c657600080fd5b5061028c6104d5366004612c6f565b610e4f565b3480156104e657600080fd5b5061028c6104f5366004612c6f565b610fc1565b34801561050657600080fd5b50610333610515366004612d7c565b61100f565b34801561052657600080fd5b50601a54610375906001600160a01b031681565b34801561054657600080fd5b50601b546102d990600160a81b900460ff1681565b34801561056757600080fd5b506023546102d990610100900460ff1681565b34801561058657600080fd5b5061028c610595366004612c6f565b61109c565b3480156105a657600080fd5b506102d96105b5366004612c6f565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105df57600080fd5b5061033360205481565b3480156105f557600080fd5b5061033360175481565b34801561060b57600080fd5b5061033361061a366004612c6f565b6111ef565b34801561062b57600080fd5b50601b54610375906001600160a01b031681565b34801561064b57600080fd5b5061028c61124e565b34801561066057600080fd5b5061028c61066f366004612c6f565b6112c2565b34801561068057600080fd5b506102d961068f366004612c6f565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156106b957600080fd5b506000546001600160a01b0316610375565b3480156106d757600080fd5b5061028c6106e6366004612d64565b61147e565b3480156106f757600080fd5b506102a36114bb565b34801561070c57600080fd5b5061033360215481565b34801561072257600080fd5b506102d9610731366004612d1f565b6114ca565b34801561074257600080fd5b506102d9610751366004612d1f565b611519565b34801561076257600080fd5b5061028c610771366004612d4a565b611526565b34801561078257600080fd5b5061028c610791366004612d4a565b6115a8565b3480156107a257600080fd5b506103336107b1366004612ca7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156107e857600080fd5b5061033360265481565b3480156107fe57600080fd5b5061028c61080d366004612c6f565b6115e5565b34801561081e57600080fd5b5061028c61082d366004612c6f565b611630565b6000546001600160a01b031633146108655760405162461bcd60e51b815260040161085c90612e48565b60405180910390fd5b600881111561087357600080fd5b601555565b60606013805461088790612f92565b80601f01602080910402602001604051908101604052809291908181526020018280546108b390612f92565b80156109005780601f106108d557610100808354040283529160200191610900565b820191906000526020600020905b8154815290600101906020018083116108e357829003601f168201915b5050505050905090565b600061091733848461171a565b5060015b92915050565b600061092e84848461183e565b610980843361097b85604051806060016040528060288152602001613017602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611bc8565b61171a565b5060019392505050565b60006011548211156109f15760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161085c565b60006109fb611c02565b9050610a078382611c25565b9392505050565b6000546001600160a01b03163314610a385760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b0381166000908152600a602052604090205460ff16610aaa5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e74206973206e6f742061207265636f7264656420736e697065726044820152601760f91b606482015260840161085c565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b03163314610af55760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b03811660009081526007602052604090205460ff16610b5d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161085c565b60005b600854811015610cb657816001600160a01b031660088281548110610b9557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610ca45760088054610bc090600190612f7b565b81548110610bde57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610c1857634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610c7e57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610cae81612fcd565b915050610b60565b5050565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161091791859061097b9086611c67565b3360008181526007602052604090205460ff1615610d655760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161085c565b6000610d7083611cc6565b505050506001600160a01b038416600090815260036020526040902054919250610d9c91905082611d15565b6001600160a01b038316600090815260036020526040902055601154610dc29082611d15565b601155601254610dd29084611c67565b601255505050565b6000546001600160a01b03163314610e045760405162461bcd60e51b815260040161085c90612e48565b612710811115610e1357600080fd5b610e3281610e2c84601054611d5790919063ffffffff16565b90611c25565b601e55600d54610e48908290610e2c9085611d57565b6020555050565b6000546001600160a01b03163314610e795760405162461bcd60e51b815260040161085c90612e48565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610ef25760405162461bcd60e51b8152602060048201526024808201527f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f756044820152633a32b91760e11b606482015260840161085c565b6001600160a01b0381166000908152600b602052604090205460ff1615610f5b5760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015260640161085c565b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b03163314610feb5760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006010548311156110635760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161085c565b8161108257600061107384611cc6565b5093955061091b945050505050565b600061108d84611cc6565b5092955061091b945050505050565b6000546001600160a01b031633146110c65760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b03811660009081526007602052604090205460ff161561112f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161085c565b6001600160a01b03811660009081526003602052604090205415611189576001600160a01b03811660009081526003602052604090205461116f9061098a565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff161561122c57506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461091b9061098a565b6000546001600160a01b031633146112785760405162461bcd60e51b815260040161085c90612e48565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112ec5760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b0381166000908152600b602052604090205460ff166113545760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015260640161085c565b60005b600c54811015610cb657816001600160a01b0316600c828154811061138c57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561146c57600c80546113b790600190612f7b565b815481106113d557634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600c80546001600160a01b03909216918390811061140f57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600b90915260409020805460ff19169055600c805480610c7e57634e487b7160e01b600052603160045260246000fd5b8061147681612fcd565b915050611357565b6000546001600160a01b031633146114a85760405162461bcd60e51b815260040161085c90612e48565b60088111156114b657600080fd5b601755565b60606014805461088790612f92565b6000610917338461097b8560405180606001604052806025815260200161303f602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611bc8565b600061091733848461183e565b6000546001600160a01b031633146115505760405162461bcd60e51b815260040161085c90612e48565b601b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061159d90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115d25760405162461bcd60e51b815260040161085c90612e48565b6023805460ff1916911515919091179055565b6000546001600160a01b0316331461160f5760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b0316331461165a5760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b0381166116bf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161085c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661177c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161085c565b6001600160a01b0382166117dd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161085c565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118a25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161085c565b6001600160a01b0382166119045760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161085c565b600081116119665760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161085c565b6001600160a01b0383166000908152600b602052604090205460ff161561199f5760405162461bcd60e51b815260040161085c90612e7d565b6001600160a01b0382166000908152600b602052604090205460ff16156119d85760405162461bcd60e51b815260040161085c90612e7d565b326000908152600b602052604090205460ff1615611a085760405162461bcd60e51b815260040161085c90612e7d565b609b60215411611add576001600160a01b03831660009081526009602052604090205460ff16158015611a5457506001600160a01b03821660009081526009602052604090205460ff16155b8015611a6d5750601a546001600160a01b038481169116145b15611add57611a7a611dd6565b601e54811115611add5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161085c565b6000611ae8306111ef565b9050601e548110158015611aff5750609760215411155b15611b095750601e545b60225481108015908190611b275750601b54600160a01b900460ff16155b8015611b415750601a546001600160a01b03868116911614155b8015611b565750601b54600160a81b900460ff165b15611b69576022549150611b6982611e3b565b6001600160a01b03851660009081526006602052604090205460019060ff1680611bab57506001600160a01b03851660009081526006602052604090205460ff165b15611bb4575060005b611bc086868684611ee2565b505050505050565b60008184841115611bec5760405162461bcd60e51b815260040161085c9190612df5565b506000611bf98486612f7b565b95945050505050565b6000806000611c0f612228565b9092509050611c1e8282611c25565b9250505090565b6000610a0783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506123e2565b600080611c748385612f24565b905083811015610a075760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161085c565b6000806000806000806000806000611cdd8a612410565b9250925092506000806000611cfb8d8686611cf6611c02565b612452565b919f909e50909c50959a5093985091965092945050505050565b6000610a0783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bc8565b600082611d665750600061091b565b6000611d728385612f5c565b905082611d7f8583612f3c565b14610a075760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161085c565b600080603260215411611df05750600590506103e8610e13565b606460215411611e065750600190506064610e13565b609660215411611e1c5750600290506064610e13565b506064905080610e3281610e2c84601054611d5790919063ffffffff16565b601b805460ff60a01b1916600160a01b1790556000611e5b826002611c25565b90506000611e698383611d15565b905047611e75836124a2565b6000611e814783611d15565b9050611e8d8382612685565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601b805460ff60a01b19169055505050565b60235460ff161561205e576001600160a01b0384166000908152600a602052604090205460ff1615611f495760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b604482015260640161085c565b602354610100900460ff16611f6757611f62848461277a565b61205e565b6000602454118015611f865750601a546001600160a01b038581169116145b8015611fab57506001600160a01b03841660009081526009602052604090205460ff16155b8015611fd057506001600160a01b03831660009081526009602052604090205460ff16155b1561205e57602554602454611fe59043612f7b565b101561205e576001600160a01b0383166000908152600a60205260408120805460ff19166001179055602680549161201c83612fcd565b90915550506040516001600160a01b03841681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b8061206b5761206b61287f565b6001600160a01b03841660009081526007602052604090205460ff1680156120ac57506001600160a01b03831660009081526007602052604090205460ff16155b156120c1576120bc8484846128ad565b6121bf565b6001600160a01b03841660009081526007602052604090205460ff1615801561210257506001600160a01b03831660009081526007602052604090205460ff165b15612112576120bc8484846129d4565b6001600160a01b03841660009081526007602052604090205460ff1615801561215457506001600160a01b03831660009081526007602052604090205460ff16155b15612164576120bc848484612a7d565b6001600160a01b03841660009081526007602052604090205460ff1680156121a457506001600160a01b03831660009081526007602052604090205460ff165b156121b4576120bc848484612ac1565b6121bf848484612a7d565b806121d5576121d5601654601555601854601755565b609b6021541080156121ee5750602354610100900460ff165b80156122075750601a546001600160a01b038581169116145b15612222576021805490600061221c83612fcd565b91905055505b50505050565b6011546010546000918291825b6008548110156123b25782600360006008848154811061226557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806122de57508160046000600884815481106122b757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122f457601154601054945094505050509091565b612348600360006008848154811061231c57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611d15565b925061239e600460006008848154811061237257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611d15565b9150806123aa81612fcd565b915050612235565b506010546011546123c291611c25565b8210156123d9576011546010549350935050509091565b90939092509050565b600081836124035760405162461bcd60e51b815260040161085c9190612df5565b506000611bf98486612f3c565b60008060008061241f85612b34565b9050600061242c86612b50565b905060006124448261243e8986611d15565b90611d15565b979296509094509092505050565b60008080806124618886611d57565b9050600061246f8887611d57565b9050600061247d8888611d57565b9050600061248f8261243e8686611d15565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124e557634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561255e57600080fd5b505afa158015612572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125969190612c8b565b816001815181106125b757634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050612602307f00000000000000000000000000000000000000000000000000000000000000008461171a565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612657908590600090869030904290600401612eb4565b600060405180830381600087803b15801561267157600080fd5b505af1158015611bc0573d6000803e3d6000fd5b6126b0307f00000000000000000000000000000000000000000000000000000000000000008461171a565b601b5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c4016060604051808303818588803b15801561273a57600080fd5b505af115801561274e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127739190612dc8565b5050505050565b602354610100900460ff16156127de5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b606482015260840161085c565b6001600160a01b03821660009081526009602052604090205460ff1680156128135750601a546001600160a01b038281169116145b15610cb6576023805461ff00191661010017905543602455601b805460ff60a81b1916600160a81b1790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906128739060011515815260200190565b60405180910390a15050565b60155415801561288f5750601754155b1561289657565b601580546016556017805460185560009182905555565b6000806000806000806128bf87611cc6565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506128f19088611d15565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546129209087611d15565b6001600160a01b03808b1660009081526003602052604080822093909355908a168152205461294f9086611c67565b6001600160a01b0389166000908152600360205260409020556129728982612b6c565b61297c8483612c36565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516129c191815260200190565b60405180910390a3505050505050505050565b6000806000806000806129e687611cc6565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612a189087611d15565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612a4e9084611c67565b6001600160a01b03891660009081526004602090815260408083209390935560039052205461294f9086611c67565b600080600080600080612a8f87611cc6565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506129209087611d15565b600080600080600080612ad387611cc6565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612b059088611d15565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612a189087611d15565b600061091b6064610e2c60155485611d5790919063ffffffff16565b600061091b6064610e2c60175485611d5790919063ffffffff16565b6000612b76611c02565b90506000612b848383611d57565b30600090815260036020526040902054909150612ba19082611c67565b3060009081526003602090815260408083209390935560079052205460ff1615612bf05730600090815260046020526040902054612bdf9084611c67565b306000908152600460205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b601154612c439083611d15565b601155601254612c539082611c67565b6012555050565b80358015158114612c6a57600080fd5b919050565b600060208284031215612c80578081fd5b8135610a0781612ffe565b600060208284031215612c9c578081fd5b8151610a0781612ffe565b60008060408385031215612cb9578081fd5b8235612cc481612ffe565b91506020830135612cd481612ffe565b809150509250929050565b600080600060608486031215612cf3578081fd5b8335612cfe81612ffe565b92506020840135612d0e81612ffe565b929592945050506040919091013590565b60008060408385031215612d31578182fd5b8235612d3c81612ffe565b946020939093013593505050565b600060208284031215612d5b578081fd5b610a0782612c5a565b600060208284031215612d75578081fd5b5035919050565b60008060408385031215612d8e578182fd5b82359150612d9e60208401612c5a565b90509250929050565b60008060408385031215612db9578182fd5b50508035926020909101359150565b600080600060608486031215612ddc578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b81811015612e2157858101830151858201604001528201612e05565b81811115612e325783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f596f752068617665206e6f20706f776572206865726521000000000000000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612f035784516001600160a01b031683529383019391830191600101612ede565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612f3757612f37612fe8565b500190565b600082612f5757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612f7657612f76612fe8565b500290565b600082821015612f8d57612f8d612fe8565b500390565b600181811c90821680612fa657607f821691505b60208210811415612fc757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612fe157612fe1612fe8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461301357600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ad28e8dcbae1da4fd68ac5b0c05815fc414fc1d684d4b1e288c190907a06171264736f6c63430008040033
Deployed Bytecode
0x6080604052600436106102605760003560e01c806350a8e016116101445780638ee88c53116100b6578063c49b9a801161007a578063c49b9a8014610756578063d7124d9f14610776578063dd62ed3e14610796578063e79d4160146107dc578063ea2f0b37146107f2578063f2fde38b1461081257600080fd5b80638ee88c53146106cb57806395d89b41146106eb5780639ab24e4b14610700578063a457c2d714610716578063a9059cbb1461073657600080fd5b806370a082311161010857806370a08231146105ff57806370d5ae051461061f578063715018a61461063f5780637ded4d6a1461065457806388f82020146106745780638da5cb5b146106ad57600080fd5b806350a8e0161461055b57806352390c021461057a5780635342acb41461059a57806364038409146105d35780636bc87c3a146105e957600080fd5b806333251a0b116101dd5780633f3cf56c116101a15780633f3cf56c1461049a5780634303443d146104ba578063437823ec146104da5780634549b039146104fa57806349bd5a5e1461051a5780634a74bb021461053a57600080fd5b806333251a0b146104045780633685d4191461042457806339509351146104445780633b124fe7146104645780633bd5d1731461047a57600080fd5b80631694505e116102245780631694505e1461034157806318160ddd1461038d57806323b872dd146103a25780632d838119146103c2578063313ce567146103e257600080fd5b8063061c82d01461026c57806306fdde031461028e578063095ea7b3146102b95780630f3a325f146102e957806313114a9d1461032257600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c610287366004612d64565b610832565b005b34801561029a57600080fd5b506102a3610878565b6040516102b09190612df5565b60405180910390f35b3480156102c557600080fd5b506102d96102d4366004612d1f565b61090a565b60405190151581526020016102b0565b3480156102f557600080fd5b506102d9610304366004612c6f565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561032e57600080fd5b506012545b6040519081526020016102b0565b34801561034d57600080fd5b506103757f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102b0565b34801561039957600080fd5b50601054610333565b3480156103ae57600080fd5b506102d96103bd366004612cdf565b610921565b3480156103ce57600080fd5b506103336103dd366004612d64565b61098a565b3480156103ee57600080fd5b50600e5460405160ff90911681526020016102b0565b34801561041057600080fd5b5061028c61041f366004612c6f565b610a0e565b34801561043057600080fd5b5061028c61043f366004612c6f565b610acb565b34801561045057600080fd5b506102d961045f366004612d1f565b610cba565b34801561047057600080fd5b5061033360155481565b34801561048657600080fd5b5061028c610495366004612d64565b610cf0565b3480156104a657600080fd5b5061028c6104b5366004612da7565b610dda565b3480156104c657600080fd5b5061028c6104d5366004612c6f565b610e4f565b3480156104e657600080fd5b5061028c6104f5366004612c6f565b610fc1565b34801561050657600080fd5b50610333610515366004612d7c565b61100f565b34801561052657600080fd5b50601a54610375906001600160a01b031681565b34801561054657600080fd5b50601b546102d990600160a81b900460ff1681565b34801561056757600080fd5b506023546102d990610100900460ff1681565b34801561058657600080fd5b5061028c610595366004612c6f565b61109c565b3480156105a657600080fd5b506102d96105b5366004612c6f565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105df57600080fd5b5061033360205481565b3480156105f557600080fd5b5061033360175481565b34801561060b57600080fd5b5061033361061a366004612c6f565b6111ef565b34801561062b57600080fd5b50601b54610375906001600160a01b031681565b34801561064b57600080fd5b5061028c61124e565b34801561066057600080fd5b5061028c61066f366004612c6f565b6112c2565b34801561068057600080fd5b506102d961068f366004612c6f565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156106b957600080fd5b506000546001600160a01b0316610375565b3480156106d757600080fd5b5061028c6106e6366004612d64565b61147e565b3480156106f757600080fd5b506102a36114bb565b34801561070c57600080fd5b5061033360215481565b34801561072257600080fd5b506102d9610731366004612d1f565b6114ca565b34801561074257600080fd5b506102d9610751366004612d1f565b611519565b34801561076257600080fd5b5061028c610771366004612d4a565b611526565b34801561078257600080fd5b5061028c610791366004612d4a565b6115a8565b3480156107a257600080fd5b506103336107b1366004612ca7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156107e857600080fd5b5061033360265481565b3480156107fe57600080fd5b5061028c61080d366004612c6f565b6115e5565b34801561081e57600080fd5b5061028c61082d366004612c6f565b611630565b6000546001600160a01b031633146108655760405162461bcd60e51b815260040161085c90612e48565b60405180910390fd5b600881111561087357600080fd5b601555565b60606013805461088790612f92565b80601f01602080910402602001604051908101604052809291908181526020018280546108b390612f92565b80156109005780601f106108d557610100808354040283529160200191610900565b820191906000526020600020905b8154815290600101906020018083116108e357829003601f168201915b5050505050905090565b600061091733848461171a565b5060015b92915050565b600061092e84848461183e565b610980843361097b85604051806060016040528060288152602001613017602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611bc8565b61171a565b5060019392505050565b60006011548211156109f15760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161085c565b60006109fb611c02565b9050610a078382611c25565b9392505050565b6000546001600160a01b03163314610a385760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b0381166000908152600a602052604090205460ff16610aaa5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e74206973206e6f742061207265636f7264656420736e697065726044820152601760f91b606482015260840161085c565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b03163314610af55760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b03811660009081526007602052604090205460ff16610b5d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161085c565b60005b600854811015610cb657816001600160a01b031660088281548110610b9557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610ca45760088054610bc090600190612f7b565b81548110610bde57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610c1857634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610c7e57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610cae81612fcd565b915050610b60565b5050565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161091791859061097b9086611c67565b3360008181526007602052604090205460ff1615610d655760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161085c565b6000610d7083611cc6565b505050506001600160a01b038416600090815260036020526040902054919250610d9c91905082611d15565b6001600160a01b038316600090815260036020526040902055601154610dc29082611d15565b601155601254610dd29084611c67565b601255505050565b6000546001600160a01b03163314610e045760405162461bcd60e51b815260040161085c90612e48565b612710811115610e1357600080fd5b610e3281610e2c84601054611d5790919063ffffffff16565b90611c25565b601e55600d54610e48908290610e2c9085611d57565b6020555050565b6000546001600160a01b03163314610e795760405162461bcd60e51b815260040161085c90612e48565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610ef25760405162461bcd60e51b8152602060048201526024808201527f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f756044820152633a32b91760e11b606482015260840161085c565b6001600160a01b0381166000908152600b602052604090205460ff1615610f5b5760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015260640161085c565b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b03163314610feb5760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006010548311156110635760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161085c565b8161108257600061107384611cc6565b5093955061091b945050505050565b600061108d84611cc6565b5092955061091b945050505050565b6000546001600160a01b031633146110c65760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b03811660009081526007602052604090205460ff161561112f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161085c565b6001600160a01b03811660009081526003602052604090205415611189576001600160a01b03811660009081526003602052604090205461116f9061098a565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff161561122c57506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461091b9061098a565b6000546001600160a01b031633146112785760405162461bcd60e51b815260040161085c90612e48565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112ec5760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b0381166000908152600b602052604090205460ff166113545760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015260640161085c565b60005b600c54811015610cb657816001600160a01b0316600c828154811061138c57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561146c57600c80546113b790600190612f7b565b815481106113d557634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600c80546001600160a01b03909216918390811061140f57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600b90915260409020805460ff19169055600c805480610c7e57634e487b7160e01b600052603160045260246000fd5b8061147681612fcd565b915050611357565b6000546001600160a01b031633146114a85760405162461bcd60e51b815260040161085c90612e48565b60088111156114b657600080fd5b601755565b60606014805461088790612f92565b6000610917338461097b8560405180606001604052806025815260200161303f602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611bc8565b600061091733848461183e565b6000546001600160a01b031633146115505760405162461bcd60e51b815260040161085c90612e48565b601b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061159d90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115d25760405162461bcd60e51b815260040161085c90612e48565b6023805460ff1916911515919091179055565b6000546001600160a01b0316331461160f5760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b0316331461165a5760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b0381166116bf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161085c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661177c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161085c565b6001600160a01b0382166117dd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161085c565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118a25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161085c565b6001600160a01b0382166119045760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161085c565b600081116119665760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161085c565b6001600160a01b0383166000908152600b602052604090205460ff161561199f5760405162461bcd60e51b815260040161085c90612e7d565b6001600160a01b0382166000908152600b602052604090205460ff16156119d85760405162461bcd60e51b815260040161085c90612e7d565b326000908152600b602052604090205460ff1615611a085760405162461bcd60e51b815260040161085c90612e7d565b609b60215411611add576001600160a01b03831660009081526009602052604090205460ff16158015611a5457506001600160a01b03821660009081526009602052604090205460ff16155b8015611a6d5750601a546001600160a01b038481169116145b15611add57611a7a611dd6565b601e54811115611add5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161085c565b6000611ae8306111ef565b9050601e548110158015611aff5750609760215411155b15611b095750601e545b60225481108015908190611b275750601b54600160a01b900460ff16155b8015611b415750601a546001600160a01b03868116911614155b8015611b565750601b54600160a81b900460ff165b15611b69576022549150611b6982611e3b565b6001600160a01b03851660009081526006602052604090205460019060ff1680611bab57506001600160a01b03851660009081526006602052604090205460ff165b15611bb4575060005b611bc086868684611ee2565b505050505050565b60008184841115611bec5760405162461bcd60e51b815260040161085c9190612df5565b506000611bf98486612f7b565b95945050505050565b6000806000611c0f612228565b9092509050611c1e8282611c25565b9250505090565b6000610a0783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506123e2565b600080611c748385612f24565b905083811015610a075760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161085c565b6000806000806000806000806000611cdd8a612410565b9250925092506000806000611cfb8d8686611cf6611c02565b612452565b919f909e50909c50959a5093985091965092945050505050565b6000610a0783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bc8565b600082611d665750600061091b565b6000611d728385612f5c565b905082611d7f8583612f3c565b14610a075760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161085c565b600080603260215411611df05750600590506103e8610e13565b606460215411611e065750600190506064610e13565b609660215411611e1c5750600290506064610e13565b506064905080610e3281610e2c84601054611d5790919063ffffffff16565b601b805460ff60a01b1916600160a01b1790556000611e5b826002611c25565b90506000611e698383611d15565b905047611e75836124a2565b6000611e814783611d15565b9050611e8d8382612685565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601b805460ff60a01b19169055505050565b60235460ff161561205e576001600160a01b0384166000908152600a602052604090205460ff1615611f495760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b604482015260640161085c565b602354610100900460ff16611f6757611f62848461277a565b61205e565b6000602454118015611f865750601a546001600160a01b038581169116145b8015611fab57506001600160a01b03841660009081526009602052604090205460ff16155b8015611fd057506001600160a01b03831660009081526009602052604090205460ff16155b1561205e57602554602454611fe59043612f7b565b101561205e576001600160a01b0383166000908152600a60205260408120805460ff19166001179055602680549161201c83612fcd565b90915550506040516001600160a01b03841681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b8061206b5761206b61287f565b6001600160a01b03841660009081526007602052604090205460ff1680156120ac57506001600160a01b03831660009081526007602052604090205460ff16155b156120c1576120bc8484846128ad565b6121bf565b6001600160a01b03841660009081526007602052604090205460ff1615801561210257506001600160a01b03831660009081526007602052604090205460ff165b15612112576120bc8484846129d4565b6001600160a01b03841660009081526007602052604090205460ff1615801561215457506001600160a01b03831660009081526007602052604090205460ff16155b15612164576120bc848484612a7d565b6001600160a01b03841660009081526007602052604090205460ff1680156121a457506001600160a01b03831660009081526007602052604090205460ff165b156121b4576120bc848484612ac1565b6121bf848484612a7d565b806121d5576121d5601654601555601854601755565b609b6021541080156121ee5750602354610100900460ff165b80156122075750601a546001600160a01b038581169116145b15612222576021805490600061221c83612fcd565b91905055505b50505050565b6011546010546000918291825b6008548110156123b25782600360006008848154811061226557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806122de57508160046000600884815481106122b757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122f457601154601054945094505050509091565b612348600360006008848154811061231c57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611d15565b925061239e600460006008848154811061237257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611d15565b9150806123aa81612fcd565b915050612235565b506010546011546123c291611c25565b8210156123d9576011546010549350935050509091565b90939092509050565b600081836124035760405162461bcd60e51b815260040161085c9190612df5565b506000611bf98486612f3c565b60008060008061241f85612b34565b9050600061242c86612b50565b905060006124448261243e8986611d15565b90611d15565b979296509094509092505050565b60008080806124618886611d57565b9050600061246f8887611d57565b9050600061247d8888611d57565b9050600061248f8261243e8686611d15565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124e557634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561255e57600080fd5b505afa158015612572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125969190612c8b565b816001815181106125b757634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050612602307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461171a565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612657908590600090869030904290600401612eb4565b600060405180830381600087803b15801561267157600080fd5b505af1158015611bc0573d6000803e3d6000fd5b6126b0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461171a565b601b5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c4016060604051808303818588803b15801561273a57600080fd5b505af115801561274e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127739190612dc8565b5050505050565b602354610100900460ff16156127de5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b606482015260840161085c565b6001600160a01b03821660009081526009602052604090205460ff1680156128135750601a546001600160a01b038281169116145b15610cb6576023805461ff00191661010017905543602455601b805460ff60a81b1916600160a81b1790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906128739060011515815260200190565b60405180910390a15050565b60155415801561288f5750601754155b1561289657565b601580546016556017805460185560009182905555565b6000806000806000806128bf87611cc6565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506128f19088611d15565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546129209087611d15565b6001600160a01b03808b1660009081526003602052604080822093909355908a168152205461294f9086611c67565b6001600160a01b0389166000908152600360205260409020556129728982612b6c565b61297c8483612c36565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516129c191815260200190565b60405180910390a3505050505050505050565b6000806000806000806129e687611cc6565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612a189087611d15565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612a4e9084611c67565b6001600160a01b03891660009081526004602090815260408083209390935560039052205461294f9086611c67565b600080600080600080612a8f87611cc6565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506129209087611d15565b600080600080600080612ad387611cc6565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612b059088611d15565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612a189087611d15565b600061091b6064610e2c60155485611d5790919063ffffffff16565b600061091b6064610e2c60175485611d5790919063ffffffff16565b6000612b76611c02565b90506000612b848383611d57565b30600090815260036020526040902054909150612ba19082611c67565b3060009081526003602090815260408083209390935560079052205460ff1615612bf05730600090815260046020526040902054612bdf9084611c67565b306000908152600460205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b601154612c439083611d15565b601155601254612c539082611c67565b6012555050565b80358015158114612c6a57600080fd5b919050565b600060208284031215612c80578081fd5b8135610a0781612ffe565b600060208284031215612c9c578081fd5b8151610a0781612ffe565b60008060408385031215612cb9578081fd5b8235612cc481612ffe565b91506020830135612cd481612ffe565b809150509250929050565b600080600060608486031215612cf3578081fd5b8335612cfe81612ffe565b92506020840135612d0e81612ffe565b929592945050506040919091013590565b60008060408385031215612d31578182fd5b8235612d3c81612ffe565b946020939093013593505050565b600060208284031215612d5b578081fd5b610a0782612c5a565b600060208284031215612d75578081fd5b5035919050565b60008060408385031215612d8e578182fd5b82359150612d9e60208401612c5a565b90509250929050565b60008060408385031215612db9578182fd5b50508035926020909101359150565b600080600060608486031215612ddc578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b81811015612e2157858101830151858201604001528201612e05565b81811115612e325783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f596f752068617665206e6f20706f776572206865726521000000000000000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612f035784516001600160a01b031683529383019391830191600101612ede565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612f3757612f37612fe8565b500190565b600082612f5757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612f7657612f76612fe8565b500290565b600082821015612f8d57612f8d612fe8565b500390565b600181811c90821680612fa657607f821691505b60208210811415612fc757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612fe157612fe1612fe8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461301357600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ad28e8dcbae1da4fd68ac5b0c05815fc414fc1d684d4b1e288c190907a06171264736f6c63430008040033
Deployed Bytecode Sourcemap
17818:25647:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25634:166;;;;;;;;;;-1:-1:-1;25634:166:0;;;;;:::i;:::-;;:::i;:::-;;23171:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24083:161;;;;;;;;;;-1:-1:-1;24083:161:0;;;;;:::i;:::-;;:::i;:::-;;;4133:14:1;;4126:22;4108:41;;4096:2;4081:18;24083:161:0;4063:92:1;25204:106:0;;;;;;;;;;-1:-1:-1;25204:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;25284:18:0;25260:4;25284:18;;;:9;:18;;;;;;;;;25204:106;27725:87;;;;;;;;;;-1:-1:-1;27794:10:0;;27725:87;;;13274:25:1;;;13262:2;13247:18;27725:87:0;13229:76:1;19155:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3312:32:1;;;3294:51;;3282:2;3267:18;19155:51:0;3249:102:1;23448:95:0;;;;;;;;;;-1:-1:-1;23528:7:0;;23448:95;;24252:313;;;;;;;;;;-1:-1:-1;24252:313:0;;;;;:::i;:::-;;:::i;28649:253::-;;;;;;;;;;-1:-1:-1;28649:253:0;;;;;:::i;:::-;;:::i;23357:83::-;;;;;;;;;;-1:-1:-1;23423:9:0;;23357:83;;23423:9;;;;14764:36:1;;14752:2;14737:18;23357:83:0;14719:87:1;25318:180:0;;;;;;;;;;-1:-1:-1;25318:180:0;;;;;:::i;:::-;;:::i;29365:479::-;;;;;;;;;;-1:-1:-1;29365:479:0;;;;;:::i;:::-;;:::i;24573:218::-;;;;;;;;;;-1:-1:-1;24573:218:0;;;;;:::i;:::-;;:::i;18967:26::-;;;;;;;;;;;;;;;;27820:377;;;;;;;;;;-1:-1:-1;27820:377:0;;;;;:::i;:::-;;:::i;26080:347::-;;;;;;;;;;-1:-1:-1;26080:347:0;;;;;:::i;:::-;;:::i;26857:352::-;;;;;;;;;;-1:-1:-1;26857:352:0;;;;;:::i;:::-;;:::i;26614:111::-;;;;;;;;;;-1:-1:-1;26614:111:0;;;;;:::i;:::-;;:::i;28205:436::-;;;;;;;;;;-1:-1:-1;28205:436:0;;;;;:::i;:::-;;:::i;19315:28::-;;;;;;;;;;-1:-1:-1;19315:28:0;;;;-1:-1:-1;;;;;19315:28:0;;;19462:41;;;;;;;;;;-1:-1:-1;19462:41:0;;;;-1:-1:-1;;;19462:41:0;;;;;;20127:36;;;;;;;;;;-1:-1:-1;20127:36:0;;;;;;;;;;;28910:447;;;;;;;;;;-1:-1:-1;28910:447:0;;;;;:::i;:::-;;:::i;33267:123::-;;;;;;;;;;-1:-1:-1;33267:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;33355:27:0;33331:4;33355:27;;;:18;:27;;;;;;;;;33267:123;19829:77;;;;;;;;;;;;;;;;19054:32;;;;;;;;;;;;;;;;23551:198;;;;;;;;;;-1:-1:-1;23551:198:0;;;;;:::i;:::-;;:::i;19350:71::-;;;;;;;;;;-1:-1:-1;19350:71:0;;;;-1:-1:-1;;;;;19350:71:0;;;17405:148;;;;;;;;;;;;;:::i;27217:500::-;;;;;;;;;;-1:-1:-1;27217:500:0;;;;;:::i;:::-;;:::i;25076:120::-;;;;;;;;;;-1:-1:-1;25076:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;25168:20:0;25144:4;25168:20;;;:11;:20;;;;;;;;;25076:120;17191:79;;;;;;;;;;-1:-1:-1;17229:7:0;17256:6;-1:-1:-1;;;;;17256:6:0;17191:79;;25812:196;;;;;;;;;;-1:-1:-1;25812:196:0;;;;;:::i;:::-;;:::i;23262:87::-;;;;;;;;;;;;;:::i;19939:30::-;;;;;;;;;;;;;;;;24799:269;;;;;;;;;;-1:-1:-1;24799:269:0;;;;;:::i;:::-;;:::i;23757:167::-;;;;;;;;;;-1:-1:-1;23757:167:0;;;;;:::i;:::-;;:::i;26435:171::-;;;;;;;;;;-1:-1:-1;26435:171:0;;;;;:::i;:::-;;:::i;25506:116::-;;;;;;;;;;-1:-1:-1;25506:116:0;;;;;:::i;:::-;;:::i;23932:143::-;;;;;;;;;;-1:-1:-1;23932:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;24040:18:0;;;24013:7;24040:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23932:143;20249:32;;;;;;;;;;;;;;;;26737:112;;;;;;;;;;-1:-1:-1;26737:112:0;;;;;:::i;:::-;;:::i;17561:244::-;;;;;;;;;;-1:-1:-1;17561:244:0;;;;;:::i;:::-;;:::i;25634:166::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;;;;;;;;;25726:1:::1;25716:6;:11;;25708:20;;;::::0;::::1;;25776:7;:16:::0;25634:166::o;23171:83::-;23208:13;23241:5;23234:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23171:83;:::o;24083:161::-;24158:4;24175:39;196:10;24198:7;24207:6;24175:8;:39::i;:::-;-1:-1:-1;24232:4:0;24083:161;;;;;:::o;24252:313::-;24350:4;24367:36;24377:6;24385:9;24396:6;24367:9;:36::i;:::-;24414:121;24423:6;196:10;24445:89;24483:6;24445:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24445:19:0;;;;;;:11;:19;;;;;;;;196:10;24445:33;;;;;;;;;;:37;:89::i;:::-;24414:8;:121::i;:::-;-1:-1:-1;24553:4:0;24252:313;;;;;:::o;28649:253::-;28715:7;28754;;28743;:18;;28735:73;;;;-1:-1:-1;;;28735:73:0;;5609:2:1;28735:73:0;;;5591:21:1;5648:2;5628:18;;;5621:30;5687:34;5667:18;;;5660:62;-1:-1:-1;;;5738:18:1;;;5731:40;5788:19;;28735:73:0;5581:232:1;28735:73:0;28819:19;28842:10;:8;:10::i;:::-;28819:33;-1:-1:-1;28870:24:0;:7;28819:33;28870:11;:24::i;:::-;28863:31;28649:253;-1:-1:-1;;;28649:253:0:o;25318:180::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25397:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;25389:64;;;::::0;-1:-1:-1;;;25389:64:0;;12163:2:1;25389:64:0::1;::::0;::::1;12145:21:1::0;12202:2;12182:18;;;12175:30;12241:34;12221:18;;;12214:62;-1:-1:-1;;;12292:18:1;;;12285:31;12333:19;;25389:64:0::1;12135:223:1::0;25389:64:0::1;-1:-1:-1::0;;;;;25464:18:0::1;25485:5;25464:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;25464:26:0::1;::::0;;25318:180::o;29365:479::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29447:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29439:60;;;::::0;-1:-1:-1;;;29439:60:0;;7590:2:1;29439:60:0::1;::::0;::::1;7572:21:1::0;7629:2;7609:18;;;7602:30;7668:29;7648:18;;;7641:57;7715:18;;29439:60:0::1;7562:177:1::0;29439:60:0::1;29515:9;29510:327;29534:9;:16:::0;29530:20;::::1;29510:327;;;29592:7;-1:-1:-1::0;;;;;29576:23:0::1;:9;29586:1;29576:12;;;;;;-1:-1:-1::0;;;29576:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;29576:12:0::1;:23;29572:254;;;29635:9;29645:16:::0;;:20:::1;::::0;29664:1:::1;::::0;29645:20:::1;:::i;:::-;29635:31;;;;;;-1:-1:-1::0;;;29635:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;29620:9:::1;:12:::0;;-1:-1:-1;;;;;29635:31:0;;::::1;::::0;29630:1;;29620:12;::::1;;;-1:-1:-1::0;;;29620:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;29620:46:0::1;-1:-1:-1::0;;;;;29620:46:0;;::::1;;::::0;;29685:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;29724:11:::1;:20:::0;;;;:28;;-1:-1:-1;;29724:28:0::1;::::0;;29771:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;29771:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;29771:15:0;;;;;-1:-1:-1;;;;;;29771:15:0::1;::::0;;;;;29510:327:::1;29365:479:::0;:::o;29572:254::-:1;29552:3:::0;::::1;::::0;::::1;:::i;:::-;;;;29510:327;;;;29365:479:::0;:::o;24573:218::-;196:10;24661:4;24710:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24710:34:0;;;;;;;;;;24661:4;;24678:83;;24701:7;;24710:50;;24749:10;24710:38;:50::i;27820:377::-;196:10;27872:14;27921:19;;;:11;:19;;;;;;;;27920:20;27912:77;;;;-1:-1:-1;;;27912:77:0;;12565:2:1;27912:77:0;;;12547:21:1;12604:2;12584:18;;;12577:30;12643:34;12623:18;;;12616:62;-1:-1:-1;;;12694:18:1;;;12687:42;12746:19;;27912:77:0;12537:234:1;27912:77:0;28001:15;28025:19;28036:7;28025:10;:19::i;:::-;-1:-1:-1;;;;;;;;;28073:15:0;;;;;;:7;:15;;;;;;28000:44;;-1:-1:-1;28073:28:0;;:15;-1:-1:-1;28000:44:0;28073:19;:28::i;:::-;-1:-1:-1;;;;;28055:15:0;;;;;;:7;:15;;;;;:46;28122:7;;:20;;28134:7;28122:11;:20::i;:::-;28112:7;:30;28166:10;;:23;;28181:7;28166:14;:23::i;:::-;28153:10;:36;-1:-1:-1;;;27820:377:0:o;26080:347::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;26190:5:::1;26179:7;:16;;26171:25;;;::::0;::::1;;26253:99;26292:7;26253:20;26265:7;26253;;:11;;:20;;;;:::i;:::-;:24:::0;::::1;:99::i;:::-;26238:12;:114:::0;26379:14:::1;::::0;:40:::1;::::0;26411:7;;26379:27:::1;::::0;26398:7;26379:18:::1;:27::i;:40::-;26363:13;:56:::0;-1:-1:-1;;26080:347:0:o;26857:352::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;26952:42:::1;-1:-1:-1::0;;;;;26941:53:0;::::1;;;26933:102;;;::::0;-1:-1:-1;;;26933:102:0;;10947:2:1;26933:102:0::1;::::0;::::1;10929:21:1::0;10986:2;10966:18;;;10959:30;11025:34;11005:18;;;10998:62;-1:-1:-1;;;11076:18:1;;;11069:34;11120:19;;26933:102:0::1;10919:226:1::0;26933:102:0::1;-1:-1:-1::0;;;;;27055:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;27054:27;27046:70;;;::::0;-1:-1:-1;;;27046:70:0;;7946:2:1;27046:70:0::1;::::0;::::1;7928:21:1::0;7985:2;7965:18;;;7958:30;8024:32;8004:18;;;7997:60;8074:18;;27046:70:0::1;7918:180:1::0;27046:70:0::1;-1:-1:-1::0;;;;;27127:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;27127:33:0::1;27156:4;27127:33:::0;;::::1;::::0;;;27171:16:::1;:30:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;27171:30:0::1;::::0;;::::1;::::0;;26857:352::o;26614:111::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26683:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;26683:34:0::1;26713:4;26683:34;::::0;;26614:111::o;28205:436::-;28295:7;28334;;28323;:18;;28315:62;;;;-1:-1:-1;;;28315:62:0;;8305:2:1;28315:62:0;;;8287:21:1;8344:2;8324:18;;;8317:30;8383:33;8363:18;;;8356:61;8434:18;;28315:62:0;8277:181:1;28315:62:0;28393:17;28388:246;;28428:15;28452:19;28463:7;28452:10;:19::i;:::-;-1:-1:-1;28427:44:0;;-1:-1:-1;28486:14:0;;-1:-1:-1;;;;;28486:14:0;28388:246;28535:23;28566:19;28577:7;28566:10;:19::i;:::-;-1:-1:-1;28533:52:0;;-1:-1:-1;28600:22:0;;-1:-1:-1;;;;;28600:22:0;28910:447;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29107:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29106:21;29098:61;;;::::0;-1:-1:-1;;;29098:61:0;;7590:2:1;29098:61:0::1;::::0;::::1;7572:21:1::0;7629:2;7609:18;;;7602:30;7668:29;7648:18;;;7641:57;7715:18;;29098:61:0::1;7562:177:1::0;29098:61:0::1;-1:-1:-1::0;;;;;29173:16:0;::::1;29192:1;29173:16:::0;;;:7:::1;:16;::::0;;;;;:20;29170:108:::1;;-1:-1:-1::0;;;;;29249:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;29229:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;29210:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;29170:108:::1;-1:-1:-1::0;;;;;29288:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;29288:27:0::1;29311:4;29288:27:::0;;::::1;::::0;;;29326:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;29326:23:0::1;::::0;;::::1;::::0;;28910:447::o;23551:198::-;-1:-1:-1;;;;;23641:20:0;;23617:7;23641:20;;;:11;:20;;;;;;;;23637:49;;;-1:-1:-1;;;;;;23670:16:0;;;;;:7;:16;;;;;;;23551:198::o;23637:49::-;-1:-1:-1;;;;;23724:16:0;;;;;;:7;:16;;;;;;23704:37;;:19;:37::i;17405:148::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;17512:1:::1;17496:6:::0;;17475:40:::1;::::0;-1:-1:-1;;;;;17496:6:0;;::::1;::::0;17475:40:::1;::::0;17512:1;;17475:40:::1;17543:1;17526:19:::0;;-1:-1:-1;;;;;;17526:19:0::1;::::0;;17405:148::o;27217:500::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27306:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;27298:65;;;::::0;-1:-1:-1;;;27298:65:0;;10247:2:1;27298:65:0::1;::::0;::::1;10229:21:1::0;10286:2;10266:18;;;10259:30;10325:28;10305:18;;;10298:56;10371:18;;27298:65:0::1;10219:176:1::0;27298:65:0::1;27379:9;27374:336;27398:16;:23:::0;27394:27;::::1;27374:336;;;27470:7;-1:-1:-1::0;;;;;27447:30:0::1;:16;27464:1;27447:19;;;;;;-1:-1:-1::0;;;27447:19:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27447:19:0::1;:30;27443:256;;;27520:16;27537:23:::0;;:27:::1;::::0;27563:1:::1;::::0;27537:27:::1;:::i;:::-;27520:45;;;;;;-1:-1:-1::0;;;27520:45:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;27498:16:::1;:19:::0;;-1:-1:-1;;;;;27520:45:0;;::::1;::::0;27515:1;;27498:19;::::1;;;-1:-1:-1::0;;;27498:19:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:67:::0;;-1:-1:-1;;;;;;27498:67:0::1;-1:-1:-1::0;;;;;27498:67:0;;::::1;;::::0;;27584:26;;::::1;::::0;;:17:::1;:26:::0;;;;;;:34;;-1:-1:-1;;27584:34:0::1;::::0;;27637:16:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;27637:22:0::1;;;;;;;;27443:256;27423:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27374:336;;25812:196:::0;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;25922:1:::1;25906:12;:17;;25898:26;;;::::0;::::1;;25972:13;:28:::0;25812:196::o;23262:87::-;23301:13;23334:7;23327:14;;;;;:::i;24799:269::-;24892:4;24909:129;196:10;24932:7;24941:96;24980:15;24941:96;;;;;;;;;;;;;;;;;196:10;24941:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24941:34:0;;;;;;;;;;;;:38;:96::i;23757:167::-;23835:4;23852:42;196:10;23876:9;23887:6;23852:9;:42::i;26435:171::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;26512:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;26512:32:0::1;-1:-1:-1::0;;;;26512:32:0;;::::1;;::::0;;26560:38:::1;::::0;::::1;::::0;::::1;::::0;26536:8;4133:14:1;4126:22;4108:41;;4096:2;4081:18;;4063:92;26560:38:0::1;;;;;;;;26435:171:::0;:::o;25506:116::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;25588:16:::1;:26:::0;;-1:-1:-1;;25588:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25506:116::o;26737:112::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26806:27:0::1;26836:5;26806:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;26806:35:0::1;::::0;;26737:112::o;17561:244::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17650:22:0;::::1;17642:73;;;::::0;-1:-1:-1;;;17642:73:0;;6020:2:1;17642:73:0::1;::::0;::::1;6002:21:1::0;6059:2;6039:18;;;6032:30;6098:34;6078:18;;;6071:62;-1:-1:-1;;;6149:18:1;;;6142:36;6195:19;;17642:73:0::1;5992:228:1::0;17642:73:0::1;17752:6;::::0;;17731:38:::1;::::0;-1:-1:-1;;;;;17731:38:0;;::::1;::::0;17752:6;::::1;::::0;17731:38:::1;::::0;::::1;17780:6;:17:::0;;-1:-1:-1;;;;;;17780:17:0::1;-1:-1:-1::0;;;;;17780:17:0;;;::::1;::::0;;;::::1;::::0;;17561:244::o;33398:337::-;-1:-1:-1;;;;;33491:19:0;;33483:68;;;;-1:-1:-1;;;33483:68:0;;11758:2:1;33483:68:0;;;11740:21:1;11797:2;11777:18;;;11770:30;11836:34;11816:18;;;11809:62;-1:-1:-1;;;11887:18:1;;;11880:34;11931:19;;33483:68:0;11730:226:1;33483:68:0;-1:-1:-1;;;;;33570:21:0;;33562:68;;;;-1:-1:-1;;;33562:68:0;;6427:2:1;33562:68:0;;;6409:21:1;6466:2;6446:18;;;6439:30;6505:34;6485:18;;;6478:62;-1:-1:-1;;;6556:18:1;;;6549:32;6598:19;;33562:68:0;6399:224:1;33562:68:0;-1:-1:-1;;;;;33643:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33695:32;;13274:25:1;;;33695:32:0;;13247:18:1;33695:32:0;;;;;;;33398:337;;;:::o;34406:2191::-;-1:-1:-1;;;;;34528:18:0;;34520:68;;;;-1:-1:-1;;;34520:68:0;;11352:2:1;34520:68:0;;;11334:21:1;11391:2;11371:18;;;11364:30;11430:34;11410:18;;;11403:62;-1:-1:-1;;;11481:18:1;;;11474:35;11526:19;;34520:68:0;11324:227:1;34520:68:0;-1:-1:-1;;;;;34607:16:0;;34599:64;;;;-1:-1:-1;;;34599:64:0;;5205:2:1;34599:64:0;;;5187:21:1;5244:2;5224:18;;;5217:30;5283:34;5263:18;;;5256:62;-1:-1:-1;;;5334:18:1;;;5327:33;5377:19;;34599:64:0;5177:225:1;34599:64:0;34691:1;34682:6;:10;34674:64;;;;-1:-1:-1;;;34674:64:0;;9837:2:1;34674:64:0;;;9819:21:1;9876:2;9856:18;;;9849:30;9915:34;9895:18;;;9888:62;-1:-1:-1;;;9966:18:1;;;9959:39;10015:19;;34674:64:0;9809:231:1;34674:64:0;-1:-1:-1;;;;;34758:23:0;;;;;;:17;:23;;;;;;;;34757:24;34749:60;;;;-1:-1:-1;;;34749:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34829:21:0;;;;;;:17;:21;;;;;;;;34828:22;34820:58;;;;-1:-1:-1;;;34820:58:0;;;;;;;:::i;:::-;34916:9;34898:28;;;;:17;:28;;;;;;;;34897:29;34889:65;;;;-1:-1:-1;;;34889:65:0;;;;;;;:::i;:::-;34983:3;34969:11;;:17;34965:277;;-1:-1:-1;;;;;35007:23:0;;;;;;:17;:23;;;;;;;;35006:24;:50;;;;-1:-1:-1;;;;;;35035:21:0;;;;;;:17;:21;;;;;;;;35034:22;35006:50;:76;;;;-1:-1:-1;35069:13:0;;-1:-1:-1;;;;;35061:21:0;;;35069:13;;35061:21;35006:76;35003:228;;;35103:18;:16;:18::i;:::-;35158:12;;35148:6;:22;;35140:75;;;;-1:-1:-1;;;35140:75:0;;8665:2:1;35140:75:0;;;8647:21:1;8704:2;8684:18;;;8677:30;8743:34;8723:18;;;8716:62;-1:-1:-1;;;8794:18:1;;;8787:38;8842:19;;35140:75:0;8637:230:1;35140:75:0;35538:28;35569:24;35587:4;35569:9;:24::i;:::-;35538:55;;35641:12;;35617:20;:36;;:58;;;;;35672:3;35657:11;;:18;;35617:58;35614:134;;;-1:-1:-1;35724:12:0;;35614:134;35819:29;;35795:53;;;;;;;35863:54;;-1:-1:-1;35901:16:0;;-1:-1:-1;;;35901:16:0;;;;35900:17;35863:54;:92;;;;-1:-1:-1;35942:13:0;;-1:-1:-1;;;;;35934:21:0;;;35942:13;;35934:21;;35863:92;:130;;;;-1:-1:-1;35972:21:0;;-1:-1:-1;;;35972:21:0;;;;35863:130;35859:305;;;36043:29;;36020:52;;36116:36;36131:20;36116:14;:36::i;:::-;-1:-1:-1;;;;;36372:24:0;;36245:12;36372:24;;;:18;:24;;;;;;36260:4;;36372:24;;;:50;;-1:-1:-1;;;;;;36400:22:0;;;;;;:18;:22;;;;;;;;36372:50;36369:96;;;-1:-1:-1;36448:5:0;36369:96;36551:38;36566:4;36571:2;36574:6;36581:7;36551:14;:38::i;:::-;34406:2191;;;;;;:::o;1503:192::-;1589:7;1625:12;1617:6;;;;1609:29;;;;-1:-1:-1;;;1609:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1649:9:0;1661:5;1665:1;1661;:5;:::i;:::-;1649:17;1503:192;-1:-1:-1;;;;;1503:192:0:o;31307:163::-;31348:7;31369:15;31386;31405:19;:17;:19::i;:::-;31368:56;;-1:-1:-1;31368:56:0;-1:-1:-1;31442:20:0;31368:56;;31442:11;:20::i;:::-;31435:27;;;;31307:163;:::o;2182:132::-;2240:7;2267:39;2271:1;2274;2267:39;;;;;;;;;;;;;;;;;:3;:39::i;1170:181::-;1228:7;;1260:5;1264:1;1260;:5;:::i;:::-;1248:17;;1289:1;1284;:6;;1276:46;;;;-1:-1:-1;;;1276:46:0;;7234:2:1;1276:46:0;;;7216:21:1;7273:2;7253:18;;;7246:30;7312:29;7292:18;;;7285:57;7359:18;;1276:46:0;7206:177:1;30105:419:0;30164:7;30173;30182;30191;30200;30209;30230:23;30255:12;30269:18;30291:20;30303:7;30291:11;:20::i;:::-;30229:82;;;;;;30323:15;30340:23;30365:12;30381:50;30393:7;30402:4;30408:10;30420;:8;:10::i;:::-;30381:11;:50::i;:::-;30322:109;;;;-1:-1:-1;30322:109:0;;-1:-1:-1;30482:15:0;;-1:-1:-1;30499:4:0;;-1:-1:-1;30505:10:0;;-1:-1:-1;30105:419:0;;-1:-1:-1;;;;;30105:419:0:o;1359:136::-;1417:7;1444:43;1448:1;1451;1444:43;;;;;;;;;;;;;;;;;:3;:43::i;1703:471::-;1761:7;2006:6;2002:47;;-1:-1:-1;2036:1:0;2029:8;;2002:47;2061:9;2073:5;2077:1;2073;:5;:::i;:::-;2061:17;-1:-1:-1;2106:1:0;2097:5;2101:1;2061:17;2097:5;:::i;:::-;:10;2089:56;;;;-1:-1:-1;;;2089:56:0;;9074:2:1;2089:56:0;;;9056:21:1;9113:2;9093:18;;;9086:30;9152:34;9132:18;;;9125:62;-1:-1:-1;;;9203:18:1;;;9196:31;9244:19;;2089:56:0;9046:223:1;33743:655:0;33791:15;33817;33861:2;33847:11;;:16;33843:380;;-1:-1:-1;33890:1:0;;-1:-1:-1;33916:4:0;33843:380;;;33965:3;33951:11;;:17;33947:276;;-1:-1:-1;33995:1:0;;-1:-1:-1;34021:3:0;33947:276;;;34069:3;34055:11;;:17;34051:172;;-1:-1:-1;34099:1:0;;-1:-1:-1;34125:3:0;34051:172;;;-1:-1:-1;34180:3:0;;-1:-1:-1;34180:3:0;34248:33;34273:7;34248:20;34260:7;34248;;:11;;:20;;;;:::i;36605:985::-;20636:16;:23;;-1:-1:-1;;;;20636:23:0;-1:-1:-1;;;20636:23:0;;;;36756:27:::1;:20:::0;36781:1:::1;36756:24;:27::i;:::-;36741:42:::0;-1:-1:-1;36794:17:0::1;36814:30;:20:::0;36741:42;36814:24:::1;:30::i;:::-;36794:50:::0;-1:-1:-1;37147:21:0::1;37213:22;37230:4:::0;37213:16:::1;:22::i;:::-;37366:18;37387:41;:21;37413:14:::0;37387:25:::1;:41::i;:::-;37366:62;;37478:35;37491:9;37502:10;37478:12;:35::i;:::-;37539:43;::::0;;14500:25:1;;;14556:2;14541:18;;14534:34;;;14584:18;;;14577:34;;;37539:43:0::1;::::0;14488:2:1;14473:18;37539:43:0::1;;;;;;;-1:-1:-1::0;;20682:16:0;:24;;-1:-1:-1;;;;20682:24:0;;;-1:-1:-1;;;36605:985:0:o;39200:1902::-;39369:16;;;;39365:876;;;-1:-1:-1;;;;;25284:18:0;;25260:4;25284:18;;;:9;:18;;;;;;;;39465:83;;;39506:26;;-1:-1:-1;;;39506:26:0;;10602:2:1;39506:26:0;;;10584:21:1;10641:2;10621:18;;;10614:30;-1:-1:-1;;;10660:18:1;;;10653:46;10716:18;;39506:26:0;10574:166:1;39465:83:0;39638:16;;;;;;;39633:597;;39675:37;39694:6;39702:9;39675:18;:37::i;:::-;39633:597;;;39772:1;39757:12;;:16;:65;;;;-1:-1:-1;39809:13:0;;-1:-1:-1;;;;;39799:23:0;;;39809:13;;39799:23;39757:65;:117;;;;-1:-1:-1;;;;;;39849:25:0;;;;;;:17;:25;;;;;;;;39848:26;39757:117;:171;;;;-1:-1:-1;;;;;;39900:28:0;;;;;;:17;:28;;;;;;;;39899:29;39757:171;39753:462;;;40005:13;;39990:12;;39975:27;;:12;:27;:::i;:::-;:43;39971:225;;;-1:-1:-1;;;;;40047:20:0;;;;;;:9;:20;;;;;:27;;-1:-1:-1;;40047:27:0;40070:4;40047:27;;;40101:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;40149:23:0;;-1:-1:-1;;;;;3312:32:1;;3294:51;;40149:23:0;;3282:2:1;3267:18;40149:23:0;;;;;;;39971:225;40257:7;40253:40;;40279:14;:12;:14::i;:::-;-1:-1:-1;;;;;40318:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;40342:22:0;;;;;;:11;:22;;;;;;;;40341:23;40318:46;40314:597;;;40381:48;40403:6;40411:9;40422:6;40381:21;:48::i;:::-;40314:597;;;-1:-1:-1;;;;;40452:19:0;;;;;;:11;:19;;;;;;;;40451:20;:46;;;;-1:-1:-1;;;;;;40475:22:0;;;;;;:11;:22;;;;;;;;40451:46;40447:464;;;40514:46;40534:6;40542:9;40553:6;40514:19;:46::i;40447:464::-;-1:-1:-1;;;;;40583:19:0;;;;;;:11;:19;;;;;;;;40582:20;:47;;;;-1:-1:-1;;;;;;40607:22:0;;;;;;:11;:22;;;;;;;;40606:23;40582:47;40578:333;;;40646:44;40664:6;40672:9;40683:6;40646:17;:44::i;40578:333::-;-1:-1:-1;;;;;40712:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;40735:22:0;;;;;;:11;:22;;;;;;;;40712:45;40708:203;;;40774:48;40796:6;40804:9;40815:6;40774:21;:48::i;40708:203::-;40855:44;40873:6;40881:9;40892:6;40855:17;:44::i;:::-;40935:7;40931:41;;40957:15;33184;;33174:7;:25;33226:21;;33210:13;:37;33130:125;40957:15;41003:3;40989:11;;:17;:37;;;;-1:-1:-1;41010:16:0;;;;;;;40989:37;:64;;;;-1:-1:-1;41040:13:0;;-1:-1:-1;;;;;41030:23:0;;;41040:13;;41030:23;40989:64;40985:110;;;41070:11;:13;;;:11;:13;;;:::i;:::-;;;;;;40985:110;39200:1902;;;;:::o;31478:561::-;31575:7;;31611;;31528;;;;;31635:289;31659:9;:16;31655:20;;31635:289;;;31725:7;31701;:21;31709:9;31719:1;31709:12;;;;;;-1:-1:-1;;;31709:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31709:12:0;31701:21;;;;;;;;;;;;;:31;;:66;;;31760:7;31736;:21;31744:9;31754:1;31744:12;;;;;;-1:-1:-1;;;31744:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31744:12:0;31736:21;;;;;;;;;;;;;:31;31701:66;31697:97;;;31777:7;;31786;;31769:25;;;;;;;31478:561;;:::o;31697:97::-;31819:34;31831:7;:21;31839:9;31849:1;31839:12;;;;;;-1:-1:-1;;;31839:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31839:12:0;31831:21;;;;;;;;;;;;;31819:7;;:11;:34::i;:::-;31809:44;;31878:34;31890:7;:21;31898:9;31908:1;31898:12;;;;;;-1:-1:-1;;;31898:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31898:12:0;31890:21;;;;;;;;;;;;;31878:7;;:11;:34::i;:::-;31868:44;-1:-1:-1;31677:3:0;;;;:::i;:::-;;;;31635:289;;;-1:-1:-1;31960:7:0;;31948;;:20;;:11;:20::i;:::-;31938:7;:30;31934:61;;;31978:7;;31987;;31970:25;;;;;;31478:561;;:::o;31934:61::-;32014:7;;32023;;-1:-1:-1;31478:561:0;-1:-1:-1;31478:561:0:o;2322:278::-;2408:7;2443:12;2436:5;2428:28;;;;-1:-1:-1;;;2428:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2467:9:0;2479:5;2483:1;2479;:5;:::i;30532:330::-;30592:7;30601;30610;30630:12;30645:24;30661:7;30645:15;:24::i;:::-;30630:39;;30680:18;30701:30;30723:7;30701:21;:30::i;:::-;30680:51;-1:-1:-1;30742:23:0;30768:33;30680:51;30768:17;:7;30780:4;30768:11;:17::i;:::-;:21;;:33::i;:::-;30742:59;30837:4;;-1:-1:-1;30843:10:0;;-1:-1:-1;30532:330:0;;-1:-1:-1;;;30532:330:0:o;30870:429::-;30985:7;;;;31041:24;:7;31053:11;31041;:24::i;:::-;31023:42;-1:-1:-1;31076:12:0;31091:21;:4;31100:11;31091:8;:21::i;:::-;31076:36;-1:-1:-1;31123:18:0;31144:27;:10;31159:11;31144:14;:27::i;:::-;31123:48;-1:-1:-1;31182:23:0;31208:33;31123:48;31208:17;:7;31220:4;31208:11;:17::i;:33::-;31260:7;;;;-1:-1:-1;31286:4:0;;-1:-1:-1;30870:429:0;;-1:-1:-1;;;;;;;30870:429:0:o;37598:589::-;37748:16;;;37762:1;37748:16;;;;;;;;37724:21;;37748:16;;;;;;;;;;-1:-1:-1;37748:16:0;37724:40;;37793:4;37775;37780:1;37775:7;;;;;;-1:-1:-1;;;37775:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;37775:23:0;;;-1:-1:-1;;;;;37775:23:0;;;;;37819:15;-1:-1:-1;;;;;37819:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37809:4;37814:1;37809:7;;;;;;-1:-1:-1;;;37809:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;37809:32:0;;;-1:-1:-1;;;;;37809:32:0;;;;;37854:62;37871:4;37886:15;37904:11;37854:8;:62::i;:::-;37955:224;;-1:-1:-1;;;37955:224:0;;-1:-1:-1;;;;;37955:15:0;:66;;;;:224;;38036:11;;38062:1;;38106:4;;38133;;38153:15;;37955:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38195:517;38343:62;38360:4;38375:15;38393:11;38343:8;:62::i;:::-;38652:11;;38448:256;;-1:-1:-1;;;38448:256:0;;38520:4;38448:256;;;3697:34:1;3747:18;;;3740:34;;;38566:1:0;3790:18:1;;;3783:34;;;3833:18;;;3826:34;-1:-1:-1;;;;;38652:11:0;;;3876:19:1;;;3869:44;38678:15:0;3929:19:1;;;3922:35;38448:15:0;:31;;;;;;38487:9;;3631:19:1;;38448:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38195:517;;:::o;38720:399::-;38802:16;;;;;;;38801:17;38793:65;;;;-1:-1:-1;;;38793:65:0;;6830:2:1;38793:65:0;;;6812:21:1;6869:2;6849:18;;;6842:30;6908:34;6888:18;;;6881:62;-1:-1:-1;;;6959:18:1;;;6952:33;7002:19;;38793:65:0;6802:225:1;38793:65:0;-1:-1:-1;;;;;38873:23:0;;;;;;:17;:23;;;;;;;;:46;;;;-1:-1:-1;38906:13:0;;-1:-1:-1;;;;;38900:19:0;;;38906:13;;38900:19;38873:46;38869:243;;;38936:16;:23;;-1:-1:-1;;38936:23:0;;;;;38989:12;38974;:27;39018:21;:28;;-1:-1:-1;;;;39018:28:0;-1:-1:-1;;;39018:28:0;;;39066:34;;;;;;38955:4;4133:14:1;4126:22;4108:41;;4096:2;4081:18;;4063:92;39066:34:0;;;;;;;;38720:399;;:::o;32868:250::-;32914:7;;:12;:34;;;;-1:-1:-1;32930:13:0;;:18;32914:34;32911:46;;;32868:250::o;32911:46::-;32995:7;;;32977:15;:25;33037:13;;;33013:21;:37;-1:-1:-1;33071:11:0;;;;33093:17;32868:250::o;42230:574::-;42333:15;42350:23;42375:12;42389:23;42414:12;42428:18;42450:19;42461:7;42450:10;:19::i;:::-;-1:-1:-1;;;;;42498:15:0;;;;;;:7;:15;;;;;;42332:137;;-1:-1:-1;42332:137:0;;-1:-1:-1;42332:137:0;;-1:-1:-1;42332:137:0;-1:-1:-1;42332:137:0;-1:-1:-1;42332:137:0;-1:-1:-1;42498:28:0;;42518:7;42498:19;:28::i;:::-;-1:-1:-1;;;;;42480:15:0;;;;;;:7;:15;;;;;;;;:46;;;;42555:7;:15;;;;:28;;42575:7;42555:19;:28::i;:::-;-1:-1:-1;;;;;42537:15:0;;;;;;;:7;:15;;;;;;:46;;;;42615:18;;;;;;;:39;;42638:15;42615:22;:39::i;:::-;-1:-1:-1;;;;;42594:18:0;;;;;;:7;:18;;;;;:60;42668:34;42683:6;42691:10;42668:14;:34::i;:::-;42713:23;42725:4;42731;42713:11;:23::i;:::-;42769:9;-1:-1:-1;;;;;42752:44:0;42761:6;-1:-1:-1;;;;;42752:44:0;;42780:15;42752:44;;;;13274:25:1;;13262:2;13247:18;;13229:76;42752:44:0;;;;;;;;42230:574;;;;;;;;;:::o;41628:594::-;41729:15;41746:23;41771:12;41785:23;41810:12;41824:18;41846:19;41857:7;41846:10;:19::i;:::-;-1:-1:-1;;;;;41894:15:0;;;;;;:7;:15;;;;;;41728:137;;-1:-1:-1;41728:137:0;;-1:-1:-1;41728:137:0;;-1:-1:-1;41728:137:0;-1:-1:-1;41728:137:0;-1:-1:-1;41728:137:0;-1:-1:-1;41894:28:0;;41728:137;41894:19;:28::i;:::-;-1:-1:-1;;;;;41876:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;41954:18;;;;;:7;:18;;;;;:39;;41977:15;41954:22;:39::i;:::-;-1:-1:-1;;;;;41933:18:0;;;;;;:7;:18;;;;;;;;:60;;;;42025:7;:18;;;;:39;;42048:15;42025:22;:39::i;41110:510::-;41209:15;41226:23;41251:12;41265:23;41290:12;41304:18;41326:19;41337:7;41326:10;:19::i;:::-;-1:-1:-1;;;;;41374:15:0;;;;;;:7;:15;;;;;;41208:137;;-1:-1:-1;41208:137:0;;-1:-1:-1;41208:137:0;;-1:-1:-1;41208:137:0;-1:-1:-1;41208:137:0;-1:-1:-1;41208:137:0;-1:-1:-1;41374:28:0;;41208:137;41374:19;:28::i;42812:650::-;42915:15;42932:23;42957:12;42971:23;42996:12;43010:18;43032:19;43043:7;43032:10;:19::i;:::-;-1:-1:-1;;;;;43080:15:0;;;;;;:7;:15;;;;;;42914:137;;-1:-1:-1;42914:137:0;;-1:-1:-1;42914:137:0;;-1:-1:-1;42914:137:0;-1:-1:-1;42914:137:0;-1:-1:-1;42914:137:0;-1:-1:-1;43080:28:0;;43100:7;43080:19;:28::i;:::-;-1:-1:-1;;;;;43062:15:0;;;;;;:7;:15;;;;;;;;:46;;;;43137:7;:15;;;;:28;;43157:7;43137:19;:28::i;32532:154::-;32596:7;32623:55;32662:5;32623:20;32635:7;;32623;:11;;:20;;;;:::i;32694:166::-;32764:7;32791:61;32836:5;32791:26;32803:13;;32791:7;:11;;:26;;;;:::i;32051:469::-;32130:19;32153:10;:8;:10::i;:::-;32130:33;-1:-1:-1;32174:18:0;32195:27;:10;32130:33;32195:14;:27::i;:::-;32274:4;32258:22;;;;:7;:22;;;;;;32174:48;;-1:-1:-1;32258:38:0;;32174:48;32258:26;:38::i;:::-;32249:4;32233:22;;;;:7;:22;;;;;;;;:63;;;;32310:11;:26;;;;;;32307:107;;;32392:4;32376:22;;;;:7;:22;;;;;;:38;;32403:10;32376:26;:38::i;:::-;32367:4;32351:22;;;;:7;:22;;;;;:63;32307:107;32430:43;;13274:25:1;;;32455:4:0;;-1:-1:-1;;;;;32430:43:0;;;;;13262:2:1;13247:18;32430:43:0;;;;;;;32051:469;;;;:::o;29950:147::-;30028:7;;:17;;30040:4;30028:11;:17::i;:::-;30018:7;:27;30069:10;;:20;;30084:4;30069:14;:20::i;:::-;30056:10;:33;-1:-1:-1;;29950:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:257::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;511:6;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;707:398::-;775:6;783;836:2;824:9;815:7;811:23;807:32;804:2;;;857:6;849;842:22;804:2;901:9;888:23;920:31;945:5;920:31;:::i;:::-;970:5;-1:-1:-1;1027:2:1;1012:18;;999:32;1040:33;999:32;1040:33;:::i;:::-;1092:7;1082:17;;;794:311;;;;;:::o;1110:466::-;1187:6;1195;1203;1256:2;1244:9;1235:7;1231:23;1227:32;1224:2;;;1277:6;1269;1262:22;1224:2;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;-1:-1:-1;1447:2:1;1432:18;;1419:32;1460:33;1419:32;1460:33;:::i;:::-;1214:362;;1512:7;;-1:-1:-1;;;1566:2:1;1551:18;;;;1538:32;;1214:362::o;1581:325::-;1649:6;1657;1710:2;1698:9;1689:7;1685:23;1681:32;1678:2;;;1731:6;1723;1716:22;1678:2;1775:9;1762:23;1794:31;1819:5;1794:31;:::i;:::-;1844:5;1896:2;1881:18;;;;1868:32;;-1:-1:-1;;;1668:238:1:o;1911:190::-;1967:6;2020:2;2008:9;1999:7;1995:23;1991:32;1988:2;;;2041:6;2033;2026:22;1988:2;2069:26;2085:9;2069:26;:::i;2106:190::-;2165:6;2218:2;2206:9;2197:7;2193:23;2189:32;2186:2;;;2239:6;2231;2224:22;2186:2;-1:-1:-1;2267:23:1;;2176:120;-1:-1:-1;2176:120:1:o;2301:258::-;2366:6;2374;2427:2;2415:9;2406:7;2402:23;2398:32;2395:2;;;2448:6;2440;2433:22;2395:2;2489:9;2476:23;2466:33;;2518:35;2549:2;2538:9;2534:18;2518:35;:::i;:::-;2508:45;;2385:174;;;;;:::o;2564:258::-;2632:6;2640;2693:2;2681:9;2672:7;2668:23;2664:32;2661:2;;;2714:6;2706;2699:22;2661:2;-1:-1:-1;;2742:23:1;;;2812:2;2797:18;;;2784:32;;-1:-1:-1;2651:171:1:o;2827:316::-;2915:6;2923;2931;2984:2;2972:9;2963:7;2959:23;2955:32;2952:2;;;3005:6;2997;2990:22;2952:2;3039:9;3033:16;3023:26;;3089:2;3078:9;3074:18;3068:25;3058:35;;3133:2;3122:9;3118:18;3112:25;3102:35;;2942:201;;;;;:::o;4395:603::-;4507:4;4536:2;4565;4554:9;4547:21;4597:6;4591:13;4640:6;4635:2;4624:9;4620:18;4613:34;4665:4;4678:140;4692:6;4689:1;4686:13;4678:140;;;4787:14;;;4783:23;;4777:30;4753:17;;;4772:2;4749:26;4742:66;4707:10;;4678:140;;;4836:6;4833:1;4830:13;4827:2;;;4906:4;4901:2;4892:6;4881:9;4877:22;4873:31;4866:45;4827:2;-1:-1:-1;4982:2:1;4961:15;-1:-1:-1;;4957:29:1;4942:45;;;;4989:2;4938:54;;4516:482;-1:-1:-1;;;4516:482:1:o;9274:356::-;9476:2;9458:21;;;9495:18;;;9488:30;9554:34;9549:2;9534:18;;9527:62;9621:2;9606:18;;9448:182::o;12776:347::-;12978:2;12960:21;;;13017:2;12997:18;;;12990:30;13056:25;13051:2;13036:18;;13029:53;13114:2;13099:18;;12950:173::o;13310:983::-;13572:4;13620:3;13609:9;13605:19;13651:6;13640:9;13633:25;13677:2;13715:6;13710:2;13699:9;13695:18;13688:34;13758:3;13753:2;13742:9;13738:18;13731:31;13782:6;13817;13811:13;13848:6;13840;13833:22;13886:3;13875:9;13871:19;13864:26;;13925:2;13917:6;13913:15;13899:29;;13946:4;13959:195;13973:6;13970:1;13967:13;13959:195;;;14038:13;;-1:-1:-1;;;;;14034:39:1;14022:52;;14129:15;;;;14094:12;;;;14070:1;13988:9;13959:195;;;-1:-1:-1;;;;;;;14210:32:1;;;;14205:2;14190:18;;14183:60;-1:-1:-1;;;14274:3:1;14259:19;14252:35;14171:3;13581:712;-1:-1:-1;;;13581:712:1:o;14811:128::-;14851:3;14882:1;14878:6;14875:1;14872:13;14869:2;;;14888:18;;:::i;:::-;-1:-1:-1;14924:9:1;;14859:80::o;14944:217::-;14984:1;15010;15000:2;;-1:-1:-1;;;15035:31:1;;15089:4;15086:1;15079:15;15117:4;15042:1;15107:15;15000:2;-1:-1:-1;15146:9:1;;14990:171::o;15166:168::-;15206:7;15272:1;15268;15264:6;15260:14;15257:1;15254:21;15249:1;15242:9;15235:17;15231:45;15228:2;;;15279:18;;:::i;:::-;-1:-1:-1;15319:9:1;;15218:116::o;15339:125::-;15379:4;15407:1;15404;15401:8;15398:2;;;15412:18;;:::i;:::-;-1:-1:-1;15449:9:1;;15388:76::o;15469:380::-;15548:1;15544:12;;;;15591;;;15612:2;;15666:4;15658:6;15654:17;15644:27;;15612:2;15719;15711:6;15708:14;15688:18;15685:38;15682:2;;;15765:10;15760:3;15756:20;15753:1;15746:31;15800:4;15797:1;15790:15;15828:4;15825:1;15818:15;15682:2;;15524:325;;;:::o;15854:135::-;15893:3;-1:-1:-1;;15914:17:1;;15911:2;;;15934:18;;:::i;:::-;-1:-1:-1;15981:1:1;15970:13;;15901:88::o;15994:127::-;16055:10;16050:3;16046:20;16043:1;16036:31;16086:4;16083:1;16076:15;16110:4;16107:1;16100:15;16126:131;-1:-1:-1;;;;;16201:31:1;;16191:42;;16181:2;;16247:1;16244;16237:12;16181:2;16171:86;:::o
Swarm Source
ipfs://ad28e8dcbae1da4fd68ac5b0c05815fc414fc1d684d4b1e288c190907a061712
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.