Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000,000 $MP
Holders
476
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
2,373,573.288461683500408589 $MPValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
METAPETS
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-18 */ pragma solidity ^0.8.10; // SPDX-License-Identifier: MIT interface IERC20 { /** * @dev Returns the total tokens supply */ 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); } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ 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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { 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; // msg.data is used to handle array, bytes, string } } /** * @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. * * 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. * * * 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() external 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) external virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function getUnlockTime() external view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) external 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() external virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(block.timestamp > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; _previousOwner = address(0); } } // pragma solidity >=0.5.0; interface IUniSwapFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function createPair(address tokenA, address tokenB) external returns (address pair); } // pragma solidity >=0.6.2; interface IUniSwapRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract METAPETS is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _tOwned; // total Owned tokens mapping (address => mapping (address => uint256)) private _allowances; // allowed allowance for spender mapping (address => bool) public isExcludedFromAntiWhale; // Limits how many tokens can an address hold mapping (address => bool) public isExcludedFromFee; // excluded address from all fee mapping (address => uint256) private _transactionCheckpoint; mapping(address => bool) public isExcludedFromTransactionCoolDown; // Address to be excluded from transaction cooldown uint256 private _transactionCoolTime = 120; //Cool down time between each transaction per address mapping (address => bool) public isBlacklisted; // blocks an address from buy and selling address payable public maintainanceAddress = payable(0x71d2EBB87c1b8be5d7527b55c63e27312494D361); // Maintainance Address address payable public developmentAddress = payable(0x57C7CB16A480232CC479D85A3c962e826FA0f3C3); // Development Address address payable public marketingAddress = payable(0x80F37688dD7850ac3B5884066C03897d9fF5cA0c); // Marketing Address string private _name = "Meta Pets"; //token name string private _symbol = "$MP"; // token symbol uint8 private _decimals = 18; // 1 token can be divided into 1e_decimals parts uint256 private _tTotal = 1000000 * 10**6 * 10**_decimals; // All fees are with one decimal value. so if you want 0.5 set value to 5, for 10 set 100. so on... // Below Fees to be deducted and sent as ETH uint256 public liquidityFee = 20; // actual liquidity fee 2% uint256 public marketingFee = 60; // marketing fee 6% uint256 public developmentFee = 30; // development fee 3% uint256 public maintainanceFee = 10; // Project Maintainance fee 1% uint256 public sellExtraFee = 20; // extra fee on sell 2%. uint256 private _totalFee =liquidityFee.add(marketingFee).add(developmentFee).add(maintainanceFee); // Liquidity + Marketing + Development + Mainitainance fee on each transaction uint256 private _previousTotalFee = _totalFee; // restore old fees bool public antiBotEnabled = true; //enables anti bot restrictions(max txn amount, max wallet holding transaction cooldown) IUniSwapRouter public uniSwapRouter; // uniSwap router assiged using address address public uniSwapPair; // for creating WETH pair with our token bool inSwapAndLiquify; // after each successfull swapandliquify disable the swapandliquify bool public swapAndLiquifyEnabled = true; // set auto swap to ETH and liquify collected liquidity fee uint256 public maxTxnAmount = 1000 * 10**6 * 10**_decimals; // max allowed tokens tranfer per transaction uint256 public minTokensSwapToAndTransferTo = 500 * 10**6 * 10**_decimals; // min token liquidity fee collected before swapandLiquify uint256 public maxTokensPerAddress = 2000 * 10**6 * 10**_decimals; // Max number of tokens that an address can hold event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); //event fire min token liquidity fee collected before swapandLiquify event SwapAndLiquifyEnabledUpdated(bool enabled); // event fire set auto swap to ETH and liquify collected liquidity fee event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqiudity ); // fire event how many tokens were swapedandLiquified modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } // modifier to after each successfull swapandliquify disable the swapandliquify constructor () { _tOwned[_msgSender()] = _tTotal; // assigning the max token to owner's address IUniSwapRouter _uniSwapRouter = IUniSwapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniSwap pair for this new token uniSwapPair = IUniSwapFactory(_uniSwapRouter.factory()) .createPair(address(this), _uniSwapRouter.WETH()); // set the rest of the contract variables uniSwapRouter = _uniSwapRouter; //exclude owner and this contract from fee isExcludedFromFee[owner()] = true; isExcludedFromFee[address(this)] = true; isExcludedFromFee[marketingAddress] = true; isExcludedFromFee[developmentAddress] = true; isExcludedFromFee[maintainanceAddress] = true; //Exclude's below addresses from per account tokens limit isExcludedFromAntiWhale[owner()] = true; isExcludedFromAntiWhale[uniSwapPair] = true; isExcludedFromAntiWhale[address(this)] = true; isExcludedFromAntiWhale[marketingAddress] = true; isExcludedFromAntiWhale[developmentAddress] = true; isExcludedFromAntiWhale[maintainanceAddress] = true; isExcludedFromAntiWhale[address(_uniSwapRouter)] = true; //Exclude's below addresses from transaction cooldown isExcludedFromTransactionCoolDown[owner()] = true; isExcludedFromTransactionCoolDown[uniSwapPair] = true; isExcludedFromTransactionCoolDown[address(this)] = true; isExcludedFromTransactionCoolDown[marketingAddress] = true; isExcludedFromTransactionCoolDown[developmentAddress] = true; isExcludedFromTransactionCoolDown[maintainanceAddress] = true; isExcludedFromTransactionCoolDown[address(_uniSwapRouter)] = 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) { return _tOwned[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]; } /** * @dev approves allowance of a spender */ function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev transfers from a sender to receipent with subtracting spenders allowance with each successfull transfer */ 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; } /** * @dev approves allowance of a spender should set it to zero first than increase */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev decrease allowance of spender that it can spend on behalf of owner */ 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; } /** * @dev exclude an address from fee */ function excludeFromFee(address account) external onlyOwner { isExcludedFromFee[account] = true; } /** * @dev include an address for fee */ function includeInFee(address account) external onlyOwner { isExcludedFromFee[account] = false; } /** * @dev exclude an address from per address tokens limit */ function excludedFromAntiWhale(address account) external onlyOwner { isExcludedFromAntiWhale[account] = true; } /** * @dev include an address in per address tokens limit */ function includeInAntiWhale(address account) external onlyOwner { isExcludedFromAntiWhale[account] = false; } /** * @dev set's Development fee percentage */ function setDevelopmentFeePercent(uint256 Fee) external onlyOwner { developmentFee = Fee; _totalFee = liquidityFee.add(marketingFee).add(developmentFee).add(maintainanceFee); } /** * @dev set's marketing fee percentage */ function setMarketingFeePercent(uint256 Fee) external onlyOwner { marketingFee = Fee; _totalFee = liquidityFee.add(marketingFee).add(developmentFee).add(maintainanceFee); } /** * @dev set's Maintainance fee percentage */ function setMaintainanceFeePercent(uint256 Fee) external onlyOwner { maintainanceFee = Fee; _totalFee = liquidityFee.add(marketingFee).add(developmentFee).add(maintainanceFee); } /** * @dev set's liquidity fee percentage */ function setLiquidityFeePercent(uint256 Fee) external onlyOwner { liquidityFee = Fee; _totalFee = liquidityFee.add(marketingFee).add(developmentFee).add(maintainanceFee); } /** * @dev set's sell extra fee percentage */ function setSellExtraFeePercent(uint256 Fee) external onlyOwner { sellExtraFee = Fee; } /** * @dev set's max amount of tokens percentage * that can be transfered in each transaction from an address */ function setMaxTxnTokens(uint256 maxTxnTokens) external onlyOwner { maxTxnAmount = maxTxnTokens.mul( 10**_decimals ); } /** * @dev set's max amount of tokens * that an address can hold */ function setMaxTokenPerAddress(uint256 maxTokens) external onlyOwner { maxTokensPerAddress = maxTokens.mul( 10**_decimals ); } /** * @dev set's minimmun amount of tokens required * before swaped and ETH send to wallet * same value will be used for auto swapandliquifiy threshold */ function setMinTokensSwapAndTransfer(uint256 minAmount) external onlyOwner { minTokensSwapToAndTransferTo = minAmount.mul( 10 ** _decimals); } /** * @dev set's marketing address */ function setMarketingFeeAddress(address payable wallet) external onlyOwner { marketingAddress = wallet; } /** * @dev set's development address */ function setDevelopmentFeeAddress(address payable wallet) external onlyOwner { developmentAddress = wallet; } /** * @dev set's maintainnance address */ function setMaintainaceFeeAddress(address payable wallet) external onlyOwner { maintainanceAddress = wallet; } /** * @dev set's auto SwapandLiquify when contract's token balance threshold is reached */ function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } /** * @dev Sets transactions on time periods or cooldowns. Buzz Buzz Bots. * Can only be set by owner set in seconds. */ function setTransactionCooldownTime(uint256 transactiontime) external onlyOwner { _transactionCoolTime = transactiontime; } /** * @dev Exclude's an address from transactions from cooldowns. * Can only be set by owner. */ function excludedFromTransactionCooldown(address account) external onlyOwner { isExcludedFromTransactionCoolDown[account] = true; } /** * @dev Include's an address in transactions from cooldowns. * Can only be set by owner. */ function includeInTransactionCooldown(address account) external onlyOwner { isExcludedFromTransactionCoolDown[account] = false; } /** * @dev enable/disable antibot measures */ function setAntiBotEnabled(bool value) external onlyOwner { antiBotEnabled = value; } //to recieve ETH from uniSwapRouter when swaping receive() external payable {} /** * @dev get/calculates all values e.g taxfee, * liquidity fee, actual transfer amount to receiver, * deuction amount from sender * amount with reward to all holders * amount without reward to all holders */ function _getValues(uint256 tAmount) private view returns (uint256, uint256) { uint256 tFee = calculateFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee); return (tTransferAmount, tFee); } /** * @dev take's fee tokens from tansaction and saves in contract */ function _takeFee(address account, uint256 tFee) private { if(tFee > 0) { _tOwned[address(this)] = _tOwned[address(this)].add(tFee); emit Transfer(account, address(this), tFee); } } /** * @dev calculates fee tokens to be deducted */ function calculateFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_totalFee).div( 10**3 ); } /** * @dev increase fee if selling */ function increaseFee() private { _totalFee = _totalFee.add(sellExtraFee); } /** * @dev removes all fee from transaction if takefee is set to false */ function removeAllFee() private { if(_totalFee == 0) return; _previousTotalFee = _totalFee; _totalFee = 0; } /** * @dev restores all fee after exclude fee transaction completes */ function restoreAllFee() private { _totalFee = _previousTotalFee; } /** * @dev decrease fee after selling */ function decreaseFee() private { _totalFee = _totalFee.sub(sellExtraFee); } /** * @dev approves amount of token spender can spend on behalf of an owner */ 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); } /** * @dev transfers token from sender to recipient also auto * swapsandliquify if contract's token balance threshold is reached */ function _transfer( address from, address to, uint256 amount ) private { require(from != address(0) && to != address(0), "ERC20: transfer from or two the zero address"); require(!isBlacklisted[from], "You are Blacklisted"); if(antiBotEnabled) { require(balanceOf(to) + amount <= maxTokensPerAddress || isExcludedFromAntiWhale[to], "Max tokens limit for this account exceeded. Or try lower amount"); require(isExcludedFromTransactionCoolDown[from] || block.timestamp >= _transactionCheckpoint[from] + _transactionCoolTime, "Wait for transaction cooldown time to end before making a tansaction"); require(isExcludedFromTransactionCoolDown[to] || block.timestamp >= _transactionCheckpoint[to] + _transactionCoolTime, "Wait for transaction cooldown time to end before making a tansaction"); if(from != owner() && to != owner()) require(amount <= maxTxnAmount, "Transfer amount exceeds the maxTxAmount."); _transactionCheckpoint[from] = block.timestamp; _transactionCheckpoint[to] = block.timestamp; } // 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 >= maxTxnAmount) { contractTokenBalance = maxTxnAmount; } bool overMinTokenBalance = contractTokenBalance >=minTokensSwapToAndTransferTo; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniSwapPair && swapAndLiquifyEnabled ) { contractTokenBalance =minTokensSwapToAndTransferTo; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to isExcludedFromFee account then remove the fee if(isExcludedFromFee[from] || isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax fee _tokenTransfer(from,to,amount,takeFee); } /** * @dev swapsAndLiquify tokens to uniSwap if swapandliquify is enabled */ function swapAndLiquify(uint256 tokenBalance) private lockTheSwap { // first split contract into marketing fee and liquidity fee uint256 swapPercent = developmentFee.add(marketingFee).add(maintainanceFee).add(liquidityFee/2); uint256 swapTokens = tokenBalance.div(_totalFee).mul(swapPercent); uint256 liquidityTokens = tokenBalance.sub(swapTokens); uint256 initialBalance = address(this).balance; swapTokensForEth(swapTokens); uint256 transferredBalance = address(this).balance.sub(initialBalance); uint256 developmentAmount = 0; uint256 maintainanceAmount = 0; uint256 marketingAmount = 0; if(developmentFee > 0) { developmentAmount = transferredBalance.mul(developmentFee).div(swapPercent); developmentAddress.transfer(developmentAmount); } if(marketingFee > 0) { marketingAmount = transferredBalance.mul(marketingFee).div(swapPercent); marketingAddress.transfer(marketingAmount); } if(maintainanceFee > 0) { maintainanceAmount = transferredBalance.mul(maintainanceFee).div(swapPercent); maintainanceAddress.transfer(maintainanceAmount); } if(liquidityFee > 0) { transferredBalance = transferredBalance.sub(developmentAmount).sub(marketingAmount).sub(maintainanceAmount); addLiquidity(owner(), liquidityTokens, transferredBalance); emit SwapAndLiquify(liquidityTokens, transferredBalance, liquidityTokens); } } /** * @dev swap's exact amount of tokens for ETH if swapandliquify is enabled */ 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] = uniSwapRouter.WETH(); _approve(address(this), address(uniSwapRouter), tokenAmount); // make the swap uniSwapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } /** * @dev add's liquidy to uniSwap if swapandliquify is enabled */ function addLiquidity(address recipient, uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniSwapRouter), tokenAmount); // add the liquidity uniSwapRouter.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable recipient, 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(recipient == uniSwapPair && sellExtraFee > 0) increaseFee(); if(!takeFee) removeAllFee(); (uint256 tTransferAmount, uint256 tFee) = _getValues(amount); _tOwned[sender] = _tOwned[sender].sub(amount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _takeFee(sender, tFee); emit Transfer(sender, recipient, tTransferAmount); if(!takeFee) restoreAllFee(); if(recipient == uniSwapPair && sellExtraFee > 0) decreaseFee(); } /** * @dev Blacklist a singel wallet from buying and selling */ function blacklistSingleWallet(address account) external onlyOwner{ if(isBlacklisted[account] == true) return; isBlacklisted[account] = true; } /** * @dev Blacklist multiple wallets from buying and selling */ function blacklistMultipleWallets(address[] calldata accounts) external onlyOwner{ require(accounts.length < 800, "Can not blacklist more then 800 address in one transaction"); for (uint256 i; i < accounts.length; ++i) { isBlacklisted[accounts[i]] = true; } } /** * @dev un blacklist a singel wallet from buying and selling */ function unBlacklistSingleWallet(address account) external onlyOwner{ if(isBlacklisted[account] == false) return; isBlacklisted[account] = false; } /** * @dev un blacklist multiple wallets from buying and selling */ function unBlacklistMultipleWallets(address[] calldata accounts) external onlyOwner { require(accounts.length < 800, "Can not Unblacklist more then 800 address in one transaction"); for (uint256 i; i < accounts.length; ++i) { isBlacklisted[accounts[i]] = false; } } /** * @dev recovers any tokens stuck in Contract's address * NOTE! if ownership is renounced then it will not work */ function recoverTokens(address tokenAddress, address recipient, uint256 amountToRecover) external onlyOwner { IERC20 token = IERC20(tokenAddress); uint256 balance = token.balanceOf(address(this)); require(balance >= amountToRecover, "Not Enough Tokens in contract to recover"); if(amountToRecover > 0) token.transfer(recipient, amountToRecover); } /** * @dev recovers any ETH stuck in Contract's balance * NOTE! if ownership is renounced then it will not work */ function recoverETH() external onlyOwner { address payable recipient = _msgSender(); if(address(this).balance > 0) recipient.transfer(address(this).balance); } //New uniswap router version? //No problem, just change it! function setRouterAddress(address newRouter) external onlyOwner { IUniSwapRouter _newUniSwapRouter = IUniSwapRouter(newRouter); uniSwapPair = IUniSwapFactory(_newUniSwapRouter.factory()).createPair(address(this), _newUniSwapRouter.WETH()); uniSwapRouter = _newUniSwapRouter; isExcludedFromAntiWhale[uniSwapPair] = true; isExcludedFromTransactionCoolDown[uniSwapPair] = true; } }
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":"tokensIntoLiqiudity","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":[],"name":"antiBotEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"blacklistMultipleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blacklistSingleWallet","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":[],"name":"developmentAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"excludedFromAntiWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludedFromTransactionCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInAntiWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInTransactionCooldown","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":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromAntiWhale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromTransactionCoolDown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maintainanceAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maintainanceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokensSwapToAndTransferTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountToRecover","type":"uint256"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellExtraFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setAntiBotEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setDevelopmentFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setDevelopmentFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setMaintainaceFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setMaintainanceFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setMarketingFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"name":"setMaxTokenPerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxnTokens","type":"uint256"}],"name":"setMaxTxnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minAmount","type":"uint256"}],"name":"setMinTokensSwapAndTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Fee","type":"uint256"}],"name":"setSellExtraFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"transactiontime","type":"uint256"}],"name":"setTransactionCooldownTime","outputs":[],"stateMutability":"nonpayable","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"unBlacklistMultipleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unBlacklistSingleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniSwapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniSwapRouter","outputs":[{"internalType":"contract IUniSwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60786009908155600b80546001600160a01b03199081167371d2ebb87c1b8be5d7527b55c63e27312494d36117909155600c805482167357c7cb16a480232cc479d85a3c962e826fa0f3c3179055600d80549091167380f37688dd7850ac3b5884066c03897d9ff5ca0c17905560c06040526080819052684d657461205065747360b81b60a09081526200009791600e919062000593565b50604080518082019091526003808252620244d560ec1b6020909201918252620000c491600f9162000593565b506010805460ff19166012908117909155620000e290600a6200074c565b620000f39064e8d4a510006200075d565b6011556014601255603c601355601e601455600a60155560146016556200014f6015546200013b6014546200013b6013546012546200057c60201b62001d181790919060201c565b6200057c60201b62001d181790919060201c565b60178190556018556019805460ff19166001179055601a805460ff60a81b1916600160a81b1790556010546200018a9060ff16600a6200074c565b6200019a90633b9aca006200075d565b601b55601054620001b09060ff16600a6200074c565b620001c090631dcd65006200075d565b601c55601054620001d69060ff16600a6200074c565b620001e69063773594006200075d565b601d55348015620001f657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506011543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa1580156200029f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c591906200077f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000313573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033991906200077f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000387573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ad91906200077f565b601a80546001600160a01b0319166001600160a01b0392831617815560198054610100600160a81b031916610100858516908102919091179091556000805484168152600660209081526040808320805460ff199081166001908117909255308086528386208054831684179055600d80548a1687528487208054841685179055600c80548b1688528588208054851686179055600b80548c168952868920805486168717905588548c1689526005885286892080548616871790558a548c1689528689208054861687179055838952868920805486168717905582548c168952868920805486168717905581548c168952868920805486168717905580548c1689528689208054861687179055898952868920805486168717905588548c16895260088852868920805486168717905599548b1688528588208054851686179055918752848720805484168517905554891686528386208054831684179055548816855282852080548216831790559554909616835280832080548616871790559282528282208054909416909417909255601154905190815233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000809565b60006200058a8284620007b1565b90505b92915050565b828054620005a190620007cc565b90600052602060002090601f016020900481019282620005c5576000855562000610565b82601f10620005e057805160ff191683800117855562000610565b8280016001018555821562000610579182015b8281111562000610578251825591602001919060010190620005f3565b506200061e92915062000622565b5090565b5b808211156200061e576000815560010162000623565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200069057816000190482111562000674576200067462000639565b808516156200068257918102915b93841c939080029062000654565b509250929050565b600082620006a9575060016200058d565b81620006b8575060006200058d565b8160018114620006d15760028114620006dc57620006fc565b60019150506200058d565b60ff841115620006f057620006f062000639565b50506001821b6200058d565b5060208310610133831016604e8410600b841016171562000721575081810a6200058d565b6200072d83836200064f565b806000190482111562000744576200074462000639565b029392505050565b60006200058a60ff84168362000698565b60008160001904831182151516156200077a576200077a62000639565b500290565b6000602082840312156200079257600080fd5b81516001600160a01b0381168114620007aa57600080fd5b9392505050565b60008219821115620007c757620007c762000639565b500190565b600181811c90821680620007e157607f821691505b602082108114156200080357634e487b7160e01b600052602260045260246000fd5b50919050565b612f6980620008196000396000f3fe6080604052600436106103bc5760003560e01c80636b67c4df116101f2578063c3f3046c1161010d578063e8af59b0116100a0578063f560b92e1161006f578063f560b92e14610b45578063f657d63c14610b65578063fae5655f14610b85578063fe575a8714610ba557600080fd5b8063e8af59b014610ac5578063ea2f0b3714610ae5578063f157ce4014610b05578063f2fde38b14610b2557600080fd5b8063d837df05116100dc578063d837df0514610a25578063d8c6404b14610a45578063dd46706414610a5f578063dd62ed3e14610a7f57600080fd5b8063c3f3046c146109af578063c49b9a80146109cf578063cad6ebf9146109ef578063cf46f24c14610a0f57600080fd5b8063a1bdc39911610185578063a69df4b511610154578063a69df4b51461093a578063a9059cbb1461094f578063a90e782d1461096f578063bf3237191461098f57600080fd5b8063a1bdc399146108c4578063a457c2d7146108e4578063a5ece94114610904578063a5f3d0031461092457600080fd5b80638da5cb5b116101c15780638da5cb5b1461085b5780638ee88c531461087957806395d89b411461089957806398118cb4146108ae57600080fd5b80636b67c4df146107da57806370a08231146107f0578063715018a614610826578063772558ce1461083b57600080fd5b806329a4936e116102e25780634a74bb02116102755780635edd2f5a116102445780635edd2f5a146107655780635f3e849f14610785578063602bc62b146107a5578063638b1b14146107ba57600080fd5b80634a74bb02146106b75780635342acb4146106d85780635d01ff3d146107085780635d4437831461074557600080fd5b806342aadc12116102b157806342aadc1214610637578063437823ec14610657578063457c194c146106775780634680ff351461069757600080fd5b806329a4936e146105bf578063313ce567146105d557806339509351146105f757806341cb87fc1461061757600080fd5b806318160ddd1161035a57806323b872dd1161032957806323b872dd1461053957806325a6cc0614610559578063269f534c1461057957806326f8b07d146105a957600080fd5b806318160ddd146104ce5780631e8b1402146104e357806321cd0c401461050357806323a1baaa1461052357600080fd5b806306fdde031161039657806306fdde031461041f578063071392711461044a578063095ea7b31461046e57806315ea00d21461049e57600080fd5b806304f071c8146103c85780630614117a146103ea578063061ed4dd146103ff57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103e86103e336600461296a565b610bd5565b005b3480156103f657600080fd5b506103e8610c2a565b34801561040b57600080fd5b506103e861041a366004612998565b610c95565b34801561042b57600080fd5b50610434610ce1565b60405161044191906129b5565b60405180910390f35b34801561045657600080fd5b50610460601c5481565b604051908152602001610441565b34801561047a57600080fd5b5061048e610489366004612a0a565b610d73565b6040519015158152602001610441565b3480156104aa57600080fd5b5061048e6104b9366004612998565b60086020526000908152604090205460ff1681565b3480156104da57600080fd5b50601154610460565b3480156104ef57600080fd5b506103e86104fe36600461296a565b610d8a565b34801561050f57600080fd5b506103e861051e366004612a44565b610ddf565b34801561052f57600080fd5b50610460601d5481565b34801561054557600080fd5b5061048e610554366004612a61565b610e1c565b34801561056557600080fd5b506103e861057436600461296a565b610e85565b34801561058557600080fd5b5061048e610594366004612998565b60056020526000908152604090205460ff1681565b3480156105b557600080fd5b5061046060165481565b3480156105cb57600080fd5b5061046060155481565b3480156105e157600080fd5b5060105460405160ff9091168152602001610441565b34801561060357600080fd5b5061048e610612366004612a0a565b610eca565b34801561062357600080fd5b506103e8610632366004612998565b610f00565b34801561064357600080fd5b506103e861065236600461296a565b6110ec565b34801561066357600080fd5b506103e8610672366004612998565b61111b565b34801561068357600080fd5b506103e861069236600461296a565b611169565b3480156106a357600080fd5b506103e86106b236600461296a565b6111b2565b3480156106c357600080fd5b50601a5461048e90600160a81b900460ff1681565b3480156106e457600080fd5b5061048e6106f3366004612998565b60066020526000908152604090205460ff1681565b34801561071457600080fd5b5060195461072d9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610441565b34801561075157600080fd5b506103e861076036600461296a565b611206565b34801561077157600080fd5b506103e861078036600461296a565b611235565b34801561079157600080fd5b506103e86107a0366004612a61565b61127a565b3480156107b157600080fd5b50600254610460565b3480156107c657600080fd5b50600c5461072d906001600160a01b031681565b3480156107e657600080fd5b5061046060135481565b3480156107fc57600080fd5b5061046061080b366004612998565b6001600160a01b031660009081526003602052604090205490565b34801561083257600080fd5b506103e86113f6565b34801561084757600080fd5b506103e8610856366004612aa2565b611458565b34801561086757600080fd5b506000546001600160a01b031661072d565b34801561088557600080fd5b506103e861089436600461296a565b61156e565b3480156108a557600080fd5b506104346115b8565b3480156108ba57600080fd5b5061046060125481565b3480156108d057600080fd5b506103e86108df366004612aa2565b6115c7565b3480156108f057600080fd5b5061048e6108ff366004612a0a565b6116d8565b34801561091057600080fd5b50600d5461072d906001600160a01b031681565b34801561093057600080fd5b5061046060145481565b34801561094657600080fd5b506103e8611727565b34801561095b57600080fd5b5061048e61096a366004612a0a565b611830565b34801561097b57600080fd5b506103e861098a366004612998565b61183d565b34801561099b57600080fd5b506103e86109aa366004612998565b611888565b3480156109bb57600080fd5b506103e86109ca366004612998565b6118d3565b3480156109db57600080fd5b506103e86109ea366004612a44565b61191f565b3480156109fb57600080fd5b506103e8610a0a366004612998565b6119a1565b348015610a1b57600080fd5b50610460601b5481565b348015610a3157600080fd5b50601a5461072d906001600160a01b031681565b348015610a5157600080fd5b5060195461048e9060ff1681565b348015610a6b57600080fd5b506103e8610a7a36600461296a565b611a1a565b348015610a8b57600080fd5b50610460610a9a366004612b17565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610ad157600080fd5b50600b5461072d906001600160a01b031681565b348015610af157600080fd5b506103e8610b00366004612998565b611a9f565b348015610b1157600080fd5b506103e8610b20366004612998565b611aea565b348015610b3157600080fd5b506103e8610b40366004612998565b611b58565b348015610b5157600080fd5b506103e8610b60366004612998565b611c30565b348015610b7157600080fd5b506103e8610b80366004612998565b611c7e565b348015610b9157600080fd5b506103e8610ba0366004612998565b611ccc565b348015610bb157600080fd5b5061048e610bc0366004612998565b600a6020526000908152604090205460ff1681565b6000546001600160a01b03163314610c085760405162461bcd60e51b8152600401610bff90612b50565b60405180910390fd5b601054610c2490610c1d9060ff16600a612c7f565b8290611d2b565b601b5550565b6000546001600160a01b03163314610c545760405162461bcd60e51b8152600401610bff90612b50565b334715610c92576040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610c90573d6000803e3d6000fd5b505b50565b6000546001600160a01b03163314610cbf5760405162461bcd60e51b8152600401610bff90612b50565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600e8054610cf090612c8e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1c90612c8e565b8015610d695780601f10610d3e57610100808354040283529160200191610d69565b820191906000526020600020905b815481529060010190602001808311610d4c57829003601f168201915b5050505050905090565b6000610d80338484611d37565b5060015b92915050565b6000546001600160a01b03163314610db45760405162461bcd60e51b8152600401610bff90612b50565b6015819055601454601354601254610dd9928492610dd3928391611d18565b90611d18565b60175550565b6000546001600160a01b03163314610e095760405162461bcd60e51b8152600401610bff90612b50565b6019805460ff1916911515919091179055565b6000610e29848484611e5b565b610e7b8433610e7685604051806060016040528060288152602001612ec7602891396001600160a01b038a166000908152600460209081526040808320338452909152902054919061226b565b611d37565b5060019392505050565b6000546001600160a01b03163314610eaf5760405162461bcd60e51b8152600401610bff90612b50565b601054610ec490610c1d9060ff16600a612c7f565b601d5550565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610d80918590610e769086611d18565b6000546001600160a01b03163314610f2a5760405162461bcd60e51b8152600401610bff90612b50565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190612cc9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fde573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110029190612cc9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561104f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110739190612cc9565b601a80546001600160a01b039283166001600160a01b0319909116811782556019805494841661010002610100600160a81b0319909516949094179093556000928352600560209081526040808520805460ff199081166001908117909255935490941685526008909152909220805490921617905550565b6000546001600160a01b031633146111165760405162461bcd60e51b8152600401610bff90612b50565b601655565b6000546001600160a01b031633146111455760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000546001600160a01b031633146111935760405162461bcd60e51b8152600401610bff90612b50565b6013819055601554601454601254610dd99291610dd391829086611d18565b6000546001600160a01b031633146111dc5760405162461bcd60e51b8152600401610bff90612b50565b80601481905550610dd9601554610dd3601454610dd3601354601254611d1890919063ffffffff16565b6000546001600160a01b031633146112305760405162461bcd60e51b8152600401610bff90612b50565b600955565b6000546001600160a01b0316331461125f5760405162461bcd60e51b8152600401610bff90612b50565b60105461127490610c1d9060ff16600a612c7f565b601c5550565b6000546001600160a01b031633146112a45760405162461bcd60e51b8152600401610bff90612b50565b6040516370a0823160e01b815230600482015283906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156112ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113119190612ce6565b9050828110156113745760405162461bcd60e51b815260206004820152602860248201527f4e6f7420456e6f75676820546f6b656e7320696e20636f6e747261637420746f604482015267103932b1b7bb32b960c11b6064820152608401610bff565b82156113ef5760405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905283169063a9059cbb906044016020604051808303816000875af11580156113c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ed9190612cff565b505b5050505050565b6000546001600160a01b031633146114205760405162461bcd60e51b8152600401610bff90612b50565b600080546040516001600160a01b0390911690600080516020612eef833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146114825760405162461bcd60e51b8152600401610bff90612b50565b61032081106114f95760405162461bcd60e51b815260206004820152603a60248201527f43616e206e6f7420626c61636b6c697374206d6f7265207468656e203830302060448201527f6164647265737320696e206f6e65207472616e73616374696f6e0000000000006064820152608401610bff565b60005b81811015611569576001600a600085858581811061151c5761151c612d1c565b90506020020160208101906115319190612998565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561156281612d32565b90506114fc565b505050565b6000546001600160a01b031633146115985760405162461bcd60e51b8152600401610bff90612b50565b6012819055601554601454601354610dd99291610dd39182908690611d18565b6060600f8054610cf090612c8e565b6000546001600160a01b031633146115f15760405162461bcd60e51b8152600401610bff90612b50565b61032081106116685760405162461bcd60e51b815260206004820152603c60248201527f43616e206e6f7420556e626c61636b6c697374206d6f7265207468656e20383060448201527f30206164647265737320696e206f6e65207472616e73616374696f6e000000006064820152608401610bff565b60005b81811015611569576000600a600085858581811061168b5761168b612d1c565b90506020020160208101906116a09190612998565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556116d181612d32565b905061166b565b6000610d803384610e7685604051806060016040528060258152602001612f0f602591393360009081526004602090815260408083206001600160a01b038d168452909152902054919061226b565b6001546001600160a01b0316331461178d5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610bff565b60025442116117de5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610bff565b600154600080546040516001600160a01b039384169390911691600080516020612eef83398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000610d80338484611e5b565b6000546001600160a01b031633146118675760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b031633146118b25760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b031633146118fd5760405162461bcd60e51b8152600401610bff90612b50565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119495760405162461bcd60e51b8152600401610bff90612b50565b601a8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061199690831515815260200190565b60405180910390a150565b6000546001600160a01b031633146119cb5760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b0381166000908152600a602052604090205460ff161515600114156119f45750565b6001600160a01b0381166000908152600a60205260409020805460ff1916600117905550565b6000546001600160a01b03163314611a445760405162461bcd60e51b8152600401610bff90612b50565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611a738142612d4d565b600255600080546040516001600160a01b0390911690600080516020612eef833981519152908390a350565b6000546001600160a01b03163314611ac95760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611b145760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b0381166000908152600a602052604090205460ff16611b375750565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b03163314611b825760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b038116611be75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bff565b600080546040516001600160a01b0380851693921691600080516020612eef83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c5a5760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b03163314611ca85760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000546001600160a01b03163314611cf65760405162461bcd60e51b8152600401610bff90612b50565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000611d248284612d4d565b9392505050565b6000611d248284612d65565b6001600160a01b038316611d995760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bff565b6001600160a01b038216611dfa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bff565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831615801590611e7b57506001600160a01b03821615155b611edc5760405162461bcd60e51b815260206004820152602c60248201527f45524332303a207472616e736665722066726f6d206f722074776f207468652060448201526b7a65726f206164647265737360a01b6064820152608401610bff565b6001600160a01b0383166000908152600a602052604090205460ff1615611f3b5760405162461bcd60e51b8152602060048201526013602482015272165bdd48185c9948109b1858dadb1a5cdd1959606a1b6044820152606401610bff565b60195460ff161561219657601d5481611f69846001600160a01b031660009081526003602052604090205490565b611f739190612d4d565b111580611f9857506001600160a01b03821660009081526005602052604090205460ff165b61200a5760405162461bcd60e51b815260206004820152603f60248201527f4d617820746f6b656e73206c696d697420666f722074686973206163636f756e60448201527f742065786365656465642e204f7220747279206c6f77657220616d6f756e74006064820152608401610bff565b6001600160a01b03831660009081526008602052604090205460ff168061205657506009546001600160a01b0384166000908152600760205260409020546120529190612d4d565b4210155b6120725760405162461bcd60e51b8152600401610bff90612d84565b6001600160a01b03821660009081526008602052604090205460ff16806120be57506009546001600160a01b0383166000908152600760205260409020546120ba9190612d4d565b4210155b6120da5760405162461bcd60e51b8152600401610bff90612d84565b6000546001600160a01b0384811691161480159061210657506000546001600160a01b03838116911614155b1561216e57601b5481111561216e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610bff565b6001600160a01b03808416600090815260076020526040808220429081905592851682529020555b30600090815260036020526040902054601b5481106121b45750601b545b601c54811080159081906121d25750601a54600160a01b900460ff16155b80156121ec5750601a546001600160a01b03868116911614155b80156122015750601a54600160a81b900460ff165b1561221457601c54915061221482612297565b6001600160a01b03851660009081526006602052604090205460019060ff168061225657506001600160a01b03851660009081526006602052604090205460ff165b1561225f575060005b6113ed868686846124e5565b6000818484111561228f5760405162461bcd60e51b8152600401610bff91906129b5565b505050900390565b601a805460ff60a01b1916600160a01b1790556012546000906122dd906122c090600290612dee565b610dd3601554610dd3601354601454611d1890919063ffffffff16565b90506000612300826122fa6017548661262d90919063ffffffff16565b90611d2b565b9050600061230e8483612639565b90504761231a83612645565b60006123264783612639565b90506000806000806014541115612393576123568861235060145487611d2b90919063ffffffff16565b9061262d565b600c546040519194506001600160a01b03169084156108fc029085906000818181858888f19350505050158015612391573d6000803e3d6000fd5b505b601354156123f1576123b48861235060135487611d2b90919063ffffffff16565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156123ef573d6000803e3d6000fd5b505b6015541561244f576124128861235060155487611d2b90919063ffffffff16565b600b546040519193506001600160a01b03169083156108fc029084906000818181858888f1935050505015801561244d573d6000803e3d6000fd5b505b601254156124cd5761246d8261246783818888612639565b90612639565b935061248b6124846000546001600160a01b031690565b87866127ba565b60408051878152602081018690529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050601a805460ff60a01b1916905550505050505050565b601a546001600160a01b03848116911614801561250457506000601654115b1561251157612511612870565b8061251e5761251e612884565b60008061252a8461289a565b6001600160a01b03881660009081526003602052604090205491935091506125529085612639565b6001600160a01b0380881660009081526003602052604080822093909355908716815220546125819083611d18565b6001600160a01b0386166000908152600360205260409020556125a486826128c1565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125e991815260200190565b60405180910390a38261260157612601601854601755565b601a546001600160a01b03868116911614801561262057506000601654115b156113ed576113ed61293e565b6000611d248284612dee565b6000611d248284612e10565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061267a5761267a612d1c565b60200260200101906001600160a01b031690816001600160a01b031681525050601960019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127119190612cc9565b8160018151811061272457612724612d1c565b6001600160a01b03928316602091820292909201015260195461274f91309161010090041684611d37565b60195460405163791ac94760e01b81526101009091046001600160a01b03169063791ac9479061278c908590600090869030904290600401612e27565b600060405180830381600087803b1580156127a657600080fd5b505af11580156113ed573d6000803e3d6000fd5b6019546127d790309061010090046001600160a01b031684611d37565b60195460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0385811660848301524260a48301526101009092049091169063f305d71990839060c40160606040518083038185885af115801561284b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113ed9190612e98565b60165460175461287f91611d18565b601755565b60175461288d57565b6017805460185560009055565b60008060006128a88461294d565b905060006128b68583612639565b959194509092505050565b8015610c9057306000908152600360205260409020546128e19082611d18565b30600081815260036020526040908190209290925590516001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129329085815260200190565b60405180910390a35050565b60165460175461287f91612639565b6000610d846103e861235060175485611d2b90919063ffffffff16565b60006020828403121561297c57600080fd5b5035919050565b6001600160a01b0381168114610c9257600080fd5b6000602082840312156129aa57600080fd5b8135611d2481612983565b600060208083528351808285015260005b818110156129e2578581018301518582016040015282016129c6565b818111156129f4576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612a1d57600080fd5b8235612a2881612983565b946020939093013593505050565b8015158114610c9257600080fd5b600060208284031215612a5657600080fd5b8135611d2481612a36565b600080600060608486031215612a7657600080fd5b8335612a8181612983565b92506020840135612a9181612983565b929592945050506040919091013590565b60008060208385031215612ab557600080fd5b823567ffffffffffffffff80821115612acd57600080fd5b818501915085601f830112612ae157600080fd5b813581811115612af057600080fd5b8660208260051b8501011115612b0557600080fd5b60209290920196919550909350505050565b60008060408385031215612b2a57600080fd5b8235612b3581612983565b91506020830135612b4581612983565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612bd6578160001904821115612bbc57612bbc612b85565b80851615612bc957918102915b93841c9390800290612ba0565b509250929050565b600082612bed57506001610d84565b81612bfa57506000610d84565b8160018114612c105760028114612c1a57612c36565b6001915050610d84565b60ff841115612c2b57612c2b612b85565b50506001821b610d84565b5060208310610133831016604e8410600b8410161715612c59575081810a610d84565b612c638383612b9b565b8060001904821115612c7757612c77612b85565b029392505050565b6000611d2460ff841683612bde565b600181811c90821680612ca257607f821691505b60208210811415612cc357634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612cdb57600080fd5b8151611d2481612983565b600060208284031215612cf857600080fd5b5051919050565b600060208284031215612d1157600080fd5b8151611d2481612a36565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612d4657612d46612b85565b5060010190565b60008219821115612d6057612d60612b85565b500190565b6000816000190483118215151615612d7f57612d7f612b85565b500290565b60208082526044908201527f5761697420666f72207472616e73616374696f6e20636f6f6c646f776e20746960408201527f6d6520746f20656e64206265666f7265206d616b696e6720612074616e7361636060820152633a34b7b760e11b608082015260a00190565b600082612e0b57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015612e2257612e22612b85565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e775784516001600160a01b031683529383019391830191600101612e52565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612ead57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220081cb9d7492c217d06623d9edadc431ceba185b159df91ec34ea3bd30168daa764736f6c634300080a0033
Deployed Bytecode
0x6080604052600436106103bc5760003560e01c80636b67c4df116101f2578063c3f3046c1161010d578063e8af59b0116100a0578063f560b92e1161006f578063f560b92e14610b45578063f657d63c14610b65578063fae5655f14610b85578063fe575a8714610ba557600080fd5b8063e8af59b014610ac5578063ea2f0b3714610ae5578063f157ce4014610b05578063f2fde38b14610b2557600080fd5b8063d837df05116100dc578063d837df0514610a25578063d8c6404b14610a45578063dd46706414610a5f578063dd62ed3e14610a7f57600080fd5b8063c3f3046c146109af578063c49b9a80146109cf578063cad6ebf9146109ef578063cf46f24c14610a0f57600080fd5b8063a1bdc39911610185578063a69df4b511610154578063a69df4b51461093a578063a9059cbb1461094f578063a90e782d1461096f578063bf3237191461098f57600080fd5b8063a1bdc399146108c4578063a457c2d7146108e4578063a5ece94114610904578063a5f3d0031461092457600080fd5b80638da5cb5b116101c15780638da5cb5b1461085b5780638ee88c531461087957806395d89b411461089957806398118cb4146108ae57600080fd5b80636b67c4df146107da57806370a08231146107f0578063715018a614610826578063772558ce1461083b57600080fd5b806329a4936e116102e25780634a74bb02116102755780635edd2f5a116102445780635edd2f5a146107655780635f3e849f14610785578063602bc62b146107a5578063638b1b14146107ba57600080fd5b80634a74bb02146106b75780635342acb4146106d85780635d01ff3d146107085780635d4437831461074557600080fd5b806342aadc12116102b157806342aadc1214610637578063437823ec14610657578063457c194c146106775780634680ff351461069757600080fd5b806329a4936e146105bf578063313ce567146105d557806339509351146105f757806341cb87fc1461061757600080fd5b806318160ddd1161035a57806323b872dd1161032957806323b872dd1461053957806325a6cc0614610559578063269f534c1461057957806326f8b07d146105a957600080fd5b806318160ddd146104ce5780631e8b1402146104e357806321cd0c401461050357806323a1baaa1461052357600080fd5b806306fdde031161039657806306fdde031461041f578063071392711461044a578063095ea7b31461046e57806315ea00d21461049e57600080fd5b806304f071c8146103c85780630614117a146103ea578063061ed4dd146103ff57600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103e86103e336600461296a565b610bd5565b005b3480156103f657600080fd5b506103e8610c2a565b34801561040b57600080fd5b506103e861041a366004612998565b610c95565b34801561042b57600080fd5b50610434610ce1565b60405161044191906129b5565b60405180910390f35b34801561045657600080fd5b50610460601c5481565b604051908152602001610441565b34801561047a57600080fd5b5061048e610489366004612a0a565b610d73565b6040519015158152602001610441565b3480156104aa57600080fd5b5061048e6104b9366004612998565b60086020526000908152604090205460ff1681565b3480156104da57600080fd5b50601154610460565b3480156104ef57600080fd5b506103e86104fe36600461296a565b610d8a565b34801561050f57600080fd5b506103e861051e366004612a44565b610ddf565b34801561052f57600080fd5b50610460601d5481565b34801561054557600080fd5b5061048e610554366004612a61565b610e1c565b34801561056557600080fd5b506103e861057436600461296a565b610e85565b34801561058557600080fd5b5061048e610594366004612998565b60056020526000908152604090205460ff1681565b3480156105b557600080fd5b5061046060165481565b3480156105cb57600080fd5b5061046060155481565b3480156105e157600080fd5b5060105460405160ff9091168152602001610441565b34801561060357600080fd5b5061048e610612366004612a0a565b610eca565b34801561062357600080fd5b506103e8610632366004612998565b610f00565b34801561064357600080fd5b506103e861065236600461296a565b6110ec565b34801561066357600080fd5b506103e8610672366004612998565b61111b565b34801561068357600080fd5b506103e861069236600461296a565b611169565b3480156106a357600080fd5b506103e86106b236600461296a565b6111b2565b3480156106c357600080fd5b50601a5461048e90600160a81b900460ff1681565b3480156106e457600080fd5b5061048e6106f3366004612998565b60066020526000908152604090205460ff1681565b34801561071457600080fd5b5060195461072d9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610441565b34801561075157600080fd5b506103e861076036600461296a565b611206565b34801561077157600080fd5b506103e861078036600461296a565b611235565b34801561079157600080fd5b506103e86107a0366004612a61565b61127a565b3480156107b157600080fd5b50600254610460565b3480156107c657600080fd5b50600c5461072d906001600160a01b031681565b3480156107e657600080fd5b5061046060135481565b3480156107fc57600080fd5b5061046061080b366004612998565b6001600160a01b031660009081526003602052604090205490565b34801561083257600080fd5b506103e86113f6565b34801561084757600080fd5b506103e8610856366004612aa2565b611458565b34801561086757600080fd5b506000546001600160a01b031661072d565b34801561088557600080fd5b506103e861089436600461296a565b61156e565b3480156108a557600080fd5b506104346115b8565b3480156108ba57600080fd5b5061046060125481565b3480156108d057600080fd5b506103e86108df366004612aa2565b6115c7565b3480156108f057600080fd5b5061048e6108ff366004612a0a565b6116d8565b34801561091057600080fd5b50600d5461072d906001600160a01b031681565b34801561093057600080fd5b5061046060145481565b34801561094657600080fd5b506103e8611727565b34801561095b57600080fd5b5061048e61096a366004612a0a565b611830565b34801561097b57600080fd5b506103e861098a366004612998565b61183d565b34801561099b57600080fd5b506103e86109aa366004612998565b611888565b3480156109bb57600080fd5b506103e86109ca366004612998565b6118d3565b3480156109db57600080fd5b506103e86109ea366004612a44565b61191f565b3480156109fb57600080fd5b506103e8610a0a366004612998565b6119a1565b348015610a1b57600080fd5b50610460601b5481565b348015610a3157600080fd5b50601a5461072d906001600160a01b031681565b348015610a5157600080fd5b5060195461048e9060ff1681565b348015610a6b57600080fd5b506103e8610a7a36600461296a565b611a1a565b348015610a8b57600080fd5b50610460610a9a366004612b17565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610ad157600080fd5b50600b5461072d906001600160a01b031681565b348015610af157600080fd5b506103e8610b00366004612998565b611a9f565b348015610b1157600080fd5b506103e8610b20366004612998565b611aea565b348015610b3157600080fd5b506103e8610b40366004612998565b611b58565b348015610b5157600080fd5b506103e8610b60366004612998565b611c30565b348015610b7157600080fd5b506103e8610b80366004612998565b611c7e565b348015610b9157600080fd5b506103e8610ba0366004612998565b611ccc565b348015610bb157600080fd5b5061048e610bc0366004612998565b600a6020526000908152604090205460ff1681565b6000546001600160a01b03163314610c085760405162461bcd60e51b8152600401610bff90612b50565b60405180910390fd5b601054610c2490610c1d9060ff16600a612c7f565b8290611d2b565b601b5550565b6000546001600160a01b03163314610c545760405162461bcd60e51b8152600401610bff90612b50565b334715610c92576040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610c90573d6000803e3d6000fd5b505b50565b6000546001600160a01b03163314610cbf5760405162461bcd60e51b8152600401610bff90612b50565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600e8054610cf090612c8e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1c90612c8e565b8015610d695780601f10610d3e57610100808354040283529160200191610d69565b820191906000526020600020905b815481529060010190602001808311610d4c57829003601f168201915b5050505050905090565b6000610d80338484611d37565b5060015b92915050565b6000546001600160a01b03163314610db45760405162461bcd60e51b8152600401610bff90612b50565b6015819055601454601354601254610dd9928492610dd3928391611d18565b90611d18565b60175550565b6000546001600160a01b03163314610e095760405162461bcd60e51b8152600401610bff90612b50565b6019805460ff1916911515919091179055565b6000610e29848484611e5b565b610e7b8433610e7685604051806060016040528060288152602001612ec7602891396001600160a01b038a166000908152600460209081526040808320338452909152902054919061226b565b611d37565b5060019392505050565b6000546001600160a01b03163314610eaf5760405162461bcd60e51b8152600401610bff90612b50565b601054610ec490610c1d9060ff16600a612c7f565b601d5550565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610d80918590610e769086611d18565b6000546001600160a01b03163314610f2a5760405162461bcd60e51b8152600401610bff90612b50565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190612cc9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fde573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110029190612cc9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561104f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110739190612cc9565b601a80546001600160a01b039283166001600160a01b0319909116811782556019805494841661010002610100600160a81b0319909516949094179093556000928352600560209081526040808520805460ff199081166001908117909255935490941685526008909152909220805490921617905550565b6000546001600160a01b031633146111165760405162461bcd60e51b8152600401610bff90612b50565b601655565b6000546001600160a01b031633146111455760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000546001600160a01b031633146111935760405162461bcd60e51b8152600401610bff90612b50565b6013819055601554601454601254610dd99291610dd391829086611d18565b6000546001600160a01b031633146111dc5760405162461bcd60e51b8152600401610bff90612b50565b80601481905550610dd9601554610dd3601454610dd3601354601254611d1890919063ffffffff16565b6000546001600160a01b031633146112305760405162461bcd60e51b8152600401610bff90612b50565b600955565b6000546001600160a01b0316331461125f5760405162461bcd60e51b8152600401610bff90612b50565b60105461127490610c1d9060ff16600a612c7f565b601c5550565b6000546001600160a01b031633146112a45760405162461bcd60e51b8152600401610bff90612b50565b6040516370a0823160e01b815230600482015283906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156112ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113119190612ce6565b9050828110156113745760405162461bcd60e51b815260206004820152602860248201527f4e6f7420456e6f75676820546f6b656e7320696e20636f6e747261637420746f604482015267103932b1b7bb32b960c11b6064820152608401610bff565b82156113ef5760405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905283169063a9059cbb906044016020604051808303816000875af11580156113c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ed9190612cff565b505b5050505050565b6000546001600160a01b031633146114205760405162461bcd60e51b8152600401610bff90612b50565b600080546040516001600160a01b0390911690600080516020612eef833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146114825760405162461bcd60e51b8152600401610bff90612b50565b61032081106114f95760405162461bcd60e51b815260206004820152603a60248201527f43616e206e6f7420626c61636b6c697374206d6f7265207468656e203830302060448201527f6164647265737320696e206f6e65207472616e73616374696f6e0000000000006064820152608401610bff565b60005b81811015611569576001600a600085858581811061151c5761151c612d1c565b90506020020160208101906115319190612998565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561156281612d32565b90506114fc565b505050565b6000546001600160a01b031633146115985760405162461bcd60e51b8152600401610bff90612b50565b6012819055601554601454601354610dd99291610dd39182908690611d18565b6060600f8054610cf090612c8e565b6000546001600160a01b031633146115f15760405162461bcd60e51b8152600401610bff90612b50565b61032081106116685760405162461bcd60e51b815260206004820152603c60248201527f43616e206e6f7420556e626c61636b6c697374206d6f7265207468656e20383060448201527f30206164647265737320696e206f6e65207472616e73616374696f6e000000006064820152608401610bff565b60005b81811015611569576000600a600085858581811061168b5761168b612d1c565b90506020020160208101906116a09190612998565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556116d181612d32565b905061166b565b6000610d803384610e7685604051806060016040528060258152602001612f0f602591393360009081526004602090815260408083206001600160a01b038d168452909152902054919061226b565b6001546001600160a01b0316331461178d5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610bff565b60025442116117de5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610bff565b600154600080546040516001600160a01b039384169390911691600080516020612eef83398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000610d80338484611e5b565b6000546001600160a01b031633146118675760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b031633146118b25760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b031633146118fd5760405162461bcd60e51b8152600401610bff90612b50565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119495760405162461bcd60e51b8152600401610bff90612b50565b601a8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061199690831515815260200190565b60405180910390a150565b6000546001600160a01b031633146119cb5760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b0381166000908152600a602052604090205460ff161515600114156119f45750565b6001600160a01b0381166000908152600a60205260409020805460ff1916600117905550565b6000546001600160a01b03163314611a445760405162461bcd60e51b8152600401610bff90612b50565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611a738142612d4d565b600255600080546040516001600160a01b0390911690600080516020612eef833981519152908390a350565b6000546001600160a01b03163314611ac95760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611b145760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b0381166000908152600a602052604090205460ff16611b375750565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b03163314611b825760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b038116611be75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bff565b600080546040516001600160a01b0380851693921691600080516020612eef83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c5a5760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b03163314611ca85760405162461bcd60e51b8152600401610bff90612b50565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000546001600160a01b03163314611cf65760405162461bcd60e51b8152600401610bff90612b50565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000611d248284612d4d565b9392505050565b6000611d248284612d65565b6001600160a01b038316611d995760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bff565b6001600160a01b038216611dfa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bff565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831615801590611e7b57506001600160a01b03821615155b611edc5760405162461bcd60e51b815260206004820152602c60248201527f45524332303a207472616e736665722066726f6d206f722074776f207468652060448201526b7a65726f206164647265737360a01b6064820152608401610bff565b6001600160a01b0383166000908152600a602052604090205460ff1615611f3b5760405162461bcd60e51b8152602060048201526013602482015272165bdd48185c9948109b1858dadb1a5cdd1959606a1b6044820152606401610bff565b60195460ff161561219657601d5481611f69846001600160a01b031660009081526003602052604090205490565b611f739190612d4d565b111580611f9857506001600160a01b03821660009081526005602052604090205460ff165b61200a5760405162461bcd60e51b815260206004820152603f60248201527f4d617820746f6b656e73206c696d697420666f722074686973206163636f756e60448201527f742065786365656465642e204f7220747279206c6f77657220616d6f756e74006064820152608401610bff565b6001600160a01b03831660009081526008602052604090205460ff168061205657506009546001600160a01b0384166000908152600760205260409020546120529190612d4d565b4210155b6120725760405162461bcd60e51b8152600401610bff90612d84565b6001600160a01b03821660009081526008602052604090205460ff16806120be57506009546001600160a01b0383166000908152600760205260409020546120ba9190612d4d565b4210155b6120da5760405162461bcd60e51b8152600401610bff90612d84565b6000546001600160a01b0384811691161480159061210657506000546001600160a01b03838116911614155b1561216e57601b5481111561216e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610bff565b6001600160a01b03808416600090815260076020526040808220429081905592851682529020555b30600090815260036020526040902054601b5481106121b45750601b545b601c54811080159081906121d25750601a54600160a01b900460ff16155b80156121ec5750601a546001600160a01b03868116911614155b80156122015750601a54600160a81b900460ff165b1561221457601c54915061221482612297565b6001600160a01b03851660009081526006602052604090205460019060ff168061225657506001600160a01b03851660009081526006602052604090205460ff165b1561225f575060005b6113ed868686846124e5565b6000818484111561228f5760405162461bcd60e51b8152600401610bff91906129b5565b505050900390565b601a805460ff60a01b1916600160a01b1790556012546000906122dd906122c090600290612dee565b610dd3601554610dd3601354601454611d1890919063ffffffff16565b90506000612300826122fa6017548661262d90919063ffffffff16565b90611d2b565b9050600061230e8483612639565b90504761231a83612645565b60006123264783612639565b90506000806000806014541115612393576123568861235060145487611d2b90919063ffffffff16565b9061262d565b600c546040519194506001600160a01b03169084156108fc029085906000818181858888f19350505050158015612391573d6000803e3d6000fd5b505b601354156123f1576123b48861235060135487611d2b90919063ffffffff16565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156123ef573d6000803e3d6000fd5b505b6015541561244f576124128861235060155487611d2b90919063ffffffff16565b600b546040519193506001600160a01b03169083156108fc029084906000818181858888f1935050505015801561244d573d6000803e3d6000fd5b505b601254156124cd5761246d8261246783818888612639565b90612639565b935061248b6124846000546001600160a01b031690565b87866127ba565b60408051878152602081018690529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050601a805460ff60a01b1916905550505050505050565b601a546001600160a01b03848116911614801561250457506000601654115b1561251157612511612870565b8061251e5761251e612884565b60008061252a8461289a565b6001600160a01b03881660009081526003602052604090205491935091506125529085612639565b6001600160a01b0380881660009081526003602052604080822093909355908716815220546125819083611d18565b6001600160a01b0386166000908152600360205260409020556125a486826128c1565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125e991815260200190565b60405180910390a38261260157612601601854601755565b601a546001600160a01b03868116911614801561262057506000601654115b156113ed576113ed61293e565b6000611d248284612dee565b6000611d248284612e10565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061267a5761267a612d1c565b60200260200101906001600160a01b031690816001600160a01b031681525050601960019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127119190612cc9565b8160018151811061272457612724612d1c565b6001600160a01b03928316602091820292909201015260195461274f91309161010090041684611d37565b60195460405163791ac94760e01b81526101009091046001600160a01b03169063791ac9479061278c908590600090869030904290600401612e27565b600060405180830381600087803b1580156127a657600080fd5b505af11580156113ed573d6000803e3d6000fd5b6019546127d790309061010090046001600160a01b031684611d37565b60195460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0385811660848301524260a48301526101009092049091169063f305d71990839060c40160606040518083038185885af115801561284b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113ed9190612e98565b60165460175461287f91611d18565b601755565b60175461288d57565b6017805460185560009055565b60008060006128a88461294d565b905060006128b68583612639565b959194509092505050565b8015610c9057306000908152600360205260409020546128e19082611d18565b30600081815260036020526040908190209290925590516001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129329085815260200190565b60405180910390a35050565b60165460175461287f91612639565b6000610d846103e861235060175485611d2b90919063ffffffff16565b60006020828403121561297c57600080fd5b5035919050565b6001600160a01b0381168114610c9257600080fd5b6000602082840312156129aa57600080fd5b8135611d2481612983565b600060208083528351808285015260005b818110156129e2578581018301518582016040015282016129c6565b818111156129f4576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612a1d57600080fd5b8235612a2881612983565b946020939093013593505050565b8015158114610c9257600080fd5b600060208284031215612a5657600080fd5b8135611d2481612a36565b600080600060608486031215612a7657600080fd5b8335612a8181612983565b92506020840135612a9181612983565b929592945050506040919091013590565b60008060208385031215612ab557600080fd5b823567ffffffffffffffff80821115612acd57600080fd5b818501915085601f830112612ae157600080fd5b813581811115612af057600080fd5b8660208260051b8501011115612b0557600080fd5b60209290920196919550909350505050565b60008060408385031215612b2a57600080fd5b8235612b3581612983565b91506020830135612b4581612983565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612bd6578160001904821115612bbc57612bbc612b85565b80851615612bc957918102915b93841c9390800290612ba0565b509250929050565b600082612bed57506001610d84565b81612bfa57506000610d84565b8160018114612c105760028114612c1a57612c36565b6001915050610d84565b60ff841115612c2b57612c2b612b85565b50506001821b610d84565b5060208310610133831016604e8410600b8410161715612c59575081810a610d84565b612c638383612b9b565b8060001904821115612c7757612c77612b85565b029392505050565b6000611d2460ff841683612bde565b600181811c90821680612ca257607f821691505b60208210811415612cc357634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612cdb57600080fd5b8151611d2481612983565b600060208284031215612cf857600080fd5b5051919050565b600060208284031215612d1157600080fd5b8151611d2481612a36565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612d4657612d46612b85565b5060010190565b60008219821115612d6057612d60612b85565b500190565b6000816000190483118215151615612d7f57612d7f612b85565b500290565b60208082526044908201527f5761697420666f72207472616e73616374696f6e20636f6f6c646f776e20746960408201527f6d6520746f20656e64206265666f7265206d616b696e6720612074616e7361636060820152633a34b7b760e11b608082015260a00190565b600082612e0b57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015612e2257612e22612b85565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e775784516001600160a01b031683529383019391830191600101612e52565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612ead57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220081cb9d7492c217d06623d9edadc431ceba185b159df91ec34ea3bd30168daa764736f6c634300080a0033
Deployed Bytecode Sourcemap
18265:24489:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28593:133;;;;;;;;;;-1:-1:-1;28593:133:0;;;;;:::i;:::-;;:::i;:::-;;42034:195;;;;;;;;;;;;;:::i;29762:124::-;;;;;;;;;;-1:-1:-1;29762:124:0;;;;;:::i;:::-;;:::i;24154:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21171:73;;;;;;;;;;;;;;;;;;;1359:25:1;;;1347:2;1332:18;21171:73:0;1213:177:1;25054:161:0;;;;;;;;;;-1:-1:-1;25054:161:0;;;;;:::i;:::-;;:::i;:::-;;;1888:14:1;;1881:22;1863:41;;1851:2;1836:18;25054:161:0;1723:187:1;18836:65:0;;;;;;;;;;-1:-1:-1;18836:65:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24431:95;;;;;;;;;;-1:-1:-1;24511:7:0;;24431:95;;27797:201;;;;;;;;;;-1:-1:-1;27797:201:0;;;;;:::i;:::-;;:::i;31007:99::-;;;;;;;;;;-1:-1:-1;31007:99:0;;;;;:::i;:::-;;:::i;21310:76::-;;;;;;;;;;;;;;;;25364:314;;;;;;;;;;-1:-1:-1;25364:314:0;;;;;:::i;:::-;;:::i;28827:140::-;;;;;;;;;;-1:-1:-1;28827:140:0;;;;;:::i;:::-;;:::i;18567:56::-;;;;;;;;;;-1:-1:-1;18567:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20234:32;;;;;;;;;;;;;;;;20159:35;;;;;;;;;;;;;;;;24340:83;;;;;;;;;;-1:-1:-1;24406:9:0;;24340:83;;24406:9;;;;3163:36:1;;3151:2;3136:18;24340:83:0;3021:184:1;25793:218:0;;;;;;;;;;-1:-1:-1;25793:218:0;;;;;:::i;:::-;;:::i;42311:438::-;;;;;;;;;;-1:-1:-1;42311:438:0;;;;;:::i;:::-;;:::i;28342:101::-;;;;;;;;;;-1:-1:-1;28342:101:0;;;;;:::i;:::-;;:::i;26457:112::-;;;;;;;;;;-1:-1:-1;26457:112:0;;;;;:::i;:::-;;:::i;27527:195::-;;;;;;;;;;-1:-1:-1;27527:195:0;;;;;:::i;:::-;;:::i;27252:199::-;;;;;;;;;;-1:-1:-1;27252:199:0;;;;;:::i;:::-;;:::i;20947:40::-;;;;;;;;;;-1:-1:-1;20947:40:0;;;;-1:-1:-1;;;20947:40:0;;;;;;18678:50;;;;;;;;;;-1:-1:-1;18678:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20689:35;;;;;;;;;;-1:-1:-1;20689:35:0;;;;;;;-1:-1:-1;;;;;20689:35:0;;;;;;-1:-1:-1;;;;;3396:32:1;;;3378:51;;3366:2;3351:18;20689:35:0;3210:225:1;30314:128:0;;;;;;;;;;-1:-1:-1;30314:128:0;;;;;:::i;:::-;;:::i;29163:156::-;;;;;;;;;;-1:-1:-1;29163:156:0;;;;;:::i;:::-;;:::i;41469:413::-;;;;;;;;;;-1:-1:-1;41469:413:0;;;;;:::i;:::-;;:::i;16217:92::-;;;;;;;;;;-1:-1:-1;16292:9:0;;16217:92;;19293:96;;;;;;;;;;-1:-1:-1;19293:96:0;;;;-1:-1:-1;;;;;19293:96:0;;;20033:32;;;;;;;;;;;;;;;;24534:117;;;;;;;;;;-1:-1:-1;24534:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;24627:16:0;24600:7;24627:16;;;:7;:16;;;;;;;24534:117;15654:150;;;;;;;;;;;;;:::i;40340:304::-;;;;;;;;;;-1:-1:-1;40340:304:0;;;;;:::i;:::-;;:::i;15011:79::-;;;;;;;;;;-1:-1:-1;15049:7:0;15076:6;-1:-1:-1;;;;;15076:6:0;15011:79;;28074:195;;;;;;;;;;-1:-1:-1;28074:195:0;;;;;:::i;:::-;;:::i;24245:87::-;;;;;;;;;;;;;:::i;19965:32::-;;;;;;;;;;;;;;;;41008:310;;;;;;;;;;-1:-1:-1;41008:310:0;;;;;:::i;:::-;;:::i;26119:269::-;;;;;;;;;;-1:-1:-1;26119:269:0;;;;;:::i;:::-;;:::i;19419:96::-;;;;;;;;;;-1:-1:-1;19419:96:0;;;;-1:-1:-1;;;;;19419:96:0;;;20094:34;;;;;;;;;;;;;;;;16689:345;;;;;;;;;;;;;:::i;24659:167::-;;;;;;;;;;-1:-1:-1;24659:167:0;;;;;:::i;:::-;;:::i;30808:134::-;;;;;;;;;;-1:-1:-1;30808:134:0;;;;;:::i;:::-;;:::i;27055:123::-;;;;;;;;;;-1:-1:-1;27055:123:0;;;;;:::i;:::-;;:::i;29384:119::-;;;;;;;;;;-1:-1:-1;29384:119:0;;;;;:::i;:::-;;:::i;30004:173::-;;;;;;;;;;-1:-1:-1;30004:173:0;;;;;:::i;:::-;;:::i;40082:166::-;;;;;;;;;;-1:-1:-1;40082:166:0;;;;;:::i;:::-;;:::i;21060:58::-;;;;;;;;;;;;;;;;20771:26;;;;;;;;;;-1:-1:-1;20771:26:0;;;;-1:-1:-1;;;;;20771:26:0;;;20558:33;;;;;;;;;;-1:-1:-1;20558:33:0;;;;;;;;16385:228;;;;;;;;;;-1:-1:-1;16385:228:0;;;;;:::i;:::-;;:::i;24834:143::-;;;;;;;;;;-1:-1:-1;24834:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;24942:18:0;;;24915:7;24942:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24834:143;19166:96;;;;;;;;;;-1:-1:-1;19166:96:0;;;;-1:-1:-1;;;;;19166:96:0;;;26641:111;;;;;;;;;;-1:-1:-1;26641:111:0;;;;;:::i;:::-;;:::i;40742:171::-;;;;;;;;;;-1:-1:-1;40742:171:0;;;;;:::i;:::-;;:::i;15959:246::-;;;;;;;;;;-1:-1:-1;15959:246:0;;;;;:::i;:::-;;:::i;26842:125::-;;;;;;;;;;-1:-1:-1;26842:125:0;;;;;:::i;:::-;;:::i;30558:136::-;;;;;;;;;;-1:-1:-1;30558:136:0;;;;;:::i;:::-;;:::i;29570:123::-;;;;;;;;;;-1:-1:-1;29570:123:0;;;;;:::i;:::-;;:::i;19069:46::-;;;;;;;;;;-1:-1:-1;19069:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28593:133;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;;;;;;;;;28707:9:::1;::::0;28685:33:::1;::::0;28703:13:::1;::::0;28707:9:::1;;28703:2;:13;:::i;:::-;28685:12:::0;;:16:::1;:33::i;:::-;28670:12;:48:::0;-1:-1:-1;28593:133:0:o;42034:195::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;7614:10;42140:21:::1;:25:::0;42137:84:::1;;42180:41;::::0;-1:-1:-1;;;;;42180:18:0;::::1;::::0;42199:21:::1;42180:41:::0;::::1;;;::::0;::::1;::::0;;;42199:21;42180:18;:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;42137:84;42075:154;42034:195::o:0;29762:124::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;29850:19:::1;:28:::0;;-1:-1:-1;;;;;;29850:28:0::1;-1:-1:-1::0;;;;;29850:28:0;;;::::1;::::0;;;::::1;::::0;;29762:124::o;24154:83::-;24191:13;24224:5;24217:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24154:83;:::o;25054:161::-;25129:4;25146:39;7614:10;25169:7;25178:6;25146:8;:39::i;:::-;-1:-1:-1;25203:4:0;25054:161;;;;;:::o;27797:201::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;27875:15:::1;:21:::0;;;27954:14:::1;::::0;27936:12:::1;::::0;27919::::1;::::0;:71:::1;::::0;27893:3;;27919:50:::1;::::0;;;:16:::1;:30::i;:::-;:34:::0;::::1;:50::i;:71::-;27907:9;:83:::0;-1:-1:-1;27797:201:0:o;31007:99::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;31076:14:::1;:22:::0;;-1:-1:-1;;31076:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31007:99::o;25364:314::-;25462:4;25479:36;25489:6;25497:9;25508:6;25479:9;:36::i;:::-;25526:121;25535:6;7614:10;25557:89;25595:6;25557:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25557:19:0;;;;;;:11;:19;;;;;;;;7614:10;25557:33;;;;;;;;;;:37;:89::i;:::-;25526:8;:121::i;:::-;-1:-1:-1;25666:4:0;25364:314;;;;;:::o;28827:140::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;28948:9:::1;::::0;28929:30:::1;::::0;28944:13:::1;::::0;28948:9:::1;;28944:2;:13;:::i;28929:30::-;28907:19;:52:::0;-1:-1:-1;28827:140:0:o;25793:218::-;7614:10;25881:4;25930:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25930:34:0;;;;;;;;;;25881:4;;25898:83;;25921:7;;25930:50;;25969:10;25930:38;:50::i;42311:438::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;42386:32:::1;42436:9;42386:60;;42487:17;-1:-1:-1::0;;;;;42487:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42471:55:0::1;;42535:4;42542:17;-1:-1:-1::0;;;;;42542:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42471:96;::::0;-1:-1:-1;;;;;;42471:96:0::1;::::0;;;;;;-1:-1:-1;;;;;7656:15:1;;;42471:96:0::1;::::0;::::1;7638:34:1::0;7708:15;;7688:18;;;7681:43;7573:18;;42471:96:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42457:11;:110:::0;;-1:-1:-1;;;;;42457:110:0;;::::1;-1:-1:-1::0;;;;;;42457:110:0;;::::1;::::0;::::1;::::0;;42578:13:::1;:33:::0;;;;::::1;42457:110;42578:33;-1:-1:-1::0;;;;;;42578:33:0;;::::1;::::0;;;::::1;::::0;;;42457:11:::1;42624:36:::0;;;:23:::1;:36;::::0;;;;;;;:53;;-1:-1:-1;;42624:53:0;;::::1;42457:110:::0;42624:53;;::::1;::::0;;;42722:11;;;;::::1;42688:46:::0;;:33:::1;:46:::0;;;;;;:53;;;;::::1;;::::0;;-1:-1:-1;42311:438:0:o;28342:101::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;28417:12:::1;:18:::0;28342:101::o;26457:112::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26528:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;26528:33:0::1;26557:4;26528:33;::::0;;26457:112::o;27527:195::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;27602:12:::1;:18:::0;;;27698:15:::1;::::0;27678:14:::1;::::0;27643:12:::1;::::0;:71:::1;::::0;27698:15;27643:50:::1;::::0;;;27617:3;27643:16:::1;:30::i;27252:199::-:0;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;27346:3:::1;27329:14;:20;;;;27372:71;27427:15;;27372:50;27407:14;;27372:30;27389:12;;27372;;:16;;:30;;;;:::i;30314:128::-:0;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;30399:20:::1;:38:::0;30314:128::o;29163:156::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;29301:9:::1;::::0;29280:31:::1;::::0;29295:15:::1;::::0;29301:9:::1;;29295:2;:15;:::i;29280:31::-;29249:28;:62:::0;-1:-1:-1;29163:156:0:o;41469:413::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;41652:30:::1;::::0;-1:-1:-1;;;41652:30:0;;41676:4:::1;41652:30;::::0;::::1;3378:51:1::0;41610:12:0;;41588::::1;::::0;-1:-1:-1;;;;;41652:15:0;::::1;::::0;::::1;::::0;3351:18:1;;41652:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41634:48;;41722:15;41711:7;:26;;41703:79;;;::::0;-1:-1:-1;;;41703:79:0;;8126:2:1;41703:79:0::1;::::0;::::1;8108:21:1::0;8165:2;8145:18;;;8138:30;8204:34;8184:18;;;8177:62;-1:-1:-1;;;8255:18:1;;;8248:38;8303:19;;41703:79:0::1;7924:404:1::0;41703:79:0::1;41798:19:::0;;41795:79:::1;;41832:42;::::0;-1:-1:-1;;;41832:42:0;;-1:-1:-1;;;;;8525:32:1;;;41832:42:0::1;::::0;::::1;8507:51:1::0;8574:18;;;8567:34;;;41832:14:0;::::1;::::0;::::1;::::0;8480:18:1;;41832:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41795:79;41577:305;;41469:413:::0;;;:::o;15654:150::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;15763:1:::1;15747:6:::0;;15726:40:::1;::::0;-1:-1:-1;;;;;15747:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;15726:40:0;15763:1;;15726:40:::1;15794:1;15777:19:::0;;-1:-1:-1;;;;;;15777:19:0::1;::::0;;15654:150::o;40340:304::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;40458:3:::1;40440:21:::0;::::1;40432:92;;;::::0;-1:-1:-1;;;40432:92:0;;9064:2:1;40432:92:0::1;::::0;::::1;9046:21:1::0;9103:2;9083:18;;;9076:30;9142:34;9122:18;;;9115:62;9213:28;9193:18;;;9186:56;9259:19;;40432:92:0::1;8862:422:1::0;40432:92:0::1;40540:9;40535:102;40551:19:::0;;::::1;40535:102;;;40621:4;40592:13;:26;40606:8;;40615:1;40606:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40592:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40592:26:0;:33;;-1:-1:-1;;40592:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40572:3:::1;::::0;::::1;:::i;:::-;;;40535:102;;;;40340:304:::0;;:::o;28074:195::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;28149:12:::1;:18:::0;;;28245:15:::1;::::0;28225:14:::1;::::0;28207:12:::1;::::0;28190:71:::1;::::0;28245:15;28190:50:::1;::::0;;;28164:3;;28190:16:::1;:30::i;24245:87::-:0;24284:13;24317:7;24310:14;;;;;:::i;41008:310::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;41129:3:::1;41111:21:::0;::::1;41103:94;;;::::0;-1:-1:-1;;;41103:94:0;;9763:2:1;41103:94:0::1;::::0;::::1;9745:21:1::0;9802:2;9782:18;;;9775:30;9841:34;9821:18;;;9814:62;9912:30;9892:18;;;9885:58;9960:19;;41103:94:0::1;9561:424:1::0;41103:94:0::1;41213:9;41208:103;41224:19:::0;;::::1;41208:103;;;41294:5;41265:13;:26;41279:8;;41288:1;41279:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41265:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;41265:26:0;:34;;-1:-1:-1;;41265:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41245:3:::1;::::0;::::1;:::i;:::-;;;41208:103;;26119:269:::0;26212:4;26229:129;7614:10;26252:7;26261:96;26300:15;26261:96;;;;;;;;;;;;;;;;;7614:10;26261:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26261:34:0;;;;;;;;;;;;:38;:96::i;16689:345::-;16743:14;;-1:-1:-1;;;;;16743:14:0;16761:10;16743:28;16735:76;;;;-1:-1:-1;;;16735:76:0;;10192:2:1;16735:76:0;;;10174:21:1;10231:2;10211:18;;;10204:30;10270:34;10250:18;;;10243:62;-1:-1:-1;;;10321:18:1;;;10314:33;10364:19;;16735:76:0;9990:399:1;16735:76:0;16848:9;;16830:15;:27;16822:72;;;;-1:-1:-1;;;16822:72:0;;10596:2:1;16822:72:0;;;10578:21:1;10635:2;10615:18;;;10608:30;10674:33;10654:18;;;10647:61;10725:18;;16822:72:0;10394:355:1;16822:72:0;16939:14;;;16931:6;;16910:44;;-1:-1:-1;;;;;16939:14:0;;;;16931:6;;;;-1:-1:-1;;;;;;;;;;;16910:44:0;;16974:14;;;;16965:23;;-1:-1:-1;;;;;;16965:23:0;;;-1:-1:-1;;;;;16974:14:0;;16965:23;;;;16999:27;;;16689:345::o;24659:167::-;24737:4;24754:42;7614:10;24778:9;24789:6;24754:9;:42::i;30808:134::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30887:42:0::1;30932:5;30887:42:::0;;;:33:::1;:42;::::0;;;;:50;;-1:-1:-1;;30887:50:0::1;::::0;;30808:134::o;27055:123::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27130:32:0::1;27165:5;27130:32:::0;;;:23:::1;:32;::::0;;;;:40;;-1:-1:-1;;27130:40:0::1;::::0;;27055:123::o;29384:119::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;29470:16:::1;:25:::0;;-1:-1:-1;;;;;;29470:25:0::1;-1:-1:-1::0;;;;;29470:25:0;;;::::1;::::0;;;::::1;::::0;;29384:119::o;30004:173::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;30083:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;30083:32:0::1;-1:-1:-1::0;;;;30083:32:0;;::::1;;::::0;;30131:38:::1;::::0;::::1;::::0;::::1;::::0;30107:8;1888:14:1;1881:22;1863:41;;1851:2;1836:18;;1723:187;30131:38:0::1;;;;;;;;30004:173:::0;:::o;40082:166::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40162:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;;::::1;;:30;;:22:::0;:30:::1;40159:42;;;42075:154;42034:195::o:0;40159:42::-:1;-1:-1:-1::0;;;;;40211:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;:29;;-1:-1:-1;;40211:29:0::1;40236:4;40211:29;::::0;;40082:166;:::o;16385:228::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;16468:6:::1;::::0;;;16451:23;;-1:-1:-1;;;;;;16451:23:0;;::::1;-1:-1:-1::0;;;;;16468:6:0;::::1;16451:23;::::0;;;16485:19:::1;::::0;;16527:22:::1;16545:4:::0;16527:15:::1;:22;:::i;:::-;16515:9;:34:::0;16602:1:::1;16586:6:::0;;16565:40:::1;::::0;-1:-1:-1;;;;;16586:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16565:40:0;16602:1;;16565:40:::1;16385:228:::0;:::o;26641:111::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26710:26:0::1;26739:5;26710:26:::0;;;:17:::1;:26;::::0;;;;:34;;-1:-1:-1;;26710:34:0::1;::::0;;26641:111::o;40742:171::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40825:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;;::::1;;40822:43;;42075:154;42034:195::o:0;40822:43::-:1;-1:-1:-1::0;;;;;40875:22:0::1;40900:5;40875:22:::0;;;:13:::1;:22;::::0;;;;:30;;-1:-1:-1;;40875:30:0::1;::::0;;40742:171::o;15959:246::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16050:22:0;::::1;16042:73;;;::::0;-1:-1:-1;;;16042:73:0;;11089:2:1;16042:73:0::1;::::0;::::1;11071:21:1::0;11128:2;11108:18;;;11101:30;11167:34;11147:18;;;11140:62;-1:-1:-1;;;11218:18:1;;;11211:36;11264:19;;16042:73:0::1;10887:402:1::0;16042:73:0::1;16152:6;::::0;;16131:38:::1;::::0;-1:-1:-1;;;;;16131:38:0;;::::1;::::0;16152:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;16131:38:0;::::1;16180:6;:17:::0;;-1:-1:-1;;;;;;16180:17:0::1;-1:-1:-1::0;;;;;16180:17:0;;;::::1;::::0;;;::::1;::::0;;15959:246::o;26842:125::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26920:32:0::1;;::::0;;;:23:::1;:32;::::0;;;;:39;;-1:-1:-1;;26920:39:0::1;26955:4;26920:39;::::0;;26842:125::o;30558:136::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30640:42:0::1;;::::0;;;:33:::1;:42;::::0;;;;:49;;-1:-1:-1;;30640:49:0::1;30685:4;30640:49;::::0;;30558:136::o;29570:123::-;15223:6;;-1:-1:-1;;;;;15223:6:0;7614:10;15223:22;15215:67;;;;-1:-1:-1;;;15215:67:0;;;;;;;:::i;:::-;29658:18:::1;:27:::0;;-1:-1:-1;;;;;;29658:27:0::1;-1:-1:-1::0;;;;;29658:27:0;;;::::1;::::0;;;::::1;::::0;;29570:123::o;3320:98::-;3378:7;3405:5;3409:1;3405;:5;:::i;:::-;3398:12;3320:98;-1:-1:-1;;;3320:98:0:o;4058:::-;4116:7;4143:5;4147:1;4143;:5;:::i;33105:337::-;-1:-1:-1;;;;;33198:19:0;;33190:68;;;;-1:-1:-1;;;33190:68:0;;11669:2:1;33190:68:0;;;11651:21:1;11708:2;11688:18;;;11681:30;11747:34;11727:18;;;11720:62;-1:-1:-1;;;11798:18:1;;;11791:34;11842:19;;33190:68:0;11467:400:1;33190:68:0;-1:-1:-1;;;;;33277:21:0;;33269:68;;;;-1:-1:-1;;;33269:68:0;;12074:2:1;33269:68:0;;;12056:21:1;12113:2;12093:18;;;12086:30;12152:34;12132:18;;;12125:62;-1:-1:-1;;;12203:18:1;;;12196:32;12245:19;;33269:68:0;11872:398:1;33269:68:0;-1:-1:-1;;;;;33350:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33402:32;;1359:25:1;;;33402:32:0;;1332:18:1;33402:32:0;;;;;;;33105:337;;;:::o;33608:2518::-;-1:-1:-1;;;;;33730:18:0;;;;;;:38;;-1:-1:-1;;;;;;33752:16:0;;;;33730:38;33722:95;;;;-1:-1:-1;;;33722:95:0;;12477:2:1;33722:95:0;;;12459:21:1;12516:2;12496:18;;;12489:30;12555:34;12535:18;;;12528:62;-1:-1:-1;;;12606:18:1;;;12599:42;12658:19;;33722:95:0;12275:408:1;33722:95:0;-1:-1:-1;;;;;33837:19:0;;;;;;:13;:19;;;;;;;;33836:20;33828:52;;;;-1:-1:-1;;;33828:52:0;;12890:2:1;33828:52:0;;;12872:21:1;12929:2;12909:18;;;12902:30;-1:-1:-1;;;12948:18:1;;;12941:49;13007:18;;33828:52:0;12688:343:1;33828:52:0;33894:14;;;;33891:917;;;33959:19;;33949:6;33933:13;33943:2;-1:-1:-1;;;;;24627:16:0;24600:7;24627:16;;;:7;:16;;;;;;;24534:117;33933:13;:22;;;;:::i;:::-;:45;;:76;;;-1:-1:-1;;;;;;33982:27:0;;;;;;:23;:27;;;;;;;;33933:76;33925:165;;;;-1:-1:-1;;;33925:165:0;;13238:2:1;33925:165:0;;;13220:21:1;13277:2;13257:18;;;13250:30;13316:34;13296:18;;;13289:62;13387:33;13367:18;;;13360:61;13438:19;;33925:165:0;13036:427:1;33925:165:0;-1:-1:-1;;;;;34113:39:0;;;;;;:33;:39;;;;;;;;;:113;;-1:-1:-1;34206:20:0;;-1:-1:-1;;;;;34175:28:0;;;;;;:22;:28;;;;;;:51;;34206:20;34175:51;:::i;:::-;34156:15;:70;;34113:113;34105:207;;;;-1:-1:-1;;;34105:207:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34335:37:0;;;;;;:33;:37;;;;;;;;;:109;;-1:-1:-1;34424:20:0;;-1:-1:-1;;;;;34395:26:0;;;;;;:22;:26;;;;;;:49;;34424:20;34395:49;:::i;:::-;34376:15;:68;;34335:109;34327:203;;;;-1:-1:-1;;;34327:203:0;;;;;;;:::i;:::-;15049:7;15076:6;-1:-1:-1;;;;;34548:15:0;;;15076:6;;34548:15;;;;:32;;-1:-1:-1;15049:7:0;15076:6;-1:-1:-1;;;;;34567:13:0;;;15076:6;;34567:13;;34548:32;34545:129;;;34617:12;;34607:6;:22;;34599:75;;;;-1:-1:-1;;;34599:75:0;;14147:2:1;34599:75:0;;;14129:21:1;14186:2;14166:18;;;14159:30;14225:34;14205:18;;;14198:62;-1:-1:-1;;;14276:18:1;;;14269:38;14324:19;;34599:75:0;13945:404:1;34599:75:0;-1:-1:-1;;;;;34691:28:0;;;;;;;:22;:28;;;;;;34722:15;34691:46;;;;34752:26;;;;;;;:44;33891:917;35151:4;35102:28;24627:16;;;:7;:16;;;;;;35205:12;;35181:36;;35178:112;;-1:-1:-1;35266:12:0;;35178:112;35360:28;;35337:51;;;;;;;35417:53;;-1:-1:-1;35454:16:0;;-1:-1:-1;;;35454:16:0;;;;35453:17;35417:53;:89;;;;-1:-1:-1;35495:11:0;;-1:-1:-1;;;;;35487:19:0;;;35495:11;;35487:19;;35417:89;:127;;;;-1:-1:-1;35523:21:0;;-1:-1:-1;;;35523:21:0;;;;35417:127;35399:314;;;35593:28;;35571:50;;35665:36;35680:20;35665:14;:36::i;:::-;-1:-1:-1;;;;;35920:23:0;;35794:12;35920:23;;;:17;:23;;;;;;35809:4;;35920:23;;;:48;;-1:-1:-1;;;;;;35947:21:0;;;;;;:17;:21;;;;;;;;35920:48;35917:94;;;-1:-1:-1;35994:5:0;35917:94;36080:38;36095:4;36100:2;36103:6;36110:7;36080:14;:38::i;5599:240::-;5719:7;5780:12;5772:6;;;;5764:29;;;;-1:-1:-1;;;5764:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;5815:5:0;;;5599:240::o;36230:1668::-;21940:16;:23;;-1:-1:-1;;;;21940:23:0;-1:-1:-1;;;21940:23:0;;;36457:12:::1;::::0;21940:23;;36399:73:::1;::::0;36457:14:::1;::::0;36470:1:::1;::::0;36457:14:::1;:::i;:::-;36399:53;36436:15;;36399:32;36418:12;;36399:14;;:18;;:32;;;;:::i;:73::-;36377:95;;36483:18;36504:44;36536:11;36504:27;36521:9;;36504:12;:16;;:27;;;;:::i;:::-;:31:::0;::::1;:44::i;:::-;36483:65:::0;-1:-1:-1;36559:23:0::1;36585:28;:12:::0;36483:65;36585:16:::1;:28::i;:::-;36559:54:::0;-1:-1:-1;36649:21:0::1;36691:28;36708:10:::0;36691:16:::1;:28::i;:::-;36732:26;36761:41;:21;36787:14:::0;36761:25:::1;:41::i;:::-;36732:70;;36813:25;36853:26:::0;36894:23:::1;36954:1:::0;36937:14:::1;;:18;36934:197;;;37001:55;37044:11;37001:38;37024:14;;37001:18;:22;;:38;;;;:::i;:::-;:42:::0;::::1;:55::i;:::-;37073:18;::::0;:46:::1;::::0;36981:75;;-1:-1:-1;;;;;;37073:18:0::1;::::0;:46;::::1;;;::::0;36981:75;;37073:18:::1;:46:::0;:18;:46;36981:75;37073:18;:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;36934:197;37146:12;::::0;:16;37143:187:::1;;37206:53;37247:11;37206:36;37229:12;;37206:18;:22;;:36;;;;:::i;:53::-;37276:16;::::0;:42:::1;::::0;37188:71;;-1:-1:-1;;;;;;37276:16:0::1;::::0;:42;::::1;;;::::0;37188:71;;37276:16:::1;:42:::0;:16;:42;37188:71;37276:16;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;37143:187;37345:15;::::0;:19;37342:202:::1;;37411:56;37455:11;37411:39;37434:15;;37411:18;:22;;:39;;;;:::i;:56::-;37484:19;::::0;:48:::1;::::0;37390:77;;-1:-1:-1;;;;;;37484:19:0::1;::::0;:48;::::1;;;::::0;37390:77;;37484:19:::1;:48:::0;:19;:48;37390:77;37484:19;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;37342:202;37567:12;::::0;:16;37564:327:::1;;37630:86;37697:18:::0;37630:62:::1;37676:15:::0;37630:62;:18;37653:17;37630:22:::1;:41::i;:::-;:45:::0;::::1;:62::i;:86::-;37609:107;;37731:58;37744:7;15049::::0;15076:6;-1:-1:-1;;;;;15076:6:0;;15011:79;37744:7:::1;37753:15;37770:18;37731:12;:58::i;:::-;37811:68;::::0;;14778:25:1;;;14834:2;14819:18;;14812:34;;;14862:18;;;14855:34;;;37811:68:0::1;::::0;14766:2:1;14751:18;37811:68:0::1;;;;;;;37564:327;-1:-1:-1::0;;21986:16:0;:24;;-1:-1:-1;;;;21986:24:0;;;-1:-1:-1;;;;;;;36230:1668:0:o;39295:694::-;39418:11;;-1:-1:-1;;;;;39405:24:0;;;39418:11;;39405:24;:44;;;;;39448:1;39433:12;;:16;39405:44;39402:75;;;39464:13;:11;:13::i;:::-;39492:7;39488:40;;39514:14;:12;:14::i;:::-;39542:23;39567:12;39583:18;39594:6;39583:10;:18::i;:::-;-1:-1:-1;;;;;39630:15:0;;;;;;:7;:15;;;;;;39541:60;;-1:-1:-1;39541:60:0;-1:-1:-1;39630:27:0;;39650:6;39630:19;:27::i;:::-;-1:-1:-1;;;;;39612:15:0;;;;;;;:7;:15;;;;;;:45;;;;39689:18;;;;;;;:39;;39712:15;39689:22;:39::i;:::-;-1:-1:-1;;;;;39668:18:0;;;;;;:7;:18;;;;;:60;39741:22;39750:6;39758:4;39741:8;:22::i;:::-;39796:9;-1:-1:-1;;;;;39779:44:0;39788:6;-1:-1:-1;;;;;39779:44:0;;39807:15;39779:44;;;;1359:25:1;;1347:2;1332:18;;1213:177;39779:44:0;;;;;;;;39858:7;39854:41;;39880:15;32817:17;;32805:9;:29;32761:81;39880:15;39922:11;;-1:-1:-1;;;;;39909:24:0;;;39922:11;;39909:24;:44;;;;;39952:1;39937:12;;:16;39909:44;39906:75;;;39968:13;:11;:13::i;4457:98::-;4515:7;4542:5;4546:1;4542;:5;:::i;3701:98::-;3759:7;3786:5;3790:1;3786;:5;:::i;38006:583::-;38156:16;;;38170:1;38156:16;;;;;;;;38132:21;;38156:16;;;;;;;;;;-1:-1:-1;38156:16:0;38132:40;;38201:4;38183;38188:1;38183:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;38183:23:0;;;-1:-1:-1;;;;;38183:23:0;;;;;38227:13;;;;;;;;;-1:-1:-1;;;;;38227:13:0;-1:-1:-1;;;;;38227:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38217:4;38222:1;38217:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38217:30:0;;;:7;;;;;;;;;:30;38292:13;;38260:60;;38277:4;;38292:13;;;;38308:11;38260:8;:60::i;:::-;38359:13;;:222;;-1:-1:-1;;;38359:222:0;;:13;;;;-1:-1:-1;;;;;38359:13:0;;:64;;:222;;38438:11;;38464:1;;38508:4;;38535;;38555:15;;38359:222;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38684:530;38883:13;;38851:60;;38868:4;;38883:13;;;-1:-1:-1;;;;;38883:13:0;38899:11;38851:8;:60::i;:::-;38954:13;;:252;;-1:-1:-1;;;38954:252:0;;39024:4;38954:252;;;16488:34:1;16538:18;;;16531:34;;;39070:1:0;16581:18:1;;;16574:34;;;16624:18;;;16617:34;-1:-1:-1;;;;;16688:15:1;;;16667:19;;;16660:44;39180:15:0;16720:19:1;;;16713:35;38954:13:0;;;;;;;;:29;;38991:9;;16422:19:1;;38954:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32319:89::-;32387:12;;32373:9;;:27;;:13;:27::i;:::-;32361:9;:39;32319:89::o;32513:150::-;32559:9;;32556:26;;32513:150::o;32556:26::-;32622:9;;;32602:17;:29;-1:-1:-1;32642:13:0;;32513:150::o;31465:227::-;31524:7;31533;31553:12;31568:21;31581:7;31568:12;:21::i;:::-;31553:36;-1:-1:-1;31600:23:0;31626:17;:7;31553:36;31626:11;:17::i;:::-;31600:43;31679:4;;-1:-1:-1;31465:227:0;;-1:-1:-1;;;31465:227:0:o;31793:230::-;31864:8;;31861:155;;31930:4;31914:22;;;;:7;:22;;;;;;:32;;31941:4;31914:26;:32::i;:::-;31905:4;31889:22;;;;:7;:22;;;;;;;:57;;;;31966:38;;-1:-1:-1;;;;;31966:38:0;;;;;;;31999:4;1359:25:1;;1347:2;1332:18;;1213:177;31966:38:0;;;;;;;;31793:230;;:::o;32910:89::-;32978:12;;32964:9;;:27;;:13;:27::i;32101:153::-;32162:7;32189:57;32230:5;32189:22;32201:9;;32189:7;:11;;:22;;;;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:139::-;-1:-1:-1;;;;;282:31:1;;272:42;;262:70;;328:1;325;318:12;343:263;410:6;463:2;451:9;442:7;438:23;434:32;431:52;;;479:1;476;469:12;431:52;518:9;505:23;537:39;570:5;537:39;:::i;611:597::-;723:4;752:2;781;770:9;763:21;813:6;807:13;856:6;851:2;840:9;836:18;829:34;881:1;891:140;905:6;902:1;899:13;891:140;;;1000:14;;;996:23;;990:30;966:17;;;985:2;962:26;955:66;920:10;;891:140;;;1049:6;1046:1;1043:13;1040:91;;;1119:1;1114:2;1105:6;1094:9;1090:22;1086:31;1079:42;1040:91;-1:-1:-1;1192:2:1;1171:15;-1:-1:-1;;1167:29:1;1152:45;;;;1199:2;1148:54;;611:597;-1:-1:-1;;;611:597:1:o;1395:323::-;1463:6;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1579:9;1566:23;1598:39;1631:5;1598:39;:::i;:::-;1656:5;1708:2;1693:18;;;;1680:32;;-1:-1:-1;;;1395:323:1:o;2175:118::-;2261:5;2254:13;2247:21;2240:5;2237:32;2227:60;;2283:1;2280;2273:12;2298:241;2354:6;2407:2;2395:9;2386:7;2382:23;2378:32;2375:52;;;2423:1;2420;2413:12;2375:52;2462:9;2449:23;2481:28;2503:5;2481:28;:::i;2544:472::-;2621:6;2629;2637;2690:2;2678:9;2669:7;2665:23;2661:32;2658:52;;;2706:1;2703;2696:12;2658:52;2745:9;2732:23;2764:39;2797:5;2764:39;:::i;:::-;2822:5;-1:-1:-1;2879:2:1;2864:18;;2851:32;2892:41;2851:32;2892:41;:::i;:::-;2544:472;;2952:7;;-1:-1:-1;;;3006:2:1;2991:18;;;;2978:32;;2544:472::o;3664:615::-;3750:6;3758;3811:2;3799:9;3790:7;3786:23;3782:32;3779:52;;;3827:1;3824;3817:12;3779:52;3867:9;3854:23;3896:18;3937:2;3929:6;3926:14;3923:34;;;3953:1;3950;3943:12;3923:34;3991:6;3980:9;3976:22;3966:32;;4036:7;4029:4;4025:2;4021:13;4017:27;4007:55;;4058:1;4055;4048:12;4007:55;4098:2;4085:16;4124:2;4116:6;4113:14;4110:34;;;4140:1;4137;4130:12;4110:34;4193:7;4188:2;4178:6;4175:1;4171:14;4167:2;4163:23;4159:32;4156:45;4153:65;;;4214:1;4211;4204:12;4153:65;4245:2;4237:11;;;;;4267:6;;-1:-1:-1;3664:615:1;;-1:-1:-1;;;;3664:615:1:o;4492:404::-;4560:6;4568;4621:2;4609:9;4600:7;4596:23;4592:32;4589:52;;;4637:1;4634;4627:12;4589:52;4676:9;4663:23;4695:39;4728:5;4695:39;:::i;:::-;4753:5;-1:-1:-1;4810:2:1;4795:18;;4782:32;4823:41;4782:32;4823:41;:::i;:::-;4883:7;4873:17;;;4492:404;;;;;:::o;4901:356::-;5103:2;5085:21;;;5122:18;;;5115:30;5181:34;5176:2;5161:18;;5154:62;5248:2;5233:18;;4901:356::o;5262:127::-;5323:10;5318:3;5314:20;5311:1;5304:31;5354:4;5351:1;5344:15;5378:4;5375:1;5368:15;5394:422;5483:1;5526:5;5483:1;5540:270;5561:7;5551:8;5548:21;5540:270;;;5620:4;5616:1;5612:6;5608:17;5602:4;5599:27;5596:53;;;5629:18;;:::i;:::-;5679:7;5669:8;5665:22;5662:55;;;5699:16;;;;5662:55;5778:22;;;;5738:15;;;;5540:270;;;5544:3;5394:422;;;;;:::o;5821:806::-;5870:5;5900:8;5890:80;;-1:-1:-1;5941:1:1;5955:5;;5890:80;5989:4;5979:76;;-1:-1:-1;6026:1:1;6040:5;;5979:76;6071:4;6089:1;6084:59;;;;6157:1;6152:130;;;;6064:218;;6084:59;6114:1;6105:10;;6128:5;;;6152:130;6189:3;6179:8;6176:17;6173:43;;;6196:18;;:::i;:::-;-1:-1:-1;;6252:1:1;6238:16;;6267:5;;6064:218;;6366:2;6356:8;6353:16;6347:3;6341:4;6338:13;6334:36;6328:2;6318:8;6315:16;6310:2;6304:4;6301:12;6297:35;6294:77;6291:159;;;-1:-1:-1;6403:19:1;;;6435:5;;6291:159;6482:34;6507:8;6501:4;6482:34;:::i;:::-;6552:6;6548:1;6544:6;6540:19;6531:7;6528:32;6525:58;;;6563:18;;:::i;:::-;6601:20;;5821:806;-1:-1:-1;;;5821:806:1:o;6632:140::-;6690:5;6719:47;6760:4;6750:8;6746:19;6740:4;6719:47;:::i;6777:380::-;6856:1;6852:12;;;;6899;;;6920:61;;6974:4;6966:6;6962:17;6952:27;;6920:61;7027:2;7019:6;7016:14;6996:18;6993:38;6990:161;;;7073:10;7068:3;7064:20;7061:1;7054:31;7108:4;7105:1;7098:15;7136:4;7133:1;7126:15;6990:161;;6777:380;;;:::o;7162:259::-;7232:6;7285:2;7273:9;7264:7;7260:23;7256:32;7253:52;;;7301:1;7298;7291:12;7253:52;7333:9;7327:16;7352:39;7385:5;7352:39;:::i;7735:184::-;7805:6;7858:2;7846:9;7837:7;7833:23;7829:32;7826:52;;;7874:1;7871;7864:12;7826:52;-1:-1:-1;7897:16:1;;7735:184;-1:-1:-1;7735:184:1:o;8612:245::-;8679:6;8732:2;8720:9;8711:7;8707:23;8703:32;8700:52;;;8748:1;8745;8738:12;8700:52;8780:9;8774:16;8799:28;8821:5;8799:28;:::i;9289:127::-;9350:10;9345:3;9341:20;9338:1;9331:31;9381:4;9378:1;9371:15;9405:4;9402:1;9395:15;9421:135;9460:3;-1:-1:-1;;9481:17:1;;9478:43;;;9501:18;;:::i;:::-;-1:-1:-1;9548:1:1;9537:13;;9421:135::o;10754:128::-;10794:3;10825:1;10821:6;10818:1;10815:13;10812:39;;;10831:18;;:::i;:::-;-1:-1:-1;10867:9:1;;10754:128::o;11294:168::-;11334:7;11400:1;11396;11392:6;11388:14;11385:1;11382:21;11377:1;11370:9;11363:17;11359:45;11356:71;;;11407:18;;:::i;:::-;-1:-1:-1;11447:9:1;;11294:168::o;13468:472::-;13670:2;13652:21;;;13709:2;13689:18;;;13682:30;13748:34;13743:2;13728:18;;13721:62;13819:34;13814:2;13799:18;;13792:62;-1:-1:-1;;;13885:3:1;13870:19;;13863:35;13930:3;13915:19;;13468:472::o;14354:217::-;14394:1;14420;14410:132;;14464:10;14459:3;14455:20;14452:1;14445:31;14499:4;14496:1;14489:15;14527:4;14524:1;14517:15;14410:132;-1:-1:-1;14556:9:1;;14354:217::o;14900:125::-;14940:4;14968:1;14965;14962:8;14959:34;;;14973:18;;:::i;:::-;-1:-1:-1;15010:9:1;;14900:125::o;15162:980::-;15424:4;15472:3;15461:9;15457:19;15503:6;15492:9;15485:25;15529:2;15567:6;15562:2;15551:9;15547:18;15540:34;15610:3;15605:2;15594:9;15590:18;15583:31;15634:6;15669;15663:13;15700:6;15692;15685:22;15738:3;15727:9;15723:19;15716:26;;15777:2;15769:6;15765:15;15751:29;;15798:1;15808:195;15822:6;15819:1;15816:13;15808:195;;;15887:13;;-1:-1:-1;;;;;15883:39:1;15871:52;;15978:15;;;;15943:12;;;;15919:1;15837:9;15808:195;;;-1:-1:-1;;;;;;;16059:32:1;;;;16054:2;16039:18;;16032:60;-1:-1:-1;;;16123:3:1;16108:19;16101:35;16020:3;15162:980;-1:-1:-1;;;15162:980:1:o;16759:306::-;16847:6;16855;16863;16916:2;16904:9;16895:7;16891:23;16887:32;16884:52;;;16932:1;16929;16922:12;16884:52;16961:9;16955:16;16945:26;;17011:2;17000:9;16996:18;16990:25;16980:35;;17055:2;17044:9;17040:18;17034:25;17024:35;;16759:306;;;;;:::o
Swarm Source
ipfs://081cb9d7492c217d06623d9edadc431ceba185b159df91ec34ea3bd30168daa7
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.