CRC-20
Overview
Max Total Supply
1,000,000,000,000 TSYS
Holders
168
Market
Price
$0.00 @ 0.000000 CRO
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
463,677.34892394 TSYSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
TeraSystemCro
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-03-29 */ /** 🔊 TERA SYSTEM LAUNCH Tera System provides the foundational building layers for a new digital economy with products: DeFi, LaunchPad, GameFi, NFT, and Blockchain ------------------------------------------------------------------------------ CONTRACT : 0xaEEA11F1375ECb30030Eb14F2EF352b83722dDEf https://dexscreener.com/cronos/0x098c105073CDdc9440DD18850A398DDF545f24B0 https://mm.finance/swap?outputCurrency=0xaEEA11F1375ECb30030Eb14F2EF352b83722dDEf Token Alocation : 20% Farming Pool 20% CEX LIST (LOCK 6 MONTH) 10% Team (LOCK 6 MONTH) 50% Liquidity BUY TAX : 8% SELL TAX : 12% 📱Telegram : https://t.me/terasystemofficial 🌐 Website : https://terasystem.io/ 🐦 Twitter : https://twitter.com/Terasystoken 📷 Instagram : https://instagram.com/terasystoken ⚫️ Medium : https://medium.com/@terasystem **/ pragma solidity ^0.8.10; // SPDX-License-Identifier: MIT interface IERC20 { function totalSupply() external view returns (uint256); /** *@dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** *@dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** *@dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** *@dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** *@dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** *@dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** *@dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } /** *@dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** *@dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** *@dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** *@dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** *@dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ 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; } /** *@dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** *@dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be 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; } /** *@dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** *@dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** *@dev Collection of functions related to the address type */ library Address { /** *@dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ 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); } } } } /** *@dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** *@dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** *@dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** *@dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** *@dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** *@dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require( _previousOwner == msg.sender, "You don't have permission to unlock" ); require(block.timestamp > _lockTime, "Contract is locked until a later date"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; _previousOwner = address(0); } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract TeraSystemCro 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 _isExcludedFromLimit; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; address payable public marketingWallet = payable(0xF666321b524233563a9eBaD9C53800a8AD1c511b); address payable public devWallet = payable(0x6Ba3B420A3aE52FfB8378fbA58C4BF743c30D208); address payable public stakingWallet = payable(0x7BF009bDF3547968643d529858F711B6bf3f271C); address payable public deployerWallet; string private _name = "Tera System"; string private _symbol = "TSYS"; uint8 private _decimals = 9; struct TransferFee { uint16 tax; uint16 liquidity; uint16 staking; uint16 marketing; uint16 dev; } struct BuyFee { uint16 tax; uint16 liquidity; uint16 staking; uint16 marketing; uint16 dev; } struct SellFee { uint16 tax; uint16 liquidity; uint16 staking; uint16 marketing; uint16 dev; } TransferFee public transferFee; BuyFee public buyFee; SellFee public sellFee; uint16 private _taxFee; uint16 private _liquidityFee; uint16 private _staking; uint16 private _marketingFee; uint16 private _devFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public maxTransferAmount = 5000000000 * 10**9; uint256 public maxBuyAmount = 5000000000 * 10**9; uint256 public maxSellAmount = 5000000000 * 10**9; uint256 public maxWalletSize = 5000000000 * 10**9; uint256 public numTokensSellToAddToLiquidity = 100000000 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[_msgSender()] = _rTotal; transferFee.tax = 0; transferFee.liquidity = 3; transferFee.staking = 0; transferFee.marketing = 5; transferFee.dev = 2; buyFee.tax = 0; buyFee.liquidity = 3; buyFee.staking = 0; buyFee.marketing = 5; buyFee.dev = 0; sellFee.tax = 0; sellFee.liquidity = 7; sellFee.staking = 0; sellFee.marketing = 4; sellFee.dev = 0; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x145677FC4d9b8F19B5D56d1820c48e0443049a30 ); // 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; deployerWallet = payable(msg.sender); // exclude owner, dev wallet, and this contract from fee _isExcludedFromFee[msg.sender] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[marketingWallet] = true; _isExcludedFromFee[devWallet] = true; _isExcludedFromFee[stakingWallet] = true; _isExcludedFromLimit[marketingWallet] = true; _isExcludedFromLimit[devWallet] = true; _isExcludedFromLimit[msg.sender] = true; _isExcludedFromLimit[stakingWallet] = true; _isExcludedFromLimit[address(this)] = true; 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 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 tFee, uint256 tLiquidity, uint256 tWallet, ) = _getTValues(tAmount); (uint256 rAmount, ,) = _getRValues( tAmount, tFee, tLiquidity, tWallet, _getRate() ); _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"); ( uint256 tFee, uint256 tLiquidity, uint256 tWallet, ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, ) = _getRValues( tAmount, tFee, tLiquidity, tWallet, _getRate() ); if (!deductTransferFee) { return rAmount; } else { 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 updateMarketingWallet(address payable newAddress) external onlyOwner { marketingWallet = newAddress; } function updateDevWallet(address payable newAddress) external onlyOwner { devWallet = newAddress; } function updateBuybackWallet(address payable newAddress) external onlyOwner { stakingWallet = newAddress; } function excludeFromReward(address account) public onlyOwner { require(!_isExcluded[account], "Account is already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner { require(_isExcluded[account], "Account is not 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; } } } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function excludeFromLimit(address account) public onlyOwner { _isExcludedFromLimit[account] = true; } function includeInLimit(address account) public onlyOwner { _isExcludedFromLimit[account] = false; } function setSellFee( uint16 tax, uint16 liquidity, uint16 staking, uint16 marketing, uint16 dev ) external onlyOwner { require(tax + liquidity + staking + marketing + dev <= 25, "You can't set fees higher 25%"); sellFee.tax = tax; sellFee.marketing = marketing; sellFee.staking = staking; sellFee.liquidity = liquidity; sellFee.dev = dev; } function setBuyFee( uint16 tax, uint16 liquidity, uint16 staking, uint16 marketing, uint16 dev ) external onlyOwner { require(tax + liquidity + staking + marketing + dev <= 25, "You can't set fees higher 25%"); buyFee.tax = tax; buyFee.marketing = marketing; buyFee.staking = staking; buyFee.liquidity = liquidity; buyFee.dev = dev; } function setTransferFee( uint16 tax, uint16 liquidity, uint16 staking, uint16 marketing, uint16 dev ) external onlyOwner { require(tax + liquidity + staking + marketing + dev <= 25, "You can't set fees higher 25%"); transferFee.tax = tax; transferFee.marketing = marketing; transferFee.staking = staking; transferFee.liquidity = liquidity; transferFee.dev = dev; } function setNumTokensSellToAddToLiquidity(uint256 numTokens) external onlyOwner { numTokensSellToAddToLiquidity = numTokens; } function setMaxTxAmount(uint256 newMaxTxAmount) external onlyOwner { require(newMaxTxAmount >= _tTotal / 1000, "You Can't set Smaller than 0.1%"); maxTransferAmount = newMaxTxAmount; } function setMaxBuyAmount(uint256 newMaxBuyAmount) external onlyOwner { require(newMaxBuyAmount >= _tTotal / 1000, "You Can't set Smaller than 0.1%"); maxBuyAmount = newMaxBuyAmount; } function setMaxSellAmount(uint256 newMaxSellAmount) external onlyOwner { require(newMaxSellAmount >= _tTotal / 1000, "You Can't set Smaller than 0.1%"); maxSellAmount = newMaxSellAmount; } function setMaxWalletSize(uint256 newMaxWalletSize) external onlyOwner { require(newMaxWalletSize >= _tTotal / 1000, "You Can't set Smaller than 0.1%"); maxWalletSize = newMaxWalletSize; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swapping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getTValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256 ) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tWallet = calculateMarketingFee(tAmount) + calculateDevFee(tAmount) + calculatestaking(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); tTransferAmount = tTransferAmount.sub(tWallet); return (tTransferAmount, tFee, tLiquidity, tWallet); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tWallet, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rWallet = tWallet.mul(currentRate); uint256 rTransferAmount = rAmount .sub(rFee) .sub(rLiquidity) .sub(rWallet); 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(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function _takeWalletFee(uint256 tWallet) private { uint256 currentRate = _getRate(); uint256 rWallet = tWallet.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rWallet); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tWallet); } 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 calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingFee).div(10**2); } function calculateDevFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_devFee).div(10**2); } function calculatestaking(uint256 _amount) private view returns (uint256) { return _amount.mul(_staking).div(10**2); } function removeAllFee() private { _taxFee = 0; _liquidityFee = 0; _staking = 0; _marketingFee = 0; _devFee = 0; } function setTransfer() private { _taxFee = transferFee.tax; _liquidityFee = transferFee.liquidity; _staking = transferFee.staking; _marketingFee = transferFee.marketing; _devFee = transferFee.dev; } function setBuy() private { _taxFee = buyFee.tax; _liquidityFee = buyFee.liquidity; _staking = buyFee.staking; _marketingFee = buyFee.marketing; _devFee = buyFee.dev; } function setSell() private { _taxFee = sellFee.tax; _liquidityFee = sellFee.liquidity; _staking = sellFee.staking; _marketingFee = sellFee.marketing; _devFee = sellFee.dev; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function isExcludedFromLimit(address account) public view returns (bool) { return _isExcludedFromLimit[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 _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"); // 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 >= maxTransferAmount) { contractTokenBalance = maxTransferAmount; } 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; } if (takeFee) { if (!_isExcludedFromLimit[from] && !_isExcludedFromLimit[to]) { require( amount <= maxTransferAmount, "Transfer amount exceeds the maxTransferAmount." ); if (from == uniswapV2Pair) { require( amount + balanceOf(to) <= maxWalletSize, "Recipient exceeds max wallet size." ); require( amount <= maxBuyAmount, "Buy amount exceeds the maxBuyAmount." ); } if (to == uniswapV2Pair) { require( amount <= maxSellAmount, "Sell amount exceeds the maxSellAmout." ); } } } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 tokens) private lockTheSwap { // Split the contract balance into halves uint256 denominator = (buyFee.liquidity + sellFee.liquidity + buyFee.staking + sellFee.staking + buyFee.marketing + sellFee.marketing + buyFee.dev + sellFee.dev) * 2; uint256 tokensToAddLiquidityWith = (tokens * (buyFee.liquidity + sellFee.liquidity)) / denominator; uint256 tokensToStaking = ((tokens * (buyFee.staking + sellFee.staking)) * 2) / denominator; _transferBothExcluded(address(this), stakingWallet, tokensToStaking); uint256 toSwap = tokens - (tokensToAddLiquidityWith + tokensToStaking); uint256 initialBalance = address(this).balance; swapTokensForEth(toSwap); uint256 deltaBalance = address(this).balance - initialBalance; uint256 unitBalance = deltaBalance / (denominator - (buyFee.liquidity + sellFee.liquidity)); uint256 bnbToAddLiquidityWith = unitBalance * (buyFee.liquidity + sellFee.liquidity); if (bnbToAddLiquidityWith > 0) { // Add liquidity to pancake addLiquidity(tokensToAddLiquidityWith, bnbToAddLiquidityWith); } // Send ETH to marketing uint256 marketingAmt = unitBalance * 2 * (buyFee.marketing + sellFee.marketing); uint256 devAmt = unitBalance * 2 * (buyFee.dev + sellFee.dev) > address(this).balance ? address(this).balance : unitBalance * 2 * (buyFee.dev + sellFee.dev); if (marketingAmt > 0) { (marketingWallet).transfer(marketingAmt); } if (devAmt > 0) { devWallet.transfer(devAmt); } } 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 address(deployerWallet), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (takeFee) { removeAllFee(); if (sender == uniswapV2Pair) { setBuy(); } else if (recipient == uniswapV2Pair) { setSell(); } else { setTransfer(); } } 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); } removeAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tWallet ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, tWallet, _getRate() ); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeWalletFee(tWallet); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tWallet ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, tWallet, _getRate() ); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeWalletFee(tWallet); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tWallet ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, tWallet, _getRate() ); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeWalletFee(tWallet); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tWallet ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, tWallet, _getRate() ); _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(tLiquidity); _takeWalletFee(tWallet); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function clearStuckBalance() public onlyOwner { uint256 amount = address(this).balance; payable(marketingWallet).transfer(amount); } function withdrawForeignToken(address tokenAddress, address recipient, uint256 amount) public onlyOwner { IERC20 foreignToken = IERC20(tokenAddress); foreignToken.transfer(recipient, amount); } }
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":"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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint16","name":"tax","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"staking","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployerWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInLimit","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":"isExcludedFromLimit","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":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSize","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":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint16","name":"tax","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"staking","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"tax","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"staking","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuyAmount","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSellAmount","type":"uint256"}],"name":"setMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"tax","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"staking","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"tax","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"staking","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":[],"name":"transferFee","outputs":[{"internalType":"uint16","name":"tax","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"staking","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"}],"stateMutability":"view","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"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"updateBuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052683635c9adc5dea00000600a819055620000219060001962000519565b6200002f906000196200053c565b600b908155600d80546001600160a01b031990811673f666321b524233563a9ebad9c53800a8ad1c511b17909155600e80548216736ba3b420a3ae52ffb8378fba58c4bf743c30d208179055600f8054909116737bf009bdf3547968643d529858f711b6bf3f271c179055604080518082019091528181526a546572612053797374656d60a81b6020909101908152620000cd916011919062000473565b50604080518082019091526004808252635453595360e01b6020909201918252620000fb9160129162000473565b506013805460ff191660091790556017805460ff60581b19166b010000000000000000000000179055674563918244f4000060188190556019819055601a819055601b5567016345785d8a0000601c553480156200015857600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b54336000908152600360209081526040918290209290925560148054680200050000000300006001600160501b0319918216179091556015805482166605000000030000179055601680549091166604000000070000179055805163c45a015560e01b8152905173145677fc4d9b8f19b5d56d1820c48e0443049a3092839263c45a015592600480830193928290030181865afa15801562000242573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000268919062000562565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dc919062000562565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000350919062000562565b6001600160a01b0390811660a052818116608052601080546001600160a01b031916339081179091556000818152600660209081526040808320805460ff199081166001908117909255308086528386208054831684179055600d8054891687528487208054841685179055600e80548a1688528588208054851686179055600f80548b168952868920805486168717905591548a1688526009875285882080548516861790555489168752848720805484168517905587875284872080548416851790555490971685528285208054821683179055958452818420805490961617909455600a549351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350620005d1565b828054620004819062000594565b90600052602060002090601f016020900481019282620004a55760008555620004f0565b82601f10620004c057805160ff1916838001178555620004f0565b82800160010185558215620004f0579182015b82811115620004f0578251825591602001919060010190620004d3565b50620004fe92915062000502565b5090565b5b80821115620004fe576000815560010162000503565b6000826200053757634e487b7160e01b600052601260045260246000fd5b500690565b6000828210156200055d57634e487b7160e01b600052601160045260246000fd5b500390565b6000602082840312156200057557600080fd5b81516001600160a01b03811681146200058d57600080fd5b9392505050565b600181811c90821680620005a957607f821691505b60208210811415620005cb57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051613b3b6200063d6000396000818161073b015281816120ae0152818161220e01528181612315015281816129820152612a2f0152600081816104de015281816131620152818161321b01528181613257015281816132c901526133310152613b3b6000f3fe6080604052600436106103905760003560e01c806366d602ae116101dc578063aacebbe311610102578063dd62ed3e116100a0578063ec28438a1161006f578063ec28438a14610b73578063f0f165af14610b93578063f2fde38b14610bb3578063f34eb0b814610bd357600080fd5b8063dd62ed3e14610acd578063e99c9d0914610b13578063ea1644d514610b33578063ea2f0b3714610b5357600080fd5b8063c49b9a80116100dc578063c49b9a8014610a3e578063d12a768814610a5e578063d94160e014610a74578063dd46706414610aad57600080fd5b8063aacebbe3146109c5578063acb2ad6f146109e5578063b6c5232414610a2957600080fd5b80638ea5220f1161017a578063a457c2d711610149578063a457c2d71461095a578063a69df4b51461097a578063a9059cbb1461098f578063a9e75723146109af57600080fd5b80638ea5220f146108ef5780638f3fa8601461090f57806391d919a91461092557806395d89b411461094557600080fd5b806375f0a874116101b657806375f0a8741461086257806388e765ff1461088257806388f82020146108985780638da5cb5b146108d157600080fd5b806366d602ae1461081757806370a082311461082d578063715018a61461084d57600080fd5b8063313ce567116102c15780634549b0391161025f5780634cfd4a921161022e5780634cfd4a921461077e57806352390c021461079e5780635342acb4146107be5780635d60c7be146107f757600080fd5b80634549b039146106c557806347062402146106e557806349bd5a5e146107295780634a74bb021461075d57600080fd5b806338c4f8141161029b57806338c4f8141461064557806339509351146106655780633bd5d17314610685578063437823ec146106a557600080fd5b8063313ce567146105ee578063364333f4146106105780633685d4191461062557600080fd5b80631465d9291161032e5780631816467f116103085780631816467f1461051557806323b872dd146105355780632b14ca56146105555780632d838119146105ce57600080fd5b80631465d929146104ac5780631694505e146104cc57806318160ddd1461050057600080fd5b806306fdde031161036a57806306fdde031461041b578063095ea7b31461043d5780630bd3a7f91461046d57806313114a9d1461048d57600080fd5b806304dacd501461039c5780630659ce5c146103be57806306ee6ad8146103de57600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103bc6103b73660046135c7565b610bf3565b005b3480156103ca57600080fd5b506103bc6103d93660046135e4565b610c48565b3480156103ea57600080fd5b50600f546103fe906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561042757600080fd5b50610430610cef565b6040516104129190613625565b34801561044957600080fd5b5061045d61045836600461367a565b610d81565b6040519015158152602001610412565b34801561047957600080fd5b506103bc6104883660046135c7565b610d98565b34801561049957600080fd5b50600c545b604051908152602001610412565b3480156104b857600080fd5b506103bc6104c73660046136bd565b610de6565b3480156104d857600080fd5b506103fe7f000000000000000000000000000000000000000000000000000000000000000081565b34801561050c57600080fd5b50600a5461049e565b34801561052157600080fd5b506103bc6105303660046135c7565b610ed0565b34801561054157600080fd5b5061045d6105503660046135e4565b610f1c565b34801561056157600080fd5b506016546105999061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a001610412565b3480156105da57600080fd5b5061049e6105e9366004613722565b610f85565b3480156105fa57600080fd5b5060135460405160ff9091168152602001610412565b34801561061c57600080fd5b506103bc611009565b34801561063157600080fd5b506103bc6106403660046135c7565b611071565b34801561065157600080fd5b506103bc6106603660046136bd565b611224565b34801561067157600080fd5b5061045d61068036600461367a565b61130e565b34801561069157600080fd5b506103bc6106a0366004613722565b611344565b3480156106b157600080fd5b506103bc6106c03660046135c7565b61144d565b3480156106d157600080fd5b5061049e6106e0366004613749565b61149b565b3480156106f157600080fd5b506015546105999061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b34801561073557600080fd5b506103fe7f000000000000000000000000000000000000000000000000000000000000000081565b34801561076957600080fd5b5060175461045d90600160581b900460ff1681565b34801561078a57600080fd5b506103bc6107993660046136bd565b611538565b3480156107aa57600080fd5b506103bc6107b93660046135c7565b611622565b3480156107ca57600080fd5b5061045d6107d93660046135c7565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561080357600080fd5b506010546103fe906001600160a01b031681565b34801561082357600080fd5b5061049e601a5481565b34801561083957600080fd5b5061049e6108483660046135c7565b611775565b34801561085957600080fd5b506103bc6117d4565b34801561086e57600080fd5b50600d546103fe906001600160a01b031681565b34801561088e57600080fd5b5061049e60195481565b3480156108a457600080fd5b5061045d6108b33660046135c7565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108dd57600080fd5b506000546001600160a01b03166103fe565b3480156108fb57600080fd5b50600e546103fe906001600160a01b031681565b34801561091b57600080fd5b5061049e601b5481565b34801561093157600080fd5b506103bc6109403660046135c7565b611836565b34801561095157600080fd5b50610430611881565b34801561096657600080fd5b5061045d61097536600461367a565b611890565b34801561098657600080fd5b506103bc6118df565b34801561099b57600080fd5b5061045d6109aa36600461367a565b6119f6565b3480156109bb57600080fd5b5061049e60185481565b3480156109d157600080fd5b506103bc6109e03660046135c7565b611a03565b3480156109f157600080fd5b506014546105999061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b348015610a3557600080fd5b5060025461049e565b348015610a4a57600080fd5b506103bc610a59366004613779565b611a4f565b348015610a6a57600080fd5b5061049e601c5481565b348015610a8057600080fd5b5061045d610a8f3660046135c7565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610ab957600080fd5b506103bc610ac8366004613722565b611ad1565b348015610ad957600080fd5b5061049e610ae8366004613796565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b1f57600080fd5b506103bc610b2e366004613722565b611b56565b348015610b3f57600080fd5b506103bc610b4e366004613722565b611bb4565b348015610b5f57600080fd5b506103bc610b6e3660046135c7565b611c12565b348015610b7f57600080fd5b506103bc610b8e366004613722565b611c5d565b348015610b9f57600080fd5b506103bc610bae366004613722565b611cbb565b348015610bbf57600080fd5b506103bc610bce3660046135c7565b611cea565b348015610bdf57600080fd5b506103bc610bee366004613722565b611dc2565b6000546001600160a01b03163314610c265760405162461bcd60e51b8152600401610c1d906137c4565b60405180910390fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c725760405162461bcd60e51b8152600401610c1d906137c4565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284919082169063a9059cbb906044016020604051808303816000875af1158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce891906137f9565b5050505050565b606060118054610cfe90613816565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2a90613816565b8015610d775780601f10610d4c57610100808354040283529160200191610d77565b820191906000526020600020905b815481529060010190602001808311610d5a57829003601f168201915b5050505050905090565b6000610d8e338484611e20565b5060015b92915050565b6000546001600160a01b03163314610dc25760405162461bcd60e51b8152600401610c1d906137c4565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314610e105760405162461bcd60e51b8152600401610c1d906137c4565b6019818385610e1f888a613867565b610e299190613867565b610e339190613867565b610e3d9190613867565b61ffff161115610e5f5760405162461bcd60e51b8152600401610c1d9061388d565b6015805461ffff928316600160401b0261ffff60401b19968416620100000263ffff000019968516600160201b029690961665ffffffff000019958516600160301b0267ffff00000000ffff1990931694909816939093171792909216949094179190911791909116919091179055565b6000546001600160a01b03163314610efa5760405162461bcd60e51b8152600401610c1d906137c4565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f29848484611f44565b610f7b8433610f7685604051806060016040528060288152602001613a99602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906123c1565b611e20565b5060019392505050565b6000600b54821115610fec5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c1d565b6000610ff66123fb565b9050611002838261241e565b9392505050565b6000546001600160a01b031633146110335760405162461bcd60e51b8152600401610c1d906137c4565b600d5460405147916001600160a01b03169082156108fc029083906000818181858888f1935050505015801561106d573d6000803e3d6000fd5b5050565b6000546001600160a01b0316331461109b5760405162461bcd60e51b8152600401610c1d906137c4565b6001600160a01b03811660009081526007602052604090205460ff166111035760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c1d565b60005b60085481101561106d57816001600160a01b03166008828154811061112d5761112d6138c4565b6000918252602090912001546001600160a01b031614156112125760088054611158906001906138da565b81548110611168576111686138c4565b600091825260209091200154600880546001600160a01b039092169183908110611194576111946138c4565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff1916905560088054806111ec576111ec6138f1565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061121c81613907565b915050611106565b6000546001600160a01b0316331461124e5760405162461bcd60e51b8152600401610c1d906137c4565b601981838561125d888a613867565b6112679190613867565b6112719190613867565b61127b9190613867565b61ffff16111561129d5760405162461bcd60e51b8152600401610c1d9061388d565b6014805461ffff928316600160401b0261ffff60401b19968416620100000263ffff000019968516600160201b029690961665ffffffff000019958516600160301b0267ffff00000000ffff1990931694909816939093171792909216949094179190911791909116919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d8e918590610f769086612460565b3360008181526007602052604090205460ff16156113b95760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610c1d565b60008060006113c7856124bf565b5092509250925060006113e4868585856113df6123fb565b612544565b50506001600160a01b03861660009081526003602052604090205490915061140c90826125a6565b6001600160a01b038616600090815260036020526040902055600b5461143290826125a6565b600b55600c546114429087612460565b600c55505050505050565b6000546001600160a01b031633146114775760405162461bcd60e51b8152600401610c1d906137c4565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600a548311156114ef5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c1d565b60008060006114fd866124bf565b50925092509250600080611516888686866113df6123fb565b50915091508661152c57509350610d9292505050565b9450610d929350505050565b6000546001600160a01b031633146115625760405162461bcd60e51b8152600401610c1d906137c4565b6019818385611571888a613867565b61157b9190613867565b6115859190613867565b61158f9190613867565b61ffff1611156115b15760405162461bcd60e51b8152600401610c1d9061388d565b6016805461ffff928316600160401b0261ffff60401b19968416620100000263ffff000019968516600160201b029690961665ffffffff000019958516600160301b0267ffff00000000ffff1990931694909816939093171792909216949094179190911791909116919091179055565b6000546001600160a01b0316331461164c5760405162461bcd60e51b8152600401610c1d906137c4565b6001600160a01b03811660009081526007602052604090205460ff16156116b55760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c1d565b6001600160a01b0381166000908152600360205260409020541561170f576001600160a01b0381166000908152600360205260409020546116f590610f85565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff16156117b257506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610d9290610f85565b6000546001600160a01b031633146117fe5760405162461bcd60e51b8152600401610c1d906137c4565b600080546040516001600160a01b0390911690600080516020613ac1833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146118605760405162461bcd60e51b8152600401610c1d906137c4565b6001600160a01b03166000908152600960205260409020805460ff19169055565b606060128054610cfe90613816565b6000610d8e3384610f7685604051806060016040528060258152602001613ae1602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906123c1565b6001546001600160a01b031633146119455760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610c1d565b60025442116119a45760405162461bcd60e51b815260206004820152602560248201527f436f6e7472616374206973206c6f636b656420756e74696c2061206c61746572604482015264206461746560d81b6064820152608401610c1d565b600154600080546040516001600160a01b039384169390911691600080516020613ac183398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000610d8e338484611f44565b6000546001600160a01b03163314611a2d5760405162461bcd60e51b8152600401610c1d906137c4565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a795760405162461bcd60e51b8152600401610c1d906137c4565b60178054821515600160581b0260ff60581b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611ac690831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611afb5760405162461bcd60e51b8152600401610c1d906137c4565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611b2a8142613922565b600255600080546040516001600160a01b0390911690600080516020613ac1833981519152908390a350565b6000546001600160a01b03163314611b805760405162461bcd60e51b8152600401610c1d906137c4565b6103e8600a54611b90919061393a565b811015611baf5760405162461bcd60e51b8152600401610c1d9061395c565b601a55565b6000546001600160a01b03163314611bde5760405162461bcd60e51b8152600401610c1d906137c4565b6103e8600a54611bee919061393a565b811015611c0d5760405162461bcd60e51b8152600401610c1d9061395c565b601b55565b6000546001600160a01b03163314611c3c5760405162461bcd60e51b8152600401610c1d906137c4565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611c875760405162461bcd60e51b8152600401610c1d906137c4565b6103e8600a54611c97919061393a565b811015611cb65760405162461bcd60e51b8152600401610c1d9061395c565b601855565b6000546001600160a01b03163314611ce55760405162461bcd60e51b8152600401610c1d906137c4565b601c55565b6000546001600160a01b03163314611d145760405162461bcd60e51b8152600401610c1d906137c4565b6001600160a01b038116611d795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c1d565b600080546040516001600160a01b0380851693921691600080516020613ac183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611dec5760405162461bcd60e51b8152600401610c1d906137c4565b6103e8600a54611dfc919061393a565b811015611e1b5760405162461bcd60e51b8152600401610c1d9061395c565b601955565b6001600160a01b038316611e825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c1d565b6001600160a01b038216611ee35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c1d565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611fa85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c1d565b6001600160a01b03821661200a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c1d565b6000811161206c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c1d565b600061207730611775565b9050601854811061208757506018545b601c54811080159081906120a55750601754600160501b900460ff16155b80156120e357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156120f85750601754600160581b900460ff165b1561210b57601c54915061210b826125e8565b6001600160a01b03851660009081526006602052604090205460019060ff168061214d57506001600160a01b03851660009081526006602052604090205460ff165b15612156575060005b80156123ad576001600160a01b03861660009081526009602052604090205460ff1615801561219e57506001600160a01b03851660009081526009602052604090205460ff16155b156123ad5760185484111561220c5760405162461bcd60e51b815260206004820152602e60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201526d3930b739b332b920b6b7bab73a1760911b6064820152608401610c1d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316141561231357601b5461225286611775565b61225c9086613922565b11156122b55760405162461bcd60e51b815260206004820152602260248201527f526563697069656e742065786365656473206d61782077616c6c65742073697a604482015261329760f11b6064820152608401610c1d565b6019548411156123135760405162461bcd60e51b8152602060048201526024808201527f42757920616d6f756e74206578636565647320746865206d6178427579416d6f6044820152633ab73a1760e11b6064820152608401610c1d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614156123ad57601a548411156123ad5760405162461bcd60e51b815260206004820152602560248201527f53656c6c20616d6f756e74206578636565647320746865206d617853656c6c4160448201526436b7baba1760d91b6064820152608401610c1d565b6123b986868684612962565b505050505050565b600081848411156123e55760405162461bcd60e51b8152600401610c1d9190613625565b5060006123f284866138da565b95945050505050565b6000806000612408612cbb565b9092509050612417828261241e565b9250505090565b600061100283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e3d565b60008061246d8385613922565b9050838110156110025760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c1d565b60008060008060006124d086612e6b565b905060006124dd87612e8d565b905060006124ea88612eaf565b6124f389612ed2565b6124fc8a612ef5565b6125069190613922565b6125109190613922565b90506000612528836125228b876125a6565b906125a6565b905061253481836125a6565b9993985091965094509092505050565b60008080806125538986612f14565b905060006125618987612f14565b9050600061256f8988612f14565b9050600061257d8989612f14565b9050600061259182612522858189896125a6565b949d949c50929a509298505050505050505050565b600061100283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123c1565b6017805460ff60501b1916600160501b17905560165460155460009161ffff600160401b808304821693908104821692600160301b808204841693908304811692600160201b808404831693908204831692612651926201000092839004821692900416613867565b61265b9190613867565b6126659190613867565b61266f9190613867565b6126799190613867565b6126839190613867565b61268d9190613867565b612698906002613993565b60165460155461ffff928316935060009284926126c392620100009182900483169291900416613867565b6126d19061ffff16856139bd565b6126db919061393a565b60165460155491925060009184916127059161ffff600160201b9283900481169290910416613867565b6127139061ffff16866139bd565b61271e9060026139bd565b612728919061393a565b600f549091506127439030906001600160a01b031683612f93565b600061274f8284613922565b61275990866138da565b9050476127658261310b565b600061277182476138da565b6016546015549192506000916127999161ffff62010000918290048116929190910416613867565b6127a79061ffff16886138da565b6127b1908361393a565b6016546015549192506000916127d99161ffff62010000918290048116929190910416613867565b6127e79061ffff16836139bd565b905080156127f9576127f987826132c3565b60165460155460009161281e9161ffff600160301b9283900481169290910416613867565b61ffff1661282d8460026139bd565b61283791906139bd565b60165460155491925060009147916128619161ffff600160401b9283900481169290910416613867565b61ffff166128708660026139bd565b61287a91906139bd565b116128c0576016546015546128a29161ffff600160401b918290048116929190910416613867565b61ffff166128b18560026139bd565b6128bb91906139bd565b6128c2565b475b9050811561290657600d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612904573d6000803e3d6000fd5b505b801561294857600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612946573d6000803e3d6000fd5b505b50506017805460ff60501b19169055505050505050505050565b8015612b49576129806017805469ffffffffffffffffffff19169055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415612a2d576015546017805461ffff80841663ffffffff1990921691909117620100008085048316021767ffffffff000000001916600160201b80850483160261ffff60301b191617600160301b8085048316021761ffff60401b1916600160401b9384900491909116909202919091179055612b49565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161415612ada576016546017805461ffff80841663ffffffff1990921691909117620100008085048316021767ffffffff000000001916600160201b80850483160261ffff60301b191617600160301b8085048316021761ffff60401b1916600160401b9384900491909116909202919091179055612b49565b6014546017805461ffff80841663ffffffff1990921691909117620100008085048316021767ffffffff000000001916600160201b80850483160261ffff60301b191617600160301b8085048316021761ffff60401b1916600160401b93849004919091169092029190911790555b6001600160a01b03841660009081526007602052604090205460ff168015612b8a57506001600160a01b03831660009081526007602052604090205460ff16155b15612b9f57612b9a8484846133a2565b612c9d565b6001600160a01b03841660009081526007602052604090205460ff16158015612be057506001600160a01b03831660009081526007602052604090205460ff165b15612bf057612b9a848484613456565b6001600160a01b03841660009081526007602052604090205460ff16158015612c3257506001600160a01b03831660009081526007602052604090205460ff16155b15612c4257612b9a8484846134ac565b6001600160a01b03841660009081526007602052604090205460ff168015612c8257506001600160a01b03831660009081526007602052604090205460ff165b15612c9257612b9a848484612f93565b612c9d8484846134ac565b612cb56017805469ffffffffffffffffffff19169055565b50505050565b600b54600a546000918291825b600854811015612e0d57826003600060088481548110612cea57612cea6138c4565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d555750816004600060088481548110612d2e57612d2e6138c4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d6b57600b54600a54945094505050509091565b612db16003600060088481548110612d8557612d856138c4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906125a6565b9250612df96004600060088481548110612dcd57612dcd6138c4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906125a6565b915080612e0581613907565b915050612cc8565b50600a54600b54612e1d9161241e565b821015612e3457600b54600a549350935050509091565b90939092509050565b60008183612e5e5760405162461bcd60e51b8152600401610c1d9190613625565b5060006123f2848661393a565b601754600090610d9290606490612e8790859061ffff16612f14565b9061241e565b601754600090610d9290606490612e8790859062010000900461ffff16612f14565b601754600090610d9290606490612e87908590600160201b900461ffff16612f14565b601754600090610d9290606490612e87908590600160401b900461ffff16612f14565b601754600090610d9290606490612e87908590600160301b900461ffff165b600082612f2357506000610d92565b6000612f2f83856139bd565b905082612f3c858361393a565b146110025760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c1d565b600080600080612fa2856124bf565b93509350935093506000806000612fbe888787876113df6123fb565b6001600160a01b038d166000908152600460205260409020549295509093509150612fe990896125a6565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461301890846125a6565b6001600160a01b03808c16600090815260036020908152604080832094909455918c1681526004909152205461304e9088612460565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461307d9083612460565b6001600160a01b038a1660009081526003602052604090205561309f85613502565b6130a884613502565b6130b2818761358b565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040516130f791815260200190565b60405180910390a350505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613140576131406138c4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e291906139dc565b816001815181106131f5576131f56138c4565b60200260200101906001600160a01b031690816001600160a01b031681525050613240307f000000000000000000000000000000000000000000000000000000000000000084611e20565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906132959085906000908690309042906004016139f9565b600060405180830381600087803b1580156132af57600080fd5b505af11580156123b9573d6000803e3d6000fd5b6132ee307f000000000000000000000000000000000000000000000000000000000000000084611e20565b60105460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af115801561337d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ce89190613a6a565b6000806000806133b1856124bf565b935093509350935060008060006133cd888787876113df6123fb565b6001600160a01b038d1660009081526004602052604090205492955090935091506133f890896125a6565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461342790846125a6565b6001600160a01b03808c1660009081526003602052604080822093909355908b168152205461307d9083612460565b600080600080613465856124bf565b93509350935093506000806000613481888787876113df6123fb565b6001600160a01b038d16600090815260036020526040902054929550909350915061301890846125a6565b6000806000806134bb856124bf565b935093509350935060008060006134d7888787876113df6123fb565b6001600160a01b038d16600090815260036020526040902054929550909350915061342790846125a6565b600061350c6123fb565b9050600061351a8383612f14565b306000908152600360205260409020549091506135379082612460565b3060009081526003602090815260408083209390935560079052205460ff161561358657306000908152600460205260409020546135759084612460565b306000908152600460205260409020555b505050565b600b5461359890836125a6565b600b55600c546135a89082612460565b600c555050565b6001600160a01b03811681146135c457600080fd5b50565b6000602082840312156135d957600080fd5b8135611002816135af565b6000806000606084860312156135f957600080fd5b8335613604816135af565b92506020840135613614816135af565b929592945050506040919091013590565b600060208083528351808285015260005b8181101561365257858101830151858201604001528201613636565b81811115613664576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561368d57600080fd5b8235613698816135af565b946020939093013593505050565b803561ffff811681146136b857600080fd5b919050565b600080600080600060a086880312156136d557600080fd5b6136de866136a6565b94506136ec602087016136a6565b93506136fa604087016136a6565b9250613708606087016136a6565b9150613716608087016136a6565b90509295509295909350565b60006020828403121561373457600080fd5b5035919050565b80151581146135c457600080fd5b6000806040838503121561375c57600080fd5b82359150602083013561376e8161373b565b809150509250929050565b60006020828403121561378b57600080fd5b81356110028161373b565b600080604083850312156137a957600080fd5b82356137b4816135af565b9150602083013561376e816135af565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561380b57600080fd5b81516110028161373b565b600181811c9082168061382a57607f821691505b6020821081141561384b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600061ffff80831681851680830382111561388457613884613851565b01949350505050565b6020808252601d908201527f596f752063616e27742073657420666565732068696768657220323525000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000828210156138ec576138ec613851565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561391b5761391b613851565b5060010190565b6000821982111561393557613935613851565b500190565b60008261395757634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601f908201527f596f752043616e27742073657420536d616c6c6572207468616e20302e312500604082015260600190565b600061ffff808316818516818304811182151516156139b4576139b4613851565b02949350505050565b60008160001904831182151516156139d7576139d7613851565b500290565b6000602082840312156139ee57600080fd5b8151611002816135af565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613a495784516001600160a01b031683529383019391830191600101613a24565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613a7f57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122077801296e0742bc96d19c892bdca3d228f34b5b887b47d9cc3ee1cbc8f4c0f7b64736f6c634300080a0033
Deployed Bytecode
0x6080604052600436106103905760003560e01c806366d602ae116101dc578063aacebbe311610102578063dd62ed3e116100a0578063ec28438a1161006f578063ec28438a14610b73578063f0f165af14610b93578063f2fde38b14610bb3578063f34eb0b814610bd357600080fd5b8063dd62ed3e14610acd578063e99c9d0914610b13578063ea1644d514610b33578063ea2f0b3714610b5357600080fd5b8063c49b9a80116100dc578063c49b9a8014610a3e578063d12a768814610a5e578063d94160e014610a74578063dd46706414610aad57600080fd5b8063aacebbe3146109c5578063acb2ad6f146109e5578063b6c5232414610a2957600080fd5b80638ea5220f1161017a578063a457c2d711610149578063a457c2d71461095a578063a69df4b51461097a578063a9059cbb1461098f578063a9e75723146109af57600080fd5b80638ea5220f146108ef5780638f3fa8601461090f57806391d919a91461092557806395d89b411461094557600080fd5b806375f0a874116101b657806375f0a8741461086257806388e765ff1461088257806388f82020146108985780638da5cb5b146108d157600080fd5b806366d602ae1461081757806370a082311461082d578063715018a61461084d57600080fd5b8063313ce567116102c15780634549b0391161025f5780634cfd4a921161022e5780634cfd4a921461077e57806352390c021461079e5780635342acb4146107be5780635d60c7be146107f757600080fd5b80634549b039146106c557806347062402146106e557806349bd5a5e146107295780634a74bb021461075d57600080fd5b806338c4f8141161029b57806338c4f8141461064557806339509351146106655780633bd5d17314610685578063437823ec146106a557600080fd5b8063313ce567146105ee578063364333f4146106105780633685d4191461062557600080fd5b80631465d9291161032e5780631816467f116103085780631816467f1461051557806323b872dd146105355780632b14ca56146105555780632d838119146105ce57600080fd5b80631465d929146104ac5780631694505e146104cc57806318160ddd1461050057600080fd5b806306fdde031161036a57806306fdde031461041b578063095ea7b31461043d5780630bd3a7f91461046d57806313114a9d1461048d57600080fd5b806304dacd501461039c5780630659ce5c146103be57806306ee6ad8146103de57600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103bc6103b73660046135c7565b610bf3565b005b3480156103ca57600080fd5b506103bc6103d93660046135e4565b610c48565b3480156103ea57600080fd5b50600f546103fe906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561042757600080fd5b50610430610cef565b6040516104129190613625565b34801561044957600080fd5b5061045d61045836600461367a565b610d81565b6040519015158152602001610412565b34801561047957600080fd5b506103bc6104883660046135c7565b610d98565b34801561049957600080fd5b50600c545b604051908152602001610412565b3480156104b857600080fd5b506103bc6104c73660046136bd565b610de6565b3480156104d857600080fd5b506103fe7f000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a3081565b34801561050c57600080fd5b50600a5461049e565b34801561052157600080fd5b506103bc6105303660046135c7565b610ed0565b34801561054157600080fd5b5061045d6105503660046135e4565b610f1c565b34801561056157600080fd5b506016546105999061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a001610412565b3480156105da57600080fd5b5061049e6105e9366004613722565b610f85565b3480156105fa57600080fd5b5060135460405160ff9091168152602001610412565b34801561061c57600080fd5b506103bc611009565b34801561063157600080fd5b506103bc6106403660046135c7565b611071565b34801561065157600080fd5b506103bc6106603660046136bd565b611224565b34801561067157600080fd5b5061045d61068036600461367a565b61130e565b34801561069157600080fd5b506103bc6106a0366004613722565b611344565b3480156106b157600080fd5b506103bc6106c03660046135c7565b61144d565b3480156106d157600080fd5b5061049e6106e0366004613749565b61149b565b3480156106f157600080fd5b506015546105999061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b34801561073557600080fd5b506103fe7f000000000000000000000000098c105073cddc9440dd18850a398ddf545f24b081565b34801561076957600080fd5b5060175461045d90600160581b900460ff1681565b34801561078a57600080fd5b506103bc6107993660046136bd565b611538565b3480156107aa57600080fd5b506103bc6107b93660046135c7565b611622565b3480156107ca57600080fd5b5061045d6107d93660046135c7565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561080357600080fd5b506010546103fe906001600160a01b031681565b34801561082357600080fd5b5061049e601a5481565b34801561083957600080fd5b5061049e6108483660046135c7565b611775565b34801561085957600080fd5b506103bc6117d4565b34801561086e57600080fd5b50600d546103fe906001600160a01b031681565b34801561088e57600080fd5b5061049e60195481565b3480156108a457600080fd5b5061045d6108b33660046135c7565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108dd57600080fd5b506000546001600160a01b03166103fe565b3480156108fb57600080fd5b50600e546103fe906001600160a01b031681565b34801561091b57600080fd5b5061049e601b5481565b34801561093157600080fd5b506103bc6109403660046135c7565b611836565b34801561095157600080fd5b50610430611881565b34801561096657600080fd5b5061045d61097536600461367a565b611890565b34801561098657600080fd5b506103bc6118df565b34801561099b57600080fd5b5061045d6109aa36600461367a565b6119f6565b3480156109bb57600080fd5b5061049e60185481565b3480156109d157600080fd5b506103bc6109e03660046135c7565b611a03565b3480156109f157600080fd5b506014546105999061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b348015610a3557600080fd5b5060025461049e565b348015610a4a57600080fd5b506103bc610a59366004613779565b611a4f565b348015610a6a57600080fd5b5061049e601c5481565b348015610a8057600080fd5b5061045d610a8f3660046135c7565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610ab957600080fd5b506103bc610ac8366004613722565b611ad1565b348015610ad957600080fd5b5061049e610ae8366004613796565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b1f57600080fd5b506103bc610b2e366004613722565b611b56565b348015610b3f57600080fd5b506103bc610b4e366004613722565b611bb4565b348015610b5f57600080fd5b506103bc610b6e3660046135c7565b611c12565b348015610b7f57600080fd5b506103bc610b8e366004613722565b611c5d565b348015610b9f57600080fd5b506103bc610bae366004613722565b611cbb565b348015610bbf57600080fd5b506103bc610bce3660046135c7565b611cea565b348015610bdf57600080fd5b506103bc610bee366004613722565b611dc2565b6000546001600160a01b03163314610c265760405162461bcd60e51b8152600401610c1d906137c4565b60405180910390fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c725760405162461bcd60e51b8152600401610c1d906137c4565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284919082169063a9059cbb906044016020604051808303816000875af1158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce891906137f9565b5050505050565b606060118054610cfe90613816565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2a90613816565b8015610d775780601f10610d4c57610100808354040283529160200191610d77565b820191906000526020600020905b815481529060010190602001808311610d5a57829003601f168201915b5050505050905090565b6000610d8e338484611e20565b5060015b92915050565b6000546001600160a01b03163314610dc25760405162461bcd60e51b8152600401610c1d906137c4565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314610e105760405162461bcd60e51b8152600401610c1d906137c4565b6019818385610e1f888a613867565b610e299190613867565b610e339190613867565b610e3d9190613867565b61ffff161115610e5f5760405162461bcd60e51b8152600401610c1d9061388d565b6015805461ffff928316600160401b0261ffff60401b19968416620100000263ffff000019968516600160201b029690961665ffffffff000019958516600160301b0267ffff00000000ffff1990931694909816939093171792909216949094179190911791909116919091179055565b6000546001600160a01b03163314610efa5760405162461bcd60e51b8152600401610c1d906137c4565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f29848484611f44565b610f7b8433610f7685604051806060016040528060288152602001613a99602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906123c1565b611e20565b5060019392505050565b6000600b54821115610fec5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c1d565b6000610ff66123fb565b9050611002838261241e565b9392505050565b6000546001600160a01b031633146110335760405162461bcd60e51b8152600401610c1d906137c4565b600d5460405147916001600160a01b03169082156108fc029083906000818181858888f1935050505015801561106d573d6000803e3d6000fd5b5050565b6000546001600160a01b0316331461109b5760405162461bcd60e51b8152600401610c1d906137c4565b6001600160a01b03811660009081526007602052604090205460ff166111035760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c1d565b60005b60085481101561106d57816001600160a01b03166008828154811061112d5761112d6138c4565b6000918252602090912001546001600160a01b031614156112125760088054611158906001906138da565b81548110611168576111686138c4565b600091825260209091200154600880546001600160a01b039092169183908110611194576111946138c4565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff1916905560088054806111ec576111ec6138f1565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061121c81613907565b915050611106565b6000546001600160a01b0316331461124e5760405162461bcd60e51b8152600401610c1d906137c4565b601981838561125d888a613867565b6112679190613867565b6112719190613867565b61127b9190613867565b61ffff16111561129d5760405162461bcd60e51b8152600401610c1d9061388d565b6014805461ffff928316600160401b0261ffff60401b19968416620100000263ffff000019968516600160201b029690961665ffffffff000019958516600160301b0267ffff00000000ffff1990931694909816939093171792909216949094179190911791909116919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d8e918590610f769086612460565b3360008181526007602052604090205460ff16156113b95760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610c1d565b60008060006113c7856124bf565b5092509250925060006113e4868585856113df6123fb565b612544565b50506001600160a01b03861660009081526003602052604090205490915061140c90826125a6565b6001600160a01b038616600090815260036020526040902055600b5461143290826125a6565b600b55600c546114429087612460565b600c55505050505050565b6000546001600160a01b031633146114775760405162461bcd60e51b8152600401610c1d906137c4565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600a548311156114ef5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c1d565b60008060006114fd866124bf565b50925092509250600080611516888686866113df6123fb565b50915091508661152c57509350610d9292505050565b9450610d929350505050565b6000546001600160a01b031633146115625760405162461bcd60e51b8152600401610c1d906137c4565b6019818385611571888a613867565b61157b9190613867565b6115859190613867565b61158f9190613867565b61ffff1611156115b15760405162461bcd60e51b8152600401610c1d9061388d565b6016805461ffff928316600160401b0261ffff60401b19968416620100000263ffff000019968516600160201b029690961665ffffffff000019958516600160301b0267ffff00000000ffff1990931694909816939093171792909216949094179190911791909116919091179055565b6000546001600160a01b0316331461164c5760405162461bcd60e51b8152600401610c1d906137c4565b6001600160a01b03811660009081526007602052604090205460ff16156116b55760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c1d565b6001600160a01b0381166000908152600360205260409020541561170f576001600160a01b0381166000908152600360205260409020546116f590610f85565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff16156117b257506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610d9290610f85565b6000546001600160a01b031633146117fe5760405162461bcd60e51b8152600401610c1d906137c4565b600080546040516001600160a01b0390911690600080516020613ac1833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146118605760405162461bcd60e51b8152600401610c1d906137c4565b6001600160a01b03166000908152600960205260409020805460ff19169055565b606060128054610cfe90613816565b6000610d8e3384610f7685604051806060016040528060258152602001613ae1602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906123c1565b6001546001600160a01b031633146119455760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610c1d565b60025442116119a45760405162461bcd60e51b815260206004820152602560248201527f436f6e7472616374206973206c6f636b656420756e74696c2061206c61746572604482015264206461746560d81b6064820152608401610c1d565b600154600080546040516001600160a01b039384169390911691600080516020613ac183398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000610d8e338484611f44565b6000546001600160a01b03163314611a2d5760405162461bcd60e51b8152600401610c1d906137c4565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a795760405162461bcd60e51b8152600401610c1d906137c4565b60178054821515600160581b0260ff60581b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611ac690831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611afb5760405162461bcd60e51b8152600401610c1d906137c4565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611b2a8142613922565b600255600080546040516001600160a01b0390911690600080516020613ac1833981519152908390a350565b6000546001600160a01b03163314611b805760405162461bcd60e51b8152600401610c1d906137c4565b6103e8600a54611b90919061393a565b811015611baf5760405162461bcd60e51b8152600401610c1d9061395c565b601a55565b6000546001600160a01b03163314611bde5760405162461bcd60e51b8152600401610c1d906137c4565b6103e8600a54611bee919061393a565b811015611c0d5760405162461bcd60e51b8152600401610c1d9061395c565b601b55565b6000546001600160a01b03163314611c3c5760405162461bcd60e51b8152600401610c1d906137c4565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611c875760405162461bcd60e51b8152600401610c1d906137c4565b6103e8600a54611c97919061393a565b811015611cb65760405162461bcd60e51b8152600401610c1d9061395c565b601855565b6000546001600160a01b03163314611ce55760405162461bcd60e51b8152600401610c1d906137c4565b601c55565b6000546001600160a01b03163314611d145760405162461bcd60e51b8152600401610c1d906137c4565b6001600160a01b038116611d795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c1d565b600080546040516001600160a01b0380851693921691600080516020613ac183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611dec5760405162461bcd60e51b8152600401610c1d906137c4565b6103e8600a54611dfc919061393a565b811015611e1b5760405162461bcd60e51b8152600401610c1d9061395c565b601955565b6001600160a01b038316611e825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c1d565b6001600160a01b038216611ee35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c1d565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611fa85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c1d565b6001600160a01b03821661200a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c1d565b6000811161206c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c1d565b600061207730611775565b9050601854811061208757506018545b601c54811080159081906120a55750601754600160501b900460ff16155b80156120e357507f000000000000000000000000098c105073cddc9440dd18850a398ddf545f24b06001600160a01b0316856001600160a01b031614155b80156120f85750601754600160581b900460ff165b1561210b57601c54915061210b826125e8565b6001600160a01b03851660009081526006602052604090205460019060ff168061214d57506001600160a01b03851660009081526006602052604090205460ff165b15612156575060005b80156123ad576001600160a01b03861660009081526009602052604090205460ff1615801561219e57506001600160a01b03851660009081526009602052604090205460ff16155b156123ad5760185484111561220c5760405162461bcd60e51b815260206004820152602e60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201526d3930b739b332b920b6b7bab73a1760911b6064820152608401610c1d565b7f000000000000000000000000098c105073cddc9440dd18850a398ddf545f24b06001600160a01b0316866001600160a01b0316141561231357601b5461225286611775565b61225c9086613922565b11156122b55760405162461bcd60e51b815260206004820152602260248201527f526563697069656e742065786365656473206d61782077616c6c65742073697a604482015261329760f11b6064820152608401610c1d565b6019548411156123135760405162461bcd60e51b8152602060048201526024808201527f42757920616d6f756e74206578636565647320746865206d6178427579416d6f6044820152633ab73a1760e11b6064820152608401610c1d565b7f000000000000000000000000098c105073cddc9440dd18850a398ddf545f24b06001600160a01b0316856001600160a01b031614156123ad57601a548411156123ad5760405162461bcd60e51b815260206004820152602560248201527f53656c6c20616d6f756e74206578636565647320746865206d617853656c6c4160448201526436b7baba1760d91b6064820152608401610c1d565b6123b986868684612962565b505050505050565b600081848411156123e55760405162461bcd60e51b8152600401610c1d9190613625565b5060006123f284866138da565b95945050505050565b6000806000612408612cbb565b9092509050612417828261241e565b9250505090565b600061100283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e3d565b60008061246d8385613922565b9050838110156110025760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c1d565b60008060008060006124d086612e6b565b905060006124dd87612e8d565b905060006124ea88612eaf565b6124f389612ed2565b6124fc8a612ef5565b6125069190613922565b6125109190613922565b90506000612528836125228b876125a6565b906125a6565b905061253481836125a6565b9993985091965094509092505050565b60008080806125538986612f14565b905060006125618987612f14565b9050600061256f8988612f14565b9050600061257d8989612f14565b9050600061259182612522858189896125a6565b949d949c50929a509298505050505050505050565b600061100283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123c1565b6017805460ff60501b1916600160501b17905560165460155460009161ffff600160401b808304821693908104821692600160301b808204841693908304811692600160201b808404831693908204831692612651926201000092839004821692900416613867565b61265b9190613867565b6126659190613867565b61266f9190613867565b6126799190613867565b6126839190613867565b61268d9190613867565b612698906002613993565b60165460155461ffff928316935060009284926126c392620100009182900483169291900416613867565b6126d19061ffff16856139bd565b6126db919061393a565b60165460155491925060009184916127059161ffff600160201b9283900481169290910416613867565b6127139061ffff16866139bd565b61271e9060026139bd565b612728919061393a565b600f549091506127439030906001600160a01b031683612f93565b600061274f8284613922565b61275990866138da565b9050476127658261310b565b600061277182476138da565b6016546015549192506000916127999161ffff62010000918290048116929190910416613867565b6127a79061ffff16886138da565b6127b1908361393a565b6016546015549192506000916127d99161ffff62010000918290048116929190910416613867565b6127e79061ffff16836139bd565b905080156127f9576127f987826132c3565b60165460155460009161281e9161ffff600160301b9283900481169290910416613867565b61ffff1661282d8460026139bd565b61283791906139bd565b60165460155491925060009147916128619161ffff600160401b9283900481169290910416613867565b61ffff166128708660026139bd565b61287a91906139bd565b116128c0576016546015546128a29161ffff600160401b918290048116929190910416613867565b61ffff166128b18560026139bd565b6128bb91906139bd565b6128c2565b475b9050811561290657600d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612904573d6000803e3d6000fd5b505b801561294857600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612946573d6000803e3d6000fd5b505b50506017805460ff60501b19169055505050505050505050565b8015612b49576129806017805469ffffffffffffffffffff19169055565b7f000000000000000000000000098c105073cddc9440dd18850a398ddf545f24b06001600160a01b0316846001600160a01b03161415612a2d576015546017805461ffff80841663ffffffff1990921691909117620100008085048316021767ffffffff000000001916600160201b80850483160261ffff60301b191617600160301b8085048316021761ffff60401b1916600160401b9384900491909116909202919091179055612b49565b7f000000000000000000000000098c105073cddc9440dd18850a398ddf545f24b06001600160a01b0316836001600160a01b03161415612ada576016546017805461ffff80841663ffffffff1990921691909117620100008085048316021767ffffffff000000001916600160201b80850483160261ffff60301b191617600160301b8085048316021761ffff60401b1916600160401b9384900491909116909202919091179055612b49565b6014546017805461ffff80841663ffffffff1990921691909117620100008085048316021767ffffffff000000001916600160201b80850483160261ffff60301b191617600160301b8085048316021761ffff60401b1916600160401b93849004919091169092029190911790555b6001600160a01b03841660009081526007602052604090205460ff168015612b8a57506001600160a01b03831660009081526007602052604090205460ff16155b15612b9f57612b9a8484846133a2565b612c9d565b6001600160a01b03841660009081526007602052604090205460ff16158015612be057506001600160a01b03831660009081526007602052604090205460ff165b15612bf057612b9a848484613456565b6001600160a01b03841660009081526007602052604090205460ff16158015612c3257506001600160a01b03831660009081526007602052604090205460ff16155b15612c4257612b9a8484846134ac565b6001600160a01b03841660009081526007602052604090205460ff168015612c8257506001600160a01b03831660009081526007602052604090205460ff165b15612c9257612b9a848484612f93565b612c9d8484846134ac565b612cb56017805469ffffffffffffffffffff19169055565b50505050565b600b54600a546000918291825b600854811015612e0d57826003600060088481548110612cea57612cea6138c4565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d555750816004600060088481548110612d2e57612d2e6138c4565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d6b57600b54600a54945094505050509091565b612db16003600060088481548110612d8557612d856138c4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906125a6565b9250612df96004600060088481548110612dcd57612dcd6138c4565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906125a6565b915080612e0581613907565b915050612cc8565b50600a54600b54612e1d9161241e565b821015612e3457600b54600a549350935050509091565b90939092509050565b60008183612e5e5760405162461bcd60e51b8152600401610c1d9190613625565b5060006123f2848661393a565b601754600090610d9290606490612e8790859061ffff16612f14565b9061241e565b601754600090610d9290606490612e8790859062010000900461ffff16612f14565b601754600090610d9290606490612e87908590600160201b900461ffff16612f14565b601754600090610d9290606490612e87908590600160401b900461ffff16612f14565b601754600090610d9290606490612e87908590600160301b900461ffff165b600082612f2357506000610d92565b6000612f2f83856139bd565b905082612f3c858361393a565b146110025760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c1d565b600080600080612fa2856124bf565b93509350935093506000806000612fbe888787876113df6123fb565b6001600160a01b038d166000908152600460205260409020549295509093509150612fe990896125a6565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461301890846125a6565b6001600160a01b03808c16600090815260036020908152604080832094909455918c1681526004909152205461304e9088612460565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461307d9083612460565b6001600160a01b038a1660009081526003602052604090205561309f85613502565b6130a884613502565b6130b2818761358b565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040516130f791815260200190565b60405180910390a350505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613140576131406138c4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a306001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e291906139dc565b816001815181106131f5576131f56138c4565b60200260200101906001600160a01b031690816001600160a01b031681525050613240307f000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a3084611e20565b60405163791ac94760e01b81526001600160a01b037f000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a30169063791ac947906132959085906000908690309042906004016139f9565b600060405180830381600087803b1580156132af57600080fd5b505af11580156123b9573d6000803e3d6000fd5b6132ee307f000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a3084611e20565b60105460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a309091169063f305d71990839060c40160606040518083038185885af115801561337d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ce89190613a6a565b6000806000806133b1856124bf565b935093509350935060008060006133cd888787876113df6123fb565b6001600160a01b038d1660009081526004602052604090205492955090935091506133f890896125a6565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461342790846125a6565b6001600160a01b03808c1660009081526003602052604080822093909355908b168152205461307d9083612460565b600080600080613465856124bf565b93509350935093506000806000613481888787876113df6123fb565b6001600160a01b038d16600090815260036020526040902054929550909350915061301890846125a6565b6000806000806134bb856124bf565b935093509350935060008060006134d7888787876113df6123fb565b6001600160a01b038d16600090815260036020526040902054929550909350915061342790846125a6565b600061350c6123fb565b9050600061351a8383612f14565b306000908152600360205260409020549091506135379082612460565b3060009081526003602090815260408083209390935560079052205460ff161561358657306000908152600460205260409020546135759084612460565b306000908152600460205260409020555b505050565b600b5461359890836125a6565b600b55600c546135a89082612460565b600c555050565b6001600160a01b03811681146135c457600080fd5b50565b6000602082840312156135d957600080fd5b8135611002816135af565b6000806000606084860312156135f957600080fd5b8335613604816135af565b92506020840135613614816135af565b929592945050506040919091013590565b600060208083528351808285015260005b8181101561365257858101830151858201604001528201613636565b81811115613664576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561368d57600080fd5b8235613698816135af565b946020939093013593505050565b803561ffff811681146136b857600080fd5b919050565b600080600080600060a086880312156136d557600080fd5b6136de866136a6565b94506136ec602087016136a6565b93506136fa604087016136a6565b9250613708606087016136a6565b9150613716608087016136a6565b90509295509295909350565b60006020828403121561373457600080fd5b5035919050565b80151581146135c457600080fd5b6000806040838503121561375c57600080fd5b82359150602083013561376e8161373b565b809150509250929050565b60006020828403121561378b57600080fd5b81356110028161373b565b600080604083850312156137a957600080fd5b82356137b4816135af565b9150602083013561376e816135af565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561380b57600080fd5b81516110028161373b565b600181811c9082168061382a57607f821691505b6020821081141561384b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600061ffff80831681851680830382111561388457613884613851565b01949350505050565b6020808252601d908201527f596f752063616e27742073657420666565732068696768657220323525000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000828210156138ec576138ec613851565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561391b5761391b613851565b5060010190565b6000821982111561393557613935613851565b500190565b60008261395757634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601f908201527f596f752043616e27742073657420536d616c6c6572207468616e20302e312500604082015260600190565b600061ffff808316818516818304811182151516156139b4576139b4613851565b02949350505050565b60008160001904831182151516156139d7576139d7613851565b500290565b6000602082840312156139ee57600080fd5b8151611002816135af565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613a495784516001600160a01b031683529383019391830191600101613a24565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613a7f57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122077801296e0742bc96d19c892bdca3d228f34b5b887b47d9cc3ee1cbc8f4c0f7b64736f6c634300080a0033
Deployed Bytecode Sourcemap
28611:29034:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37530:121;;;;;;;;;;-1:-1:-1;37530:121:0;;;;;:::i;:::-;;:::i;:::-;;57426:216;;;;;;;;;;-1:-1:-1;57426:216:0;;;;;:::i;:::-;;:::i;29507:90::-;;;;;;;;;;-1:-1:-1;29507:90:0;;;;-1:-1:-1;;;;;29507:90:0;;;;;;-1:-1:-1;;;;;1083:32:1;;;1065:51;;1053:2;1038:18;29507:90:0;;;;;;;;33005:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;33990:193::-;;;;;;;;;;-1:-1:-1;33990:193:0;;;;;:::i;:::-;;:::i;:::-;;;2222:14:1;;2215:22;2197:41;;2185:2;2170:18;33990:193:0;2057:187:1;38721:115:0;;;;;;;;;;-1:-1:-1;38721:115:0;;;;;:::i;:::-;;:::i;35489:87::-;;;;;;;;;;-1:-1:-1;35558:10:0;;35489:87;;;2655:25:1;;;2643:2;2628:18;35489:87:0;2509:177:1;39423:443:0;;;;;;;;;;-1:-1:-1;39423:443:0;;;;;:::i;:::-;;:::i;30499:51::-;;;;;;;;;;;;;;;33282:95;;;;;;;;;;-1:-1:-1;33362:7:0;;33282:95;;37409:113;;;;;;;;;;-1:-1:-1;37409:113:0;;;;;:::i;:::-;;:::i;34191:446::-;;;;;;;;;;-1:-1:-1;34191:446:0;;;;;:::i;:::-;;:::i;30302:22::-;;;;;;;;;;-1:-1:-1;30302:22:0;;;;;;;;;;;;;;;-1:-1:-1;;;30302:22:0;;;;;-1:-1:-1;;;30302:22:0;;;;;-1:-1:-1;;;30302:22:0;;;;;;;;;;3828:6:1;3861:15;;;3843:34;;3913:15;;;3908:2;3893:18;;3886:43;3965:15;;;3945:18;;;3938:43;;;;4017:15;;4012:2;3997:18;;3990:43;4070:15;;;4064:3;4049:19;;4042:44;3805:3;3790:19;30302:22:0;3569:523:1;36944:322:0;;;;;;;;;;-1:-1:-1;36944:322:0;;;;;:::i;:::-;;:::i;33191:83::-;;;;;;;;;;-1:-1:-1;33257:9:0;;33191:83;;33257:9;;;;4424:36:1;;4412:2;4397:18;33191:83:0;4282:184:1;57263:155:0;;;;;;;;;;;;;:::i;37999:473::-;;;;;;;;;;-1:-1:-1;37999:473:0;;;;;:::i;:::-;;:::i;39874:::-;;;;;;;;;;-1:-1:-1;39874:473:0;;;;;:::i;:::-;;:::i;34645:300::-;;;;;;;;;;-1:-1:-1;34645:300:0;;;;;:::i;:::-;;:::i;35584:668::-;;;;;;;;;;-1:-1:-1;35584:668:0;;;;;:::i;:::-;;:::i;38480:111::-;;;;;;;;;;-1:-1:-1;38480:111:0;;;;;:::i;:::-;;:::i;36260:676::-;;;;;;;;;;-1:-1:-1;36260:676:0;;;;;:::i;:::-;;:::i;30275:20::-;;;;;;;;;;-1:-1:-1;30275:20:0;;;;;;;;;;;;;;;-1:-1:-1;;;30275:20:0;;;;;-1:-1:-1;;;30275:20:0;;;;;-1:-1:-1;;;30275:20:0;;;;;;30557:38;;;;;;;;;;;;;;;30632:40;;;;;;;;;;-1:-1:-1;30632:40:0;;;;-1:-1:-1;;;30632:40:0;;;;;;38966:449;;;;;;;;;;-1:-1:-1;38966:449:0;;;;;:::i;:::-;;:::i;37659:332::-;;;;;;;;;;-1:-1:-1;37659:332:0;;;;;:::i;:::-;;:::i;46304:124::-;;;;;;;;;;-1:-1:-1;46304:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;46393:27:0;46369:4;46393:27;;;:18;:27;;;;;;;;;46304:124;29604:37;;;;;;;;;;-1:-1:-1;29604:37:0;;;;-1:-1:-1;;;;;29604:37:0;;;30796:49;;;;;;;;;;;;;;;;33385:198;;;;;;;;;;-1:-1:-1;33385:198:0;;;;;:::i;:::-;;:::i;17696:148::-;;;;;;;;;;;;;:::i;29315:92::-;;;;;;;;;;-1:-1:-1;29315:92:0;;;;-1:-1:-1;;;;;29315:92:0;;;30741:48;;;;;;;;;;;;;;;;35361:120;;;;;;;;;;-1:-1:-1;35361:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;35453:20:0;35429:4;35453:20;;;:11;:20;;;;;;;;;35361:120;17056:79;;;;;;;;;;-1:-1:-1;17094:7:0;17121:6;-1:-1:-1;;;;;17121:6:0;17056:79;;29414:86;;;;;;;;;;-1:-1:-1;29414:86:0;;;;-1:-1:-1;;;;;29414:86:0;;;30852:49;;;;;;;;;;;;;;;;38844:114;;;;;;;;;;-1:-1:-1;38844:114:0;;;;;:::i;:::-;;:::i;33096:87::-;;;;;;;;;;;;;:::i;34953:400::-;;;;;;;;;;-1:-1:-1;34953:400:0;;;;;:::i;:::-;;:::i;18750:385::-;;;;;;;;;;;;;:::i;33591:199::-;;;;;;;;;;-1:-1:-1;33591:199:0;;;;;:::i;:::-;;:::i;30681:53::-;;;;;;;;;;;;;;;;37276:125;;;;;;;;;;-1:-1:-1;37276:125:0;;;;;:::i;:::-;;:::i;30238:30::-;;;;;;;;;;-1:-1:-1;30238:30:0;;;;;;;;;;;;;;;-1:-1:-1;;;30238:30:0;;;;;-1:-1:-1;;;30238:30:0;;;;;-1:-1:-1;;;30238:30:0;;;;;;18287:89;;;;;;;;;;-1:-1:-1;18359:9:0;;18287:89;;41374:171;;;;;;;;;;-1:-1:-1;41374:171:0;;;;;:::i;:::-;;:::i;30908:64::-;;;;;;;;;;;;;;;;46436:128;;;;;;;;;;-1:-1:-1;46436:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;46527:29:0;46503:4;46527:29;;;:20;:29;;;;;;;;;46436:128;18452:226;;;;;;;;;;-1:-1:-1;18452:226:0;;;;;:::i;:::-;;:::i;33798:184::-;;;;;;;;;;-1:-1:-1;33798:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;33947:18:0;;;33915:7;33947:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;33798:184;40936:211;;;;;;;;;;-1:-1:-1;40936:211:0;;;;;:::i;:::-;;:::i;41155:::-;;;;;;;;;;-1:-1:-1;41155:211:0;;;;;:::i;:::-;;:::i;38603:110::-;;;;;;;;;;-1:-1:-1;38603:110:0;;;;;:::i;:::-;;:::i;40503:207::-;;;;;;;;;;-1:-1:-1;40503:207:0;;;;;:::i;:::-;;:::i;40355:140::-;;;;;;;;;;-1:-1:-1;40355:140:0;;;;;:::i;:::-;;:::i;17998:281::-;;;;;;;;;;-1:-1:-1;17998:281:0;;;;;:::i;:::-;;:::i;40722:206::-;;;;;;;;;;-1:-1:-1;40722:206:0;;;;;:::i;:::-;;:::i;37530:121::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;;;;;;;;;37617:13:::1;:26:::0;;-1:-1:-1;;;;;;37617:26:0::1;-1:-1:-1::0;;;;;37617:26:0;;;::::1;::::0;;;::::1;::::0;;37530:121::o;57426:216::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;57594:40:::1;::::0;-1:-1:-1;;;57594:40:0;;-1:-1:-1;;;;;6324:32:1;;;57594:40:0::1;::::0;::::1;6306:51:1::0;6373:18;;;6366:34;;;57570:12:0;;57594:21;;::::1;::::0;::::1;::::0;6279:18:1;;57594:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;57530:112;57426:216:::0;;;:::o;33005:83::-;33042:13;33075:5;33068:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33005:83;:::o;33990:193::-;34092:4;34114:39;9120:10;34137:7;34146:6;34114:8;:39::i;:::-;-1:-1:-1;34171:4:0;33990:193;;;;;:::o;38721:115::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38792:29:0::1;;::::0;;;:20:::1;:29;::::0;;;;:36;;-1:-1:-1;;38792:36:0::1;38824:4;38792:36;::::0;;38721:115::o;39423:443::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;39655:2:::1;39648:3:::0;39636:9;39626:7;39608:15:::1;39614:9:::0;39608:3;:15:::1;:::i;:::-;:25;;;;:::i;:::-;:37;;;;:::i;:::-;:43;;;;:::i;:::-;:49;;;;39600:91;;;;-1:-1:-1::0;;;39600:91:0::1;;;;;;;:::i;:::-;39702:6;:16:::0;;::::1;39842::::0;;::::1;-1:-1:-1::0;;;39842:16:0::1;-1:-1:-1::0;;;;39803:28:0;;::::1;::::0;::::1;-1:-1:-1::0;;39768:24:0;;::::1;-1:-1:-1::0;;;39768:24:0::1;39803:28:::0;;;;-1:-1:-1;;39729:28:0;;::::1;-1:-1:-1::0;;;39729:28:0::1;-1:-1:-1::0;;39729:28:0;;;39702:16;;;::::1;39729:28:::0;;;;::::1;39803::::0;;;;;;;;;;;::::1;39842:16:::0;;;::::1;::::0;;;::::1;::::0;;39423:443::o;37409:113::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;37492:9:::1;:22:::0;;-1:-1:-1;;;;;;37492:22:0::1;-1:-1:-1::0;;;;;37492:22:0;;;::::1;::::0;;;::::1;::::0;;37409:113::o;34191:446::-;34323:4;34340:36;34350:6;34358:9;34369:6;34340:9;:36::i;:::-;34387:220;34410:6;9120:10;34458:138;34514:6;34458:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34458:19:0;;;;;;:11;:19;;;;;;;;9120:10;34458:33;;;;;;;;;;:37;:138::i;:::-;34387:8;:220::i;:::-;-1:-1:-1;34625:4:0;34191:446;;;;;:::o;36944:322::-;37038:7;37096;;37085;:18;;37063:110;;;;-1:-1:-1;;;37063:110:0;;7967:2:1;37063:110:0;;;7949:21:1;8006:2;7986:18;;;7979:30;8045:34;8025:18;;;8018:62;-1:-1:-1;;;8096:18:1;;;8089:40;8146:19;;37063:110:0;7765:406:1;37063:110:0;37184:19;37206:10;:8;:10::i;:::-;37184:32;-1:-1:-1;37234:24:0;:7;37184:32;37234:11;:24::i;:::-;37227:31;36944:322;-1:-1:-1;;;36944:322:0:o;57263:155::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;57377:15:::1;::::0;57369:41:::1;::::0;57337:21:::1;::::0;-1:-1:-1;;;;;57377:15:0::1;::::0;57369:41;::::1;;;::::0;57337:21;;57320:14:::1;57369:41:::0;57320:14;57369:41;57337:21;57377:15;57369:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;57309:109;57263:155::o:0;37999:473::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38079:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;38071:56;;;::::0;-1:-1:-1;;;38071:56:0;;8378:2:1;38071:56:0::1;::::0;::::1;8360:21:1::0;8417:2;8397:18;;;8390:30;8456:25;8436:18;;;8429:53;8499:18;;38071:56:0::1;8176:347:1::0;38071:56:0::1;38143:9;38138:327;38162:9;:16:::0;38158:20;::::1;38138:327;;;38220:7;-1:-1:-1::0;;;;;38204:23:0::1;:9;38214:1;38204:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38204:12:0::1;:23;38200:254;;;38263:9;38273:16:::0;;:20:::1;::::0;38292:1:::1;::::0;38273:20:::1;:::i;:::-;38263:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;38248:9:::1;:12:::0;;-1:-1:-1;;;;;38263:31:0;;::::1;::::0;38258:1;;38248:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;38248:46:0::1;-1:-1:-1::0;;;;;38248:46:0;;::::1;;::::0;;38313:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;38352:11:::1;:20:::0;;;;:28;;-1:-1:-1;;38352:28:0::1;::::0;;38399:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;38399:15:0;;;;;-1:-1:-1;;;;;;38399:15:0::1;::::0;;;;;57369:41:::1;57309:109;57263:155::o:0;38200:254::-:1;38180:3:::0;::::1;::::0;::::1;:::i;:::-;;;;38138:327;;39874:473:::0;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;40111:2:::1;40104:3:::0;40092:9;40082:7;40064:15:::1;40070:9:::0;40064:3;:15:::1;:::i;:::-;:25;;;;:::i;:::-;:37;;;;:::i;:::-;:43;;;;:::i;:::-;:49;;;;40056:91;;;;-1:-1:-1::0;;;40056:91:0::1;;;;;;;:::i;:::-;40158:11;:21:::0;;::::1;40318::::0;;::::1;-1:-1:-1::0;;;40318:21:0::1;-1:-1:-1::0;;;;40274:33:0;;::::1;::::0;::::1;-1:-1:-1::0;;40234:29:0;;::::1;-1:-1:-1::0;;;40234:29:0::1;40274:33:::0;;;;-1:-1:-1;;40190:33:0;;::::1;-1:-1:-1::0;;;40190:33:0::1;-1:-1:-1::0;;40190:33:0;;;40158:21;;;::::1;40190:33:::0;;;;::::1;40274::::0;;;;;;;;;;;::::1;40318:21:::0;;;::::1;::::0;;;::::1;::::0;;39874:473::o;34645:300::-;9120:10;34760:4;34854:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;34854:34:0;;;;;;;;;;34760:4;;34782:133;;34832:7;;34854:50;;34893:10;34854:38;:50::i;35584:668::-;9120:10;35636:14;35699:19;;;:11;:19;;;;;;;;35698:20;35676:114;;;;-1:-1:-1;;;35676:114:0;;9264:2:1;35676:114:0;;;9246:21:1;9303:2;9283:18;;;9276:30;9342:34;9322:18;;;9315:62;-1:-1:-1;;;9393:18:1;;;9386:42;9445:19;;35676:114:0;9062:408:1;35676:114:0;35818:12;35845:18;35878:15;35908:20;35920:7;35908:11;:20::i;:::-;35803:125;;;;;;;35940:15;35962:135;35988:7;36010:4;36029:10;36054:7;36076:10;:8;:10::i;:::-;35962:11;:135::i;:::-;-1:-1:-1;;;;;;;36128:15:0;;;;;;:7;:15;;;;;;35939:158;;-1:-1:-1;36128:28:0;;35939:158;36128:19;:28::i;:::-;-1:-1:-1;;;;;36110:15:0;;;;;;:7;:15;;;;;:46;36177:7;;:20;;36189:7;36177:11;:20::i;:::-;36167:7;:30;36221:10;;:23;;36236:7;36221:14;:23::i;:::-;36208:10;:36;-1:-1:-1;;;;;;35584:668:0:o;38480:111::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38549:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;38549:34:0::1;38579:4;38549:34;::::0;;38480:111::o;36260:676::-;36378:7;36422;;36411;:18;;36403:62;;;;-1:-1:-1;;;36403:62:0;;9677:2:1;36403:62:0;;;9659:21:1;9716:2;9696:18;;;9689:30;9755:33;9735:18;;;9728:61;9806:18;;36403:62:0;9475:355:1;36403:62:0;36493:12;36520:18;36553:15;36583:20;36595:7;36583:11;:20::i;:::-;36478:125;;;;;;;36615:15;36632:23;36661:135;36687:7;36709:4;36728:10;36753:7;36775:10;:8;:10::i;36661:135::-;36614:182;;;;;36814:17;36809:120;;-1:-1:-1;36855:7:0;-1:-1:-1;36848:14:0;;-1:-1:-1;;;36848:14:0;36809:120;36902:15;-1:-1:-1;36895:22:0;;-1:-1:-1;;;;36895:22:0;38966:449;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;39199:2:::1;39192:3:::0;39180:9;39170:7;39152:15:::1;39158:9:::0;39152:3;:15:::1;:::i;:::-;:25;;;;:::i;:::-;:37;;;;:::i;:::-;:43;;;;:::i;:::-;:49;;;;39144:91;;;;-1:-1:-1::0;;;39144:91:0::1;;;;;;;:::i;:::-;39246:7;:17:::0;;::::1;39390::::0;;::::1;-1:-1:-1::0;;;39390:17:0::1;-1:-1:-1::0;;;;39350:29:0;;::::1;::::0;::::1;-1:-1:-1::0;;39314:25:0;;::::1;-1:-1:-1::0;;;39314:25:0::1;39350:29:::0;;;;-1:-1:-1;;39274:29:0;;::::1;-1:-1:-1::0;;;39274:29:0::1;-1:-1:-1::0;;39274:29:0;;;39246:17;;;::::1;39274:29:::0;;;;::::1;39350::::0;;;;;;;;;;;::::1;39390:17:::0;;;::::1;::::0;;;::::1;::::0;;38966:449::o;37659:332::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37740:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;37739:21;37731:61;;;::::0;-1:-1:-1;;;37731:61:0;;10037:2:1;37731:61:0::1;::::0;::::1;10019:21:1::0;10076:2;10056:18;;;10049:30;10115:29;10095:18;;;10088:57;10162:18;;37731:61:0::1;9835:351:1::0;37731:61:0::1;-1:-1:-1::0;;;;;37807:16:0;::::1;37826:1;37807:16:::0;;;:7:::1;:16;::::0;;;;;:20;37803:109:::1;;-1:-1:-1::0;;;;;37883:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;37863:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;37844:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;37803:109:::1;-1:-1:-1::0;;;;;37922:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;37922:27:0::1;37945:4;37922:27:::0;;::::1;::::0;;;37960:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;37960:23:0::1;::::0;;::::1;::::0;;37659:332::o;33385:198::-;-1:-1:-1;;;;;33475:20:0;;33451:7;33475:20;;;:11;:20;;;;;;;;33471:49;;;-1:-1:-1;;;;;;33504:16:0;;;;;:7;:16;;;;;;;33385:198::o;33471:49::-;-1:-1:-1;;;;;33558:16:0;;;;;;:7;:16;;;;;;33538:37;;:19;:37::i;17696:148::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;17803:1:::1;17787:6:::0;;17766:40:::1;::::0;-1:-1:-1;;;;;17787:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17766:40:0;17803:1;;17766:40:::1;17834:1;17817:19:::0;;-1:-1:-1;;;;;;17817:19:0::1;::::0;;17696:148::o;38844:114::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38913:29:0::1;38945:5;38913:29:::0;;;:20:::1;:29;::::0;;;;:37;;-1:-1:-1;;38913:37:0::1;::::0;;38844:114::o;33096:87::-;33135:13;33168:7;33161:14;;;;;:::i;34953:400::-;35073:4;35095:228;9120:10;35145:7;35167:145;35224:15;35167:145;;;;;;;;;;;;;;;;;9120:10;35167:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;35167:34:0;;;;;;;;;;;;:38;:145::i;18750:385::-;18816:14;;-1:-1:-1;;;;;18816:14:0;18834:10;18816:28;18794:113;;;;-1:-1:-1;;;18794:113:0;;10393:2:1;18794:113:0;;;10375:21:1;10432:2;10412:18;;;10405:30;10471:34;10451:18;;;10444:62;-1:-1:-1;;;10522:18:1;;;10515:33;10565:19;;18794:113:0;10191:399:1;18794:113:0;18944:9;;18926:15;:27;18918:77;;;;-1:-1:-1;;;18918:77:0;;10797:2:1;18918:77:0;;;10779:21:1;10836:2;10816:18;;;10809:30;10875:34;10855:18;;;10848:62;-1:-1:-1;;;10926:18:1;;;10919:35;10971:19;;18918:77:0;10595:401:1;18918:77:0;19040:14;;;19032:6;;19011:44;;-1:-1:-1;;;;;19040:14:0;;;;19032:6;;;;-1:-1:-1;;;;;;;;;;;19011:44:0;;19075:14;;;;19066:23;;-1:-1:-1;;;;;;19066:23:0;;;-1:-1:-1;;;;;19075:14:0;;19066:23;;;;19100:27;;;18750:385::o;33591:199::-;33696:4;33718:42;9120:10;33742:9;33753:6;33718:9;:42::i;37276:125::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;37365:15:::1;:28:::0;;-1:-1:-1;;;;;;37365:28:0::1;-1:-1:-1::0;;;;;37365:28:0;;;::::1;::::0;;;::::1;::::0;;37276:125::o;41374:171::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;41451:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;41451:32:0::1;-1:-1:-1::0;;;;41451:32:0;;::::1;;::::0;;41499:38:::1;::::0;::::1;::::0;::::1;::::0;41475:8;2222:14:1;2215:22;2197:41;;2185:2;2170:18;;2057:187;41499:38:0::1;;;;;;;;41374:171:::0;:::o;18452:226::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;18533:6:::1;::::0;;;18516:23;;-1:-1:-1;;;;;;18516:23:0;;::::1;-1:-1:-1::0;;;;;18533:6:0;::::1;18516:23;::::0;;;18550:19:::1;::::0;;18592:22:::1;18610:4:::0;18592:15:::1;:22;:::i;:::-;18580:9;:34:::0;18667:1:::1;18651:6:::0;;18630:40:::1;::::0;-1:-1:-1;;;;;18651:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;18630:40:0;18667:1;;18630:40:::1;18452:226:::0;:::o;40936:211::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;41056:4:::1;41046:7;;:14;;;;:::i;:::-;41026:16;:34;;41018:78;;;;-1:-1:-1::0;;;41018:78:0::1;;;;;;;:::i;:::-;41107:13;:32:::0;40936:211::o;41155:::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;41275:4:::1;41265:7;;:14;;;;:::i;:::-;41245:16;:34;;41237:78;;;;-1:-1:-1::0;;;41237:78:0::1;;;;;;;:::i;:::-;41326:13;:32:::0;41155:211::o;38603:110::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38670:27:0::1;38700:5;38670:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;38670:35:0::1;::::0;;38603:110::o;40503:207::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;40617:4:::1;40607:7;;:14;;;;:::i;:::-;40589;:32;;40581:76;;;;-1:-1:-1::0;;;40581:76:0::1;;;;;;;:::i;:::-;40668:17;:34:::0;40503:207::o;40355:140::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;40446:29:::1;:41:::0;40355:140::o;17998:281::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18101:22:0;::::1;18079:110;;;::::0;-1:-1:-1;;;18079:110:0;;11918:2:1;18079:110:0::1;::::0;::::1;11900:21:1::0;11957:2;11937:18;;;11930:30;11996:34;11976:18;;;11969:62;-1:-1:-1;;;12047:18:1;;;12040:36;12093:19;;18079:110:0::1;11716:402:1::0;18079:110:0::1;18226:6;::::0;;18205:38:::1;::::0;-1:-1:-1;;;;;18205:38:0;;::::1;::::0;18226:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;18205:38:0;::::1;18254:6;:17:::0;;-1:-1:-1;;;;;;18254:17:0::1;-1:-1:-1::0;;;;;18254:17:0;;;::::1;::::0;;;::::1;::::0;;17998:281::o;40722:206::-;17267:6;;-1:-1:-1;;;;;17267:6:0;9120:10;17267:22;17259:67;;;;-1:-1:-1;;;17259:67:0;;;;;;;:::i;:::-;40839:4:::1;40829:7;;:14;;;;:::i;:::-;40810:15;:33;;40802:77;;;;-1:-1:-1::0;;;40802:77:0::1;;;;;;;:::i;:::-;40890:12;:30:::0;40722:206::o;46572:371::-;-1:-1:-1;;;;;46699:19:0;;46691:68;;;;-1:-1:-1;;;46691:68:0;;12325:2:1;46691:68:0;;;12307:21:1;12364:2;12344:18;;;12337:30;12403:34;12383:18;;;12376:62;-1:-1:-1;;;12454:18:1;;;12447:34;12498:19;;46691:68:0;12123:400:1;46691:68:0;-1:-1:-1;;;;;46778:21:0;;46770:68;;;;-1:-1:-1;;;46770:68:0;;12730:2:1;46770:68:0;;;12712:21:1;12769:2;12749:18;;;12742:30;12808:34;12788:18;;;12781:62;-1:-1:-1;;;12859:18:1;;;12852:32;12901:19;;46770:68:0;12528:398:1;46770:68:0;-1:-1:-1;;;;;46851:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;46903:32;;2655:25:1;;;46903:32:0;;2628:18:1;46903:32:0;;;;;;;46572:371;;;:::o;46951:2583::-;-1:-1:-1;;;;;47073:18:0;;47065:68;;;;-1:-1:-1;;;47065:68:0;;13133:2:1;47065:68:0;;;13115:21:1;13172:2;13152:18;;;13145:30;13211:34;13191:18;;;13184:62;-1:-1:-1;;;13262:18:1;;;13255:35;13307:19;;47065:68:0;12931:401:1;47065:68:0;-1:-1:-1;;;;;47152:16:0;;47144:64;;;;-1:-1:-1;;;47144:64:0;;13539:2:1;47144:64:0;;;13521:21:1;13578:2;13558:18;;;13551:30;13617:34;13597:18;;;13590:62;-1:-1:-1;;;13668:18:1;;;13661:33;13711:19;;47144:64:0;13337:399:1;47144:64:0;47236:1;47227:6;:10;47219:64;;;;-1:-1:-1;;;47219:64:0;;13943:2:1;47219:64:0;;;13925:21:1;13982:2;13962:18;;;13955:30;14021:34;14001:18;;;13994:62;-1:-1:-1;;;14072:18:1;;;14065:39;14121:19;;47219:64:0;13741:405:1;47219:64:0;47578:28;47609:24;47627:4;47609:9;:24::i;:::-;47578:55;;47674:17;;47650:20;:41;47646:114;;-1:-1:-1;47731:17:0;;47646:114;47836:29;;47799:66;;;;;;;47894:53;;-1:-1:-1;47931:16:0;;-1:-1:-1;;;47931:16:0;;;;47930:17;47894:53;:91;;;;;47972:13;-1:-1:-1;;;;;47964:21:0;:4;-1:-1:-1;;;;;47964:21:0;;;47894:91;:129;;;;-1:-1:-1;48002:21:0;;-1:-1:-1;;;48002:21:0;;;;47894:129;47876:318;;;48073:29;;48050:52;;48146:36;48161:20;48146:14;:36::i;:::-;-1:-1:-1;;;;;48387:24:0;;48267:12;48387:24;;;:18;:24;;;;;;48282:4;;48387:24;;;:50;;-1:-1:-1;;;;;;48415:22:0;;;;;;:18;:22;;;;;;;;48387:50;48383:98;;;-1:-1:-1;48464:5:0;48383:98;48497:7;48493:914;;;-1:-1:-1;;;;;48526:26:0;;;;;;:20;:26;;;;;;;;48525:27;:56;;;;-1:-1:-1;;;;;;48557:24:0;;;;;;:20;:24;;;;;;;;48556:25;48525:56;48521:875;;;48642:17;;48632:6;:27;;48602:147;;;;-1:-1:-1;;;48602:147:0;;14353:2:1;48602:147:0;;;14335:21:1;14392:2;14372:18;;;14365:30;14431:34;14411:18;;;14404:62;-1:-1:-1;;;14482:18:1;;;14475:44;14536:19;;48602:147:0;14151:410:1;48602:147:0;48782:13;-1:-1:-1;;;;;48774:21:0;:4;-1:-1:-1;;;;;48774:21:0;;48770:396;;;48880:13;;48863;48873:2;48863:9;:13::i;:::-;48854:22;;:6;:22;:::i;:::-;:39;;48820:159;;;;-1:-1:-1;;;48820:159:0;;14768:2:1;48820:159:0;;;14750:21:1;14807:2;14787:18;;;14780:30;14846:34;14826:18;;;14819:62;-1:-1:-1;;;14897:18:1;;;14890:32;14939:19;;48820:159:0;14566:398:1;48820:159:0;49046:12;;49036:6;:22;;49002:144;;;;-1:-1:-1;;;49002:144:0;;15171:2:1;49002:144:0;;;15153:21:1;15210:2;15190:18;;;15183:30;15249:34;15229:18;;;15222:62;-1:-1:-1;;;15300:18:1;;;15293:34;15344:19;;49002:144:0;14969:400:1;49002:144:0;49177:13;-1:-1:-1;;;;;49171:19:0;:2;-1:-1:-1;;;;;49171:19:0;;49167:214;;;49259:13;;49249:6;:23;;49215:146;;;;-1:-1:-1;;;49215:146:0;;15576:2:1;49215:146:0;;;15558:21:1;15615:2;15595:18;;;15588:30;15654:34;15634:18;;;15627:62;-1:-1:-1;;;15705:18:1;;;15698:35;15750:19;;49215:146:0;15374:401:1;49215:146:0;49485:41;49500:4;49506:2;49510:6;49518:7;49485:14;:41::i;:::-;47054:2480;;;46951:2583;;;:::o;5337:226::-;5457:7;5493:12;5485:6;;;;5477:29;;;;-1:-1:-1;;;5477:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5517:9:0;5529:5;5533:1;5529;:5;:::i;:::-;5517:17;5337:226;-1:-1:-1;;;;;5337:226:0:o;43135:164::-;43177:7;43198:15;43215;43234:19;:17;:19::i;:::-;43197:56;;-1:-1:-1;43197:56:0;-1:-1:-1;43271:20:0;43197:56;;43271:11;:20::i;:::-;43264:27;;;;43135:164;:::o;6767:132::-;6825:7;6852:39;6856:1;6859;6852:39;;;;;;;;;;;;;;;;;:3;:39::i;4436:181::-;4494:7;;4526:5;4530:1;4526;:5;:::i;:::-;4514:17;;4555:1;4550;:6;;4542:46;;;;-1:-1:-1;;;4542:46:0;;15982:2:1;4542:46:0;;;15964:21:1;16021:2;16001:18;;;15994:30;16060:29;16040:18;;;16033:57;16107:18;;4542:46:0;15780:351:1;41802:629:0;41903:7;41925;41947;41969;42004:12;42019:24;42035:7;42019:15;:24::i;:::-;42004:39;;42054:18;42075:30;42097:7;42075:21;:30::i;:::-;42054:51;;42116:15;42207:25;42224:7;42207:16;:25::i;:::-;42180:24;42196:7;42180:15;:24::i;:::-;42134:30;42156:7;42134:21;:30::i;:::-;:70;;;;:::i;:::-;:98;;;;:::i;:::-;42116:116;-1:-1:-1;42243:23:0;42269:33;42291:10;42269:17;:7;42281:4;42269:11;:17::i;:::-;:21;;:33::i;:::-;42243:59;-1:-1:-1;42331:28:0;42243:59;42351:7;42331:19;:28::i;:::-;42313:46;42397:4;;-1:-1:-1;42403:10:0;;-1:-1:-1;42403:10:0;-1:-1:-1;41802:629:0;;-1:-1:-1;;;41802:629:0:o;42439:688::-;42664:7;;;;42761:24;:7;42773:11;42761;:24::i;:::-;42743:42;-1:-1:-1;42796:12:0;42811:21;:4;42820:11;42811:8;:21::i;:::-;42796:36;-1:-1:-1;42843:18:0;42864:27;:10;42879:11;42864:14;:27::i;:::-;42843:48;-1:-1:-1;42902:15:0;42920:24;:7;42932:11;42920;:24::i;:::-;42902:42;-1:-1:-1;42955:23:0;42981:88;42902:42;42981:61;43031:10;42981:61;:7;43007:4;42981:25;:31::i;:88::-;43088:7;;;;-1:-1:-1;43114:4:0;;-1:-1:-1;42439:688:0;;-1:-1:-1;;;;;;;;;42439:688:0:o;4899:136::-;4957:7;4984:43;4988:1;4991;4984:43;;;;;;;;;;;;;;;;;:3;:43::i;49542:1896::-;31273:16;:23;;-1:-1:-1;;;;31273:23:0;-1:-1:-1;;;31273:23:0;;;49904:7:::1;:11:::0;49878:6:::1;:10:::0;31273:23;;49904:11:::1;-1:-1:-1::0;;;49904:11:0;;::::1;::::0;::::1;::::0;49878:10;;::::1;::::0;::::1;::::0;-1:-1:-1;;;49845:17:0;;::::1;::::0;::::1;::::0;49813:16;;::::1;::::0;::::1;::::0;-1:-1:-1;;;49782:15:0;;::::1;::::0;::::1;::::0;49752:14;;::::1;::::0;::::1;::::0;49687:49:::1;::::0;49719:17;;;;::::1;::::0;::::1;::::0;49687:16;::::1;;:49;:::i;:::-;:79;;;;:::i;:::-;:110;;;;:::i;:::-;:142;;;;:::i;:::-;:175;;;;:::i;:::-;:201;;;;:::i;:::-;:228;;;;:::i;:::-;49686:234;::::0;49919:1:::1;49686:234;:::i;:::-;50009:7;:17:::0;49990:6:::1;:16:::0;49664:256:::1;::::0;;::::1;::::0;-1:-1:-1;49931:32:0::1;::::0;49664:256;;49990:36:::1;::::0;50009:17;;;;::::1;::::0;::::1;::::0;49990:16;;::::1;;:36;:::i;:::-;49967:60;::::0;::::1;;:6:::0;:60:::1;:::i;:::-;49966:76;;;;:::i;:::-;50121:7;:15:::0;50104:6:::1;:14:::0;49931:111;;-1:-1:-1;50053:23:0::1;::::0;50146:11;;50104:32:::1;::::0;50121:15:::1;-1:-1:-1::0;;;50121:15:0;;;::::1;::::0;::::1;::::0;50104:14;;::::1;;:32;:::i;:::-;50081:56;::::0;::::1;;:6:::0;:56:::1;:::i;:::-;50080:62;::::0;50141:1:::1;50080:62;:::i;:::-;50079:78;;;;:::i;:::-;50205:13;::::0;50053:104;;-1:-1:-1;50168:68:0::1;::::0;50198:4:::1;::::0;-1:-1:-1;;;;;50205:13:0::1;50053:104:::0;50168:21:::1;:68::i;:::-;50247:14;50274:42;50301:15:::0;50274:24;:42:::1;:::i;:::-;50264:53;::::0;:6;:53:::1;:::i;:::-;50247:70:::0;-1:-1:-1;50363:21:0::1;50397:24;50247:70:::0;50397:16:::1;:24::i;:::-;50434:20;50457:38;50481:14:::0;50457:21:::1;:38;:::i;:::-;50591:7;:17:::0;50572:6:::1;:16:::0;50434:61;;-1:-1:-1;50506:19:0::1;::::0;50572:36:::1;::::0;50591:17:::1;::::0;;;;::::1;::::0;::::1;::::0;50572:16;;;::::1;;:36;:::i;:::-;50557:52;::::0;::::1;;:11:::0;:52:::1;:::i;:::-;50528:82;::::0;:12;:82:::1;:::i;:::-;50700:7;:17:::0;50681:6:::1;:16:::0;50506:104;;-1:-1:-1;50621:29:0::1;::::0;50681:36:::1;::::0;50700:17:::1;::::0;;;;::::1;::::0;::::1;::::0;50681:16;;;::::1;;:36;:::i;:::-;50653:65;::::0;::::1;;:11:::0;:65:::1;:::i;:::-;50621:97:::0;-1:-1:-1;50735:25:0;;50731:160:::1;;50818:61;50831:24;50857:21;50818:12;:61::i;:::-;51024:7;:17:::0;51005:6:::1;:16:::0;50937:20:::1;::::0;51005:36:::1;::::0;51024:17:::1;-1:-1:-1::0;;;51024:17:0;;;::::1;::::0;::::1;::::0;51005:16;;::::1;;:36;:::i;:::-;50960:82;;:28;:11:::0;50987:1:::1;50960:28;:::i;:::-;:82;;;;:::i;:::-;51102:7;:11:::0;51089:6:::1;:10:::0;50937:105;;-1:-1:-1;51053:14:0::1;::::0;51130:21:::1;::::0;51089:24:::1;::::0;51102:11:::1;-1:-1:-1::0;;;51102:11:0;;;::::1;::::0;::::1;::::0;51089:10;;::::1;;:24;:::i;:::-;51070:44;;:15;:11:::0;51084:1:::1;51070:15;:::i;:::-;:44;;;;:::i;:::-;:81;:178;;51236:7;:11:::0;51223:6:::1;:10:::0;:24:::1;::::0;51236:11:::1;-1:-1:-1::0;;;51236:11:0;;;::::1;::::0;::::1;::::0;51223:10;;;::::1;;:24;:::i;:::-;51204:44;;:15;:11:::0;51218:1:::1;51204:15;:::i;:::-;:44;;;;:::i;:::-;51070:178;;;51167:21;51070:178;51053:195:::0;-1:-1:-1;51265:16:0;;51261:89:::1;;51299:15;::::0;51298:40:::1;::::0;-1:-1:-1;;;;;51299:15:0;;::::1;::::0;51298:40;::::1;;;::::0;51325:12;;51299:15:::1;51298:40:::0;51299:15;51298:40;51325:12;51299:15;51298:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;51261:89;51366:10:::0;;51362:69:::1;;51393:9;::::0;:26:::1;::::0;-1:-1:-1;;;;;51393:9:0;;::::1;::::0;:26;::::1;;;::::0;51412:6;;51393:9:::1;:26:::0;:9;:26;51412:6;51393:9;:26;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;51362:69;-1:-1:-1::0;;31319:16:0;:24;;-1:-1:-1;;;;31319:24:0;;;-1:-1:-1;;;;;;;;;49542:1896:0:o;52653:1094::-;52808:7;52804:302;;;52832:14;45454:7;:11;;-1:-1:-1;;45555:11:0;;;45411:163;52832:14;52875:13;-1:-1:-1;;;;;52865:23:0;:6;-1:-1:-1;;;;;52865:23:0;;52861:234;;;45889:6;:10;45879:7;:20;;45889:10;;;;-1:-1:-1;;45910:32:0;;;;;;;45926:16;;;;;;45910:32;;-1:-1:-1;;45989:32:0;-1:-1:-1;;;45964:14:0;;;;;45953:25;-1:-1:-1;;;;45989:32:0;;-1:-1:-1;;;46005:16:0;;;;;45989:32;;-1:-1:-1;;;;46032:20:0;-1:-1:-1;;;46042:10:0;;;;;;;;46032:20;;;;;;;;;52861:234;;;52969:13;-1:-1:-1;;;;;52956:26:0;:9;-1:-1:-1;;;;;52956:26:0;;52952:143;;;46120:7;:11;46110:7;:21;;46120:11;;;;-1:-1:-1;;46142:33:0;;;;;;;46158:17;;;;;;46142:33;;-1:-1:-1;;46223:33:0;-1:-1:-1;;;46197:15:0;;;;;46186:26;-1:-1:-1;;;;46223:33:0;;-1:-1:-1;;;46239:17:0;;;;;46223:33;;-1:-1:-1;;;;46267:21:0;-1:-1:-1;;;46277:11:0;;;;;;;;46267:21;;;;;;;;;52861:234;;52952:143;45638:11;:15;45628:7;:25;;45638:15;;;;-1:-1:-1;;45664:37:0;;;;;;;45680:21;;;;;;45664:37;;-1:-1:-1;;45753:37:0;-1:-1:-1;;;45723:19:0;;;;;45712:30;-1:-1:-1;;;;45753:37:0;;-1:-1:-1;;;45769:21:0;;;;;45753:37;;-1:-1:-1;;;;45801:25:0;-1:-1:-1;;;45811:15:0;;;;;;;;45801:25;;;;;;;;;53066:13;-1:-1:-1;;;;;53122:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;53146:22:0;;;;;;:11;:22;;;;;;;;53145:23;53122:46;53118:597;;;53185:48;53207:6;53215:9;53226:6;53185:21;:48::i;:::-;53118:597;;;-1:-1:-1;;;;;53256:19:0;;;;;;:11;:19;;;;;;;;53255:20;:46;;;;-1:-1:-1;;;;;;53279:22:0;;;;;;:11;:22;;;;;;;;53255:46;53251:464;;;53318:46;53338:6;53346:9;53357:6;53318:19;:46::i;53251:464::-;-1:-1:-1;;;;;53387:19:0;;;;;;:11;:19;;;;;;;;53386:20;:47;;;;-1:-1:-1;;;;;;53411:22:0;;;;;;:11;:22;;;;;;;;53410:23;53386:47;53382:333;;;53450:44;53468:6;53476:9;53487:6;53450:17;:44::i;53382:333::-;-1:-1:-1;;;;;53516:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;53539:22:0;;;;;;:11;:22;;;;;;;;53516:45;53512:203;;;53578:48;53600:6;53608:9;53619:6;53578:21;:48::i;53512:203::-;53659:44;53677:6;53685:9;53696:6;53659:17;:44::i;:::-;53725:14;45454:7;:11;;-1:-1:-1;;45555:11:0;;;45411:163;53725:14;52653:1094;;;;:::o;43307:605::-;43405:7;;43441;;43358;;;;;43459:338;43483:9;:16;43479:20;;43459:338;;;43567:7;43543;:21;43551:9;43561:1;43551:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43551:12:0;43543:21;;;;;;;;;;;;;:31;;:83;;;43619:7;43595;:21;43603:9;43613:1;43603:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43603:12:0;43595:21;;;;;;;;;;;;;:31;43543:83;43521:146;;;43650:7;;43659;;43642:25;;;;;;;43307:605;;:::o;43521:146::-;43692:34;43704:7;:21;43712:9;43722:1;43712:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43712:12:0;43704:21;;;;;;;;;;;;;43692:7;;:11;:34::i;:::-;43682:44;;43751:34;43763:7;:21;43771:9;43781:1;43771:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43771:12:0;43763:21;;;;;;;;;;;;;43751:7;;:11;:34::i;:::-;43741:44;-1:-1:-1;43501:3:0;;;;:::i;:::-;;;;43459:338;;;-1:-1:-1;43833:7:0;;43821;;:20;;:11;:20::i;:::-;43811:7;:30;43807:61;;;43851:7;;43860;;43843:25;;;;;;43307:605;;:::o;43807:61::-;43887:7;;43896;;-1:-1:-1;43307:605:0;-1:-1:-1;43307:605:0:o;7394:312::-;7514:7;7549:12;7542:5;7534:28;;;;-1:-1:-1;;;7534:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7573:9:0;7585:5;7589:1;7585;:5;:::i;44631:130::-;44734:7;;44695;;44722:31;;44747:5;;44722:20;;:7;;44734;;44722:11;:20::i;:::-;:24;;:31::i;44769:174::-;44910:13;;44866:7;;44898:37;;44929:5;;44898:26;;:7;;44910:13;;;;;44898:11;:26::i;45271:132::-;45375:8;;45336:7;;45363:32;;45389:5;;45363:21;;:7;;-1:-1:-1;;;45375:8:0;;;;45363:11;:21::i;45133:130::-;45236:7;;45197;;45224:31;;45249:5;;45224:20;;:7;;-1:-1:-1;;;45236:7:0;;;;45224:11;:20::i;44951:174::-;45092:13;;45048:7;;45080:37;;45111:5;;45080:26;;:7;;-1:-1:-1;;;45092:13:0;;;;5821:471;5879:7;6124:6;6120:47;;-1:-1:-1;6154:1:0;6147:8;;6120:47;6179:9;6191:5;6195:1;6191;:5;:::i;:::-;6179:17;-1:-1:-1;6224:1:0;6215:5;6219:1;6179:17;6215:5;:::i;:::-;:10;6207:56;;;;-1:-1:-1;;;6207:56:0;;16774:2:1;6207:56:0;;;16756:21:1;16813:2;16793:18;;;16786:30;16852:34;16832:18;;;16825:62;-1:-1:-1;;;16903:18:1;;;16896:31;16944:19;;6207:56:0;16572:397:1;56321:934:0;56472:23;56510:12;56537:18;56570:15;56599:20;56611:7;56599:11;:20::i;:::-;56457:162;;;;;;;;56631:15;56648:23;56673:12;56689:135;56715:7;56737:4;56756:10;56781:7;56803:10;:8;:10::i;56689:135::-;-1:-1:-1;;;;;56855:15:0;;;;;;:7;:15;;;;;;56630:194;;-1:-1:-1;56630:194:0;;-1:-1:-1;56630:194:0;-1:-1:-1;56855:28:0;;56875:7;56855:19;:28::i;:::-;-1:-1:-1;;;;;56837:15:0;;;;;;:7;:15;;;;;;;;:46;;;;56912:7;:15;;;;:28;;56932:7;56912:19;:28::i;:::-;-1:-1:-1;;;;;56894:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;56972:18;;;;;:7;:18;;;;;:39;;56995:15;56972:22;:39::i;:::-;-1:-1:-1;;;;;56951:18:0;;;;;;:7;:18;;;;;;;;:60;;;;57043:7;:18;;;;:39;;57066:15;57043:22;:39::i;:::-;-1:-1:-1;;;;;57022:18:0;;;;;;:7;:18;;;;;:60;57093:26;57108:10;57093:14;:26::i;:::-;57130:23;57145:7;57130:14;:23::i;:::-;57164;57176:4;57182;57164:11;:23::i;:::-;57220:9;-1:-1:-1;;;;;57203:44:0;57212:6;-1:-1:-1;;;;;57203:44:0;;57231:15;57203:44;;;;2655:25:1;;2643:2;2628:18;;2509:177;57203:44:0;;;;;;;;56446:809;;;;;;;56321:934;;;:::o;51446:589::-;51596:16;;;51610:1;51596:16;;;;;;;;51572:21;;51596:16;;;;;;;;;;-1:-1:-1;51596:16:0;51572:40;;51641:4;51623;51628:1;51623:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;51623:23:0;;;-1:-1:-1;;;;;51623:23:0;;;;;51667:15;-1:-1:-1;;;;;51667:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51657:4;51662:1;51657:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;51657:32:0;;;-1:-1:-1;;;;;51657:32:0;;;;;51702:62;51719:4;51734:15;51752:11;51702:8;:62::i;:::-;51803:224;;-1:-1:-1;;;51803:224:0;;-1:-1:-1;;;;;51803:15:0;:66;;;;:224;;51884:11;;51910:1;;51954:4;;51981;;52001:15;;51803:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52043:529;52191:62;52208:4;52223:15;52241:11;52191:8;:62::i;:::-;52508:14;;52296:268;;-1:-1:-1;;;52296:268:0;;52368:4;52296:268;;;18696:34:1;18746:18;;;18739:34;;;52414:1:0;18789:18:1;;;18782:34;;;18832:18;;;18825:34;-1:-1:-1;;;;;52508:14:0;;;18875:19:1;;;18868:44;52538:15:0;18928:19:1;;;18921:35;52296:15:0;:31;;;;;;52335:9;;18630:19:1;;52296:268:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;55450:863::-;55601:23;55639:12;55666:18;55699:15;55728:20;55740:7;55728:11;:20::i;:::-;55586:162;;;;;;;;55760:15;55777:23;55802:12;55818:135;55844:7;55866:4;55885:10;55910:7;55932:10;:8;:10::i;55818:135::-;-1:-1:-1;;;;;55984:15:0;;;;;;:7;:15;;;;;;55759:194;;-1:-1:-1;55759:194:0;;-1:-1:-1;55759:194:0;-1:-1:-1;55984:28:0;;56004:7;55984:19;:28::i;:::-;-1:-1:-1;;;;;55966:15:0;;;;;;:7;:15;;;;;;;;:46;;;;56041:7;:15;;;;:28;;56061:7;56041:19;:28::i;:::-;-1:-1:-1;;;;;56023:15:0;;;;;;;:7;:15;;;;;;:46;;;;56101:18;;;;;;;:39;;56124:15;56101:22;:39::i;54567:875::-;54716:23;54754:12;54781:18;54814:15;54843:20;54855:7;54843:11;:20::i;:::-;54701:162;;;;;;;;54875:15;54892:23;54917:12;54933:135;54959:7;54981:4;55000:10;55025:7;55047:10;:8;:10::i;54933:135::-;-1:-1:-1;;;;;55099:15:0;;;;;;:7;:15;;;;;;54874:194;;-1:-1:-1;54874:194:0;;-1:-1:-1;54874:194:0;-1:-1:-1;55099:28:0;;54874:194;55099:19;:28::i;53755:802::-;53902:23;53940:12;53967:18;54000:15;54029:20;54041:7;54029:11;:20::i;:::-;53887:162;;;;;;;;54061:15;54078:23;54103:12;54119:135;54145:7;54167:4;54186:10;54211:7;54233:10;:8;:10::i;54119:135::-;-1:-1:-1;;;;;54285:15:0;;;;;;:7;:15;;;;;;54060:194;;-1:-1:-1;54060:194:0;;-1:-1:-1;54060:194:0;-1:-1:-1;54285:28:0;;54060:194;54285:19;:28::i;43920:355::-;43983:19;44005:10;:8;:10::i;:::-;43983:32;-1:-1:-1;44026:18:0;44047:27;:10;43983:32;44047:14;:27::i;:::-;44126:4;44110:22;;;;:7;:22;;;;;;44026:48;;-1:-1:-1;44110:38:0;;44026:48;44110:26;:38::i;:::-;44101:4;44085:22;;;;:7;:22;;;;;;;;:63;;;;44163:11;:26;;;;;;44159:108;;;44245:4;44229:22;;;;:7;:22;;;;;;:38;;44256:10;44229:26;:38::i;:::-;44220:4;44204:22;;;;:7;:22;;;;;:63;44159:108;43972:303;;43920:355;:::o;41647:147::-;41725:7;;:17;;41737:4;41725:11;:17::i;:::-;41715:7;:27;41766:10;;:20;;41781:4;41766:14;:20::i;:::-;41753:10;:33;-1:-1:-1;;41647:147:0:o;14:139:1:-;-1:-1:-1;;;;;97:31:1;;87:42;;77:70;;143:1;140;133:12;77:70;14:139;:::o;158:263::-;225:6;278:2;266:9;257:7;253:23;249:32;246:52;;;294:1;291;284:12;246:52;333:9;320:23;352:39;385:5;352:39;:::i;426:472::-;503:6;511;519;572:2;560:9;551:7;547:23;543:32;540:52;;;588:1;585;578:12;540:52;627:9;614:23;646:39;679:5;646:39;:::i;:::-;704:5;-1:-1:-1;761:2:1;746:18;;733:32;774:41;733:32;774:41;:::i;:::-;426:472;;834:7;;-1:-1:-1;;;888:2:1;873:18;;;;860:32;;426:472::o;1127:597::-;1239:4;1268:2;1297;1286:9;1279:21;1329:6;1323:13;1372:6;1367:2;1356:9;1352:18;1345:34;1397:1;1407:140;1421:6;1418:1;1415:13;1407:140;;;1516:14;;;1512:23;;1506:30;1482:17;;;1501:2;1478:26;1471:66;1436:10;;1407:140;;;1565:6;1562:1;1559:13;1556:91;;;1635:1;1630:2;1621:6;1610:9;1606:22;1602:31;1595:42;1556:91;-1:-1:-1;1708:2:1;1687:15;-1:-1:-1;;1683:29:1;1668:45;;;;1715:2;1664:54;;1127:597;-1:-1:-1;;;1127:597:1:o;1729:323::-;1797:6;1805;1858:2;1846:9;1837:7;1833:23;1829:32;1826:52;;;1874:1;1871;1864:12;1826:52;1913:9;1900:23;1932:39;1965:5;1932:39;:::i;:::-;1990:5;2042:2;2027:18;;;;2014:32;;-1:-1:-1;;;1729:323:1:o;2691:159::-;2758:20;;2818:6;2807:18;;2797:29;;2787:57;;2840:1;2837;2830:12;2787:57;2691:159;;;:::o;2855:474::-;2945:6;2953;2961;2969;2977;3030:3;3018:9;3009:7;3005:23;3001:33;2998:53;;;3047:1;3044;3037:12;2998:53;3070:28;3088:9;3070:28;:::i;:::-;3060:38;;3117:37;3150:2;3139:9;3135:18;3117:37;:::i;:::-;3107:47;;3173:37;3206:2;3195:9;3191:18;3173:37;:::i;:::-;3163:47;;3229:37;3262:2;3251:9;3247:18;3229:37;:::i;:::-;3219:47;;3285:38;3318:3;3307:9;3303:19;3285:38;:::i;:::-;3275:48;;2855:474;;;;;;;;:::o;4097:180::-;4156:6;4209:2;4197:9;4188:7;4184:23;4180:32;4177:52;;;4225:1;4222;4215:12;4177:52;-1:-1:-1;4248:23:1;;4097:180;-1:-1:-1;4097:180:1:o;4471:118::-;4557:5;4550:13;4543:21;4536:5;4533:32;4523:60;;4579:1;4576;4569:12;4594:309;4659:6;4667;4720:2;4708:9;4699:7;4695:23;4691:32;4688:52;;;4736:1;4733;4726:12;4688:52;4772:9;4759:23;4749:33;;4832:2;4821:9;4817:18;4804:32;4845:28;4867:5;4845:28;:::i;:::-;4892:5;4882:15;;;4594:309;;;;;:::o;5116:241::-;5172:6;5225:2;5213:9;5204:7;5200:23;5196:32;5193:52;;;5241:1;5238;5231:12;5193:52;5280:9;5267:23;5299:28;5321:5;5299:28;:::i;5362:404::-;5430:6;5438;5491:2;5479:9;5470:7;5466:23;5462:32;5459:52;;;5507:1;5504;5497:12;5459:52;5546:9;5533:23;5565:39;5598:5;5565:39;:::i;:::-;5623:5;-1:-1:-1;5680:2:1;5665:18;;5652:32;5693:41;5652:32;5693:41;:::i;5771:356::-;5973:2;5955:21;;;5992:18;;;5985:30;6051:34;6046:2;6031:18;;6024:62;6118:2;6103:18;;5771:356::o;6411:245::-;6478:6;6531:2;6519:9;6510:7;6506:23;6502:32;6499:52;;;6547:1;6544;6537:12;6499:52;6579:9;6573:16;6598:28;6620:5;6598:28;:::i;6661:380::-;6740:1;6736:12;;;;6783;;;6804:61;;6858:4;6850:6;6846:17;6836:27;;6804:61;6911:2;6903:6;6900:14;6880:18;6877:38;6874:161;;;6957:10;6952:3;6948:20;6945:1;6938:31;6992:4;6989:1;6982:15;7020:4;7017:1;7010:15;6874:161;;6661:380;;;:::o;7046:127::-;7107:10;7102:3;7098:20;7095:1;7088:31;7138:4;7135:1;7128:15;7162:4;7159:1;7152:15;7178:224;7217:3;7245:6;7278:2;7275:1;7271:10;7308:2;7305:1;7301:10;7339:3;7335:2;7331:12;7326:3;7323:21;7320:47;;;7347:18;;:::i;:::-;7383:13;;7178:224;-1:-1:-1;;;;7178:224:1:o;7407:353::-;7609:2;7591:21;;;7648:2;7628:18;;;7621:30;7687:31;7682:2;7667:18;;7660:59;7751:2;7736:18;;7407:353::o;8528:127::-;8589:10;8584:3;8580:20;8577:1;8570:31;8620:4;8617:1;8610:15;8644:4;8641:1;8634:15;8660:125;8700:4;8728:1;8725;8722:8;8719:34;;;8733:18;;:::i;:::-;-1:-1:-1;8770:9:1;;8660:125::o;8790:127::-;8851:10;8846:3;8842:20;8839:1;8832:31;8882:4;8879:1;8872:15;8906:4;8903:1;8896:15;8922:135;8961:3;-1:-1:-1;;8982:17:1;;8979:43;;;9002:18;;:::i;:::-;-1:-1:-1;9049:1:1;9038:13;;8922:135::o;11001:128::-;11041:3;11072:1;11068:6;11065:1;11062:13;11059:39;;;11078:18;;:::i;:::-;-1:-1:-1;11114:9:1;;11001:128::o;11134:217::-;11174:1;11200;11190:132;;11244:10;11239:3;11235:20;11232:1;11225:31;11279:4;11276:1;11269:15;11307:4;11304:1;11297:15;11190:132;-1:-1:-1;11336:9:1;;11134:217::o;11356:355::-;11558:2;11540:21;;;11597:2;11577:18;;;11570:30;11636:33;11631:2;11616:18;;11609:61;11702:2;11687:18;;11356:355::o;16136:258::-;16175:7;16207:6;16240:2;16237:1;16233:10;16270:2;16267:1;16263:10;16326:3;16322:2;16318:12;16313:3;16310:21;16303:3;16296:11;16289:19;16285:47;16282:73;;;16335:18;;:::i;:::-;16375:13;;16136:258;-1:-1:-1;;;;16136:258:1:o;16399:168::-;16439:7;16505:1;16501;16497:6;16493:14;16490:1;16487:21;16482:1;16475:9;16468:17;16464:45;16461:71;;;16512:18;;:::i;:::-;-1:-1:-1;16552:9:1;;16399:168::o;17106:259::-;17176:6;17229:2;17217:9;17208:7;17204:23;17200:32;17197:52;;;17245:1;17242;17235:12;17197:52;17277:9;17271:16;17296:39;17329:5;17296:39;:::i;17370:980::-;17632:4;17680:3;17669:9;17665:19;17711:6;17700:9;17693:25;17737:2;17775:6;17770:2;17759:9;17755:18;17748:34;17818:3;17813:2;17802:9;17798:18;17791:31;17842:6;17877;17871:13;17908:6;17900;17893:22;17946:3;17935:9;17931:19;17924:26;;17985:2;17977:6;17973:15;17959:29;;18006:1;18016:195;18030:6;18027:1;18024:13;18016:195;;;18095:13;;-1:-1:-1;;;;;18091:39:1;18079:52;;18186:15;;;;18151:12;;;;18127:1;18045:9;18016:195;;;-1:-1:-1;;;;;;;18267:32:1;;;;18262:2;18247:18;;18240:60;-1:-1:-1;;;18331:3:1;18316:19;18309:35;18228:3;17370:980;-1:-1:-1;;;17370:980:1:o;18967:306::-;19055:6;19063;19071;19124:2;19112:9;19103:7;19099:23;19095:32;19092:52;;;19140:1;19137;19130:12;19092:52;19169:9;19163:16;19153:26;;19219:2;19208:9;19204:18;19198:25;19188:35;;19263:2;19252:9;19248:18;19242:25;19232:35;;18967:306;;;;;:::o
Swarm Source
ipfs://77801296e0742bc96d19c892bdca3d228f34b5b887b47d9cc3ee1cbc8f4c0f7b
[ 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.