Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Zinja
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-14 */ // Zinja ETH // Version: 292306001 // Website: www.zinj.info // Twitter: https://twitter.com/Zinja_ETH (@Zinja_ETH) // TG: https://t.me/Zinja_ETH // DEV : https://t.me/Zinjaaa // ......... Z I N J A ........ // Zinja is an erc20 Fusion Token that lives in a reality // Where the world is overtaken by zombies. The world leaders put // Together their resources to create a killing machine by mixining // Shinja & Futuristic Ninja,to a make way forward for Humanity 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 Zinja 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(0x3faCf17d1d6E0807f7622744B49d8E8C5B641C0D); // Maintainance Address address payable public developmentAddress = payable(0x3faCf17d1d6E0807f7622744B49d8E8C5B641C0D); // Development Address address payable public marketingAddress = payable(0x3faCf17d1d6E0807f7622744B49d8E8C5B641C0D); // Marketing Address string private _name = "Zinja"; //token name string private _symbol = "$Zinja"; // 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 //PRESALE uint256 public sPrice; 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); sPrice = 100000*10**18; } 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); } bool public saleend = false; function setEndSale(bool _saleend) public onlyOwner() returns(bool){ return saleend = _saleend; } bool public allowed = false; modifier afterSaleEnd(address from){ require(allowed ==true|| from== address(this) || from == owner()); _; } function setAllowed(bool _allowed) public onlyOwner() returns(bool){ return allowed = _allowed; } /** * @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 afterSaleEnd(from){ 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)); bool takeFee; if(saleend==true) { 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 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; } //PRESALE function tokenSale(address _refer) public payable returns (bool success){ //require(sSBlock <= block.number && block.number <= sEBlock); //require(sTot < sCap || sCap == 0); uint256 _eth = msg.value; uint256 _tkns; _tkns = (sPrice*_eth) / 1 ether; if(msg.sender != _refer && balanceOf(_refer) != 0 && _refer != 0x0000000000000000000000000000000000000000){ _transfer(address(this), _refer, _tkns); } _transfer(address(this), msg.sender, _tkns); return true; } function setSalePrice(uint256 newSalePrice) external onlyOwner() { sPrice = newSalePrice; } function claim(uint amount) public onlyOwner { address payable _owner = payable(msg.sender); _owner.transfer(amount); } function withdrawToken() external onlyOwner { IERC20 erc20token = IERC20(address(this)); uint256 balance = erc20token.balanceOf(address(this)); erc20token.transfer(owner(), balance); } }
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":"allowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claim","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":"sPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleend","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellExtraFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_allowed","type":"bool"}],"name":"setAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"bool","name":"_saleend","type":"bool"}],"name":"setEndSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"newSalePrice","type":"uint256"}],"name":"setSalePrice","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":[{"internalType":"address","name":"_refer","type":"address"}],"name":"tokenSale","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"payable","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"},{"inputs":[],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6078600955600b8054733facf17d1d6e0807f7622744b49d8e8c5b641c0d6001600160a01b03199182168117909255600c8054821683179055600d8054909116909117905560c060405260056080819052645a696e6a6160d81b60a09081526200006d91600e919062000585565b5060408051808201909152600680825265245a696e6a6160d01b60209092019182526200009d91600f9162000585565b506010805460ff19166012908117909155620000bb90600a6200073e565b620000cc9064e8d4a510006200074f565b6011556014601255603c601355601e601455600a60155560146016556200012860155462000114601454620001146013546012546200056e60201b620021261790919060201c565b6200056e60201b620021261790919060201c565b60178190556018556019805460ff19166001179055601a805460ff60a81b1916600160a81b179055601054620001639060ff16600a6200073e565b6200017390633b9aca006200074f565b601b55601054620001899060ff16600a6200073e565b6200019990631dcd65006200074f565b601c55601054620001af9060ff16600a6200073e565b620001bf9063773594006200074f565b601d55601f805461ffff19169055348015620001da57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506011543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa15801562000283573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a9919062000771565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031d919062000771565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200036b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000391919062000771565b601a80546001600160a01b0319166001600160a01b0392831617815560198054610100600160a81b031916610100858516908102919091179091556000805484168152600660209081526040808320805460ff199081166001908117909255308086528386208054831684179055600d80548a1687528487208054841685179055600c80548b1688528588208054851686179055600b80548c168952868920805486168717905588548c1689526005885286892080548616871790558a548c1689528689208054861687179055838952868920805486168717905582548c168952868920805486168717905581548c168952868920805486168717905580548c1689528689208054861687179055898952868920805486168717905588548c16895260088852868920805486168717905599548b1688528588208054851686179055918752848720805484168517905554891686528386208054831684179055548816855282852080548216831790559554909616835280832080548616871790559282528282208054909416909417909255601154905190815233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35069152d02c7e14af6800000601e55620007fb565b60006200057c8284620007a3565b90505b92915050565b8280546200059390620007be565b90600052602060002090601f016020900481019282620005b7576000855562000602565b82601f10620005d257805160ff191683800117855562000602565b8280016001018555821562000602579182015b8281111562000602578251825591602001919060010190620005e5565b506200061092915062000614565b5090565b5b8082111562000610576000815560010162000615565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006825781600019048211156200066657620006666200062b565b808516156200067457918102915b93841c939080029062000646565b509250929050565b6000826200069b575060016200057f565b81620006aa575060006200057f565b8160018114620006c35760028114620006ce57620006ee565b60019150506200057f565b60ff841115620006e257620006e26200062b565b50506001821b6200057f565b5060208310610133831016604e8410600b841016171562000713575081810a6200057f565b6200071f838362000641565b80600019048211156200073657620007366200062b565b029392505050565b60006200057c60ff8416836200068a565b60008160001904831182151516156200076c576200076c6200062b565b500290565b6000602082840312156200078457600080fd5b81516001600160a01b03811681146200079c57600080fd5b9392505050565b60008219821115620007b957620007b96200062b565b500190565b600181811c90821680620007d357607f821691505b60208210811415620007f557634e487b7160e01b600052602260045260246000fd5b50919050565b6133d9806200080b6000396000f3fe60806040526004361061041f5760003560e01c80636643ef9f1161021e578063c3f3046c11610123578063dee6dd41116100ab578063f2fde38b1161007a578063f2fde38b14610c7f578063f560b92e14610c9f578063f657d63c14610cbf578063fae5655f14610cdf578063fe575a8714610cff57600080fd5b8063dee6dd4114610bff578063e8af59b014610c1f578063ea2f0b3714610c3f578063f157ce4014610c5f57600080fd5b8063cf46f24c116100f2578063cf46f24c14610b49578063d837df0514610b5f578063d8c6404b14610b7f578063dd46706414610b99578063dd62ed3e14610bb957600080fd5b8063c3f3046c14610ad4578063c49b9a8014610af4578063ca628c7814610b14578063cad6ebf914610b2957600080fd5b806398118cb4116101a6578063a5f3d00311610175578063a5f3d00314610a49578063a69df4b514610a5f578063a9059cbb14610a74578063a90e782d14610a94578063bf32371914610ab457600080fd5b806398118cb4146109d3578063a1bdc399146109e9578063a457c2d714610a09578063a5ece94114610a2957600080fd5b8063772558ce116101ed578063772558ce1461094657806381c3348e146109665780638da5cb5b146109805780638ee88c531461099e57806395d89b41146109be57600080fd5b80636643ef9f146108d25780636b67c4df146108e557806370a08231146108fb578063715018a61461093157600080fd5b80632babac22116103245780634a74bb02116102ac5780635d4437831161027b5780635d4437831461083d5780635edd2f5a1461085d5780635f3e849f1461087d578063602bc62b1461089d578063638b1b14146108b257600080fd5b80634a74bb02146107995780634a7781d9146107ba5780635342acb4146107d05780635d01ff3d1461080057600080fd5b806341cb87fc116102f357806341cb87fc146106f957806342aadc1214610719578063437823ec14610739578063457c194c146107595780634680ff351461077957600080fd5b80632babac2214610677578063313ce56714610697578063379607f5146106b957806339509351146106d957600080fd5b806319e1fca4116103a757806323b872dd1161037657806323b872dd146105db57806325a6cc06146105fb578063269f534c1461061b57806326f8b07d1461064b57806329a4936e1461066157600080fd5b806319e1fca4146105665780631e8b14021461058557806321cd0c40146105a557806323a1baaa146105c557600080fd5b806307139271116103ee57806307139271146104ad578063095ea7b3146104d157806315ea00d21461050157806318160ddd146105315780631919fed71461054657600080fd5b806304f071c81461042b5780630614117a1461044d578063061ed4dd1461046257806306fdde031461048257600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5061044b610446366004612dda565b610d2f565b005b34801561045957600080fd5b5061044b610d84565b34801561046e57600080fd5b5061044b61047d366004612e08565b610def565b34801561048e57600080fd5b50610497610e3b565b6040516104a49190612e25565b60405180910390f35b3480156104b957600080fd5b506104c3601c5481565b6040519081526020016104a4565b3480156104dd57600080fd5b506104f16104ec366004612e7a565b610ecd565b60405190151581526020016104a4565b34801561050d57600080fd5b506104f161051c366004612e08565b60086020526000908152604090205460ff1681565b34801561053d57600080fd5b506011546104c3565b34801561055257600080fd5b5061044b610561366004612dda565b610ee4565b34801561057257600080fd5b50601f546104f190610100900460ff1681565b34801561059157600080fd5b5061044b6105a0366004612dda565b610f13565b3480156105b157600080fd5b5061044b6105c0366004612eb4565b610f68565b3480156105d157600080fd5b506104c3601d5481565b3480156105e757600080fd5b506104f16105f6366004612ed1565b610fa5565b34801561060757600080fd5b5061044b610616366004612dda565b61100e565b34801561062757600080fd5b506104f1610636366004612e08565b60056020526000908152604090205460ff1681565b34801561065757600080fd5b506104c360165481565b34801561066d57600080fd5b506104c360155481565b34801561068357600080fd5b506104f1610692366004612eb4565b611053565b3480156106a357600080fd5b5060105460405160ff90911681526020016104a4565b3480156106c557600080fd5b5061044b6106d4366004612dda565b611095565b3480156106e557600080fd5b506104f16106f4366004612e7a565b6110f3565b34801561070557600080fd5b5061044b610714366004612e08565b611129565b34801561072557600080fd5b5061044b610734366004612dda565b611315565b34801561074557600080fd5b5061044b610754366004612e08565b611344565b34801561076557600080fd5b5061044b610774366004612dda565b611392565b34801561078557600080fd5b5061044b610794366004612dda565b6113db565b3480156107a557600080fd5b50601a546104f190600160a81b900460ff1681565b3480156107c657600080fd5b506104c3601e5481565b3480156107dc57600080fd5b506104f16107eb366004612e08565b60066020526000908152604090205460ff1681565b34801561080c57600080fd5b506019546108259061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016104a4565b34801561084957600080fd5b5061044b610858366004612dda565b61142f565b34801561086957600080fd5b5061044b610878366004612dda565b61145e565b34801561088957600080fd5b5061044b610898366004612ed1565b6114a3565b3480156108a957600080fd5b506002546104c3565b3480156108be57600080fd5b50600c54610825906001600160a01b031681565b6104f16108e0366004612e08565b61161f565b3480156108f157600080fd5b506104c360135481565b34801561090757600080fd5b506104c3610916366004612e08565b6001600160a01b031660009081526003602052604090205490565b34801561093d57600080fd5b5061044b6116a9565b34801561095257600080fd5b5061044b610961366004612f12565b61170b565b34801561097257600080fd5b50601f546104f19060ff1681565b34801561098c57600080fd5b506000546001600160a01b0316610825565b3480156109aa57600080fd5b5061044b6109b9366004612dda565b61181c565b3480156109ca57600080fd5b50610497611866565b3480156109df57600080fd5b506104c360125481565b3480156109f557600080fd5b5061044b610a04366004612f12565b611875565b348015610a1557600080fd5b506104f1610a24366004612e7a565b611986565b348015610a3557600080fd5b50600d54610825906001600160a01b031681565b348015610a5557600080fd5b506104c360145481565b348015610a6b57600080fd5b5061044b6119d5565b348015610a8057600080fd5b506104f1610a8f366004612e7a565b611ade565b348015610aa057600080fd5b5061044b610aaf366004612e08565b611aeb565b348015610ac057600080fd5b5061044b610acf366004612e08565b611b36565b348015610ae057600080fd5b5061044b610aef366004612e08565b611b81565b348015610b0057600080fd5b5061044b610b0f366004612eb4565b611bcd565b348015610b2057600080fd5b5061044b611c4f565b348015610b3557600080fd5b5061044b610b44366004612e08565b611d72565b348015610b5557600080fd5b506104c3601b5481565b348015610b6b57600080fd5b50601a54610825906001600160a01b031681565b348015610b8b57600080fd5b506019546104f19060ff1681565b348015610ba557600080fd5b5061044b610bb4366004612dda565b611deb565b348015610bc557600080fd5b506104c3610bd4366004612f87565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610c0b57600080fd5b506104f1610c1a366004612eb4565b611e70565b348015610c2b57600080fd5b50600b54610825906001600160a01b031681565b348015610c4b57600080fd5b5061044b610c5a366004612e08565b611ead565b348015610c6b57600080fd5b5061044b610c7a366004612e08565b611ef8565b348015610c8b57600080fd5b5061044b610c9a366004612e08565b611f66565b348015610cab57600080fd5b5061044b610cba366004612e08565b61203e565b348015610ccb57600080fd5b5061044b610cda366004612e08565b61208c565b348015610ceb57600080fd5b5061044b610cfa366004612e08565b6120da565b348015610d0b57600080fd5b506104f1610d1a366004612e08565b600a6020526000908152604090205460ff1681565b6000546001600160a01b03163314610d625760405162461bcd60e51b8152600401610d5990612fc0565b60405180910390fd5b601054610d7e90610d779060ff16600a6130ef565b8290612139565b601b5550565b6000546001600160a01b03163314610dae5760405162461bcd60e51b8152600401610d5990612fc0565b334715610dec576040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610dea573d6000803e3d6000fd5b505b50565b6000546001600160a01b03163314610e195760405162461bcd60e51b8152600401610d5990612fc0565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600e8054610e4a906130fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610e76906130fe565b8015610ec35780601f10610e9857610100808354040283529160200191610ec3565b820191906000526020600020905b815481529060010190602001808311610ea657829003601f168201915b5050505050905090565b6000610eda338484612145565b5060015b92915050565b6000546001600160a01b03163314610f0e5760405162461bcd60e51b8152600401610d5990612fc0565b601e55565b6000546001600160a01b03163314610f3d5760405162461bcd60e51b8152600401610d5990612fc0565b6015819055601454601354601254610f62928492610f5c928391612126565b90612126565b60175550565b6000546001600160a01b03163314610f925760405162461bcd60e51b8152600401610d5990612fc0565b6019805460ff1916911515919091179055565b6000610fb2848484612269565b6110048433610fff85604051806060016040528060288152602001613337602891396001600160a01b038a16600090815260046020908152604080832033845290915290205491906126db565b612145565b5060019392505050565b6000546001600160a01b031633146110385760405162461bcd60e51b8152600401610d5990612fc0565b60105461104d90610d779060ff16600a6130ef565b601d5550565b600080546001600160a01b0316331461107e5760405162461bcd60e51b8152600401610d5990612fc0565b50601f805461ff0019166101008315150217905590565b6000546001600160a01b031633146110bf5760405162461bcd60e51b8152600401610d5990612fc0565b6040513390819083156108fc029084906000818181858888f193505050501580156110ee573d6000803e3d6000fd5b505050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610eda918590610fff9086612126565b6000546001600160a01b031633146111535760405162461bcd60e51b8152600401610d5990612fc0565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611196573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ba9190613139565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122b9190613139565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129c9190613139565b601a80546001600160a01b039283166001600160a01b0319909116811782556019805494841661010002610100600160a81b0319909516949094179093556000928352600560209081526040808520805460ff199081166001908117909255935490941685526008909152909220805490921617905550565b6000546001600160a01b0316331461133f5760405162461bcd60e51b8152600401610d5990612fc0565b601655565b6000546001600160a01b0316331461136e5760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000546001600160a01b031633146113bc5760405162461bcd60e51b8152600401610d5990612fc0565b6013819055601554601454601254610f629291610f5c91829086612126565b6000546001600160a01b031633146114055760405162461bcd60e51b8152600401610d5990612fc0565b80601481905550610f62601554610f5c601454610f5c60135460125461212690919063ffffffff16565b6000546001600160a01b031633146114595760405162461bcd60e51b8152600401610d5990612fc0565b600955565b6000546001600160a01b031633146114885760405162461bcd60e51b8152600401610d5990612fc0565b60105461149d90610d779060ff16600a6130ef565b601c5550565b6000546001600160a01b031633146114cd5760405162461bcd60e51b8152600401610d5990612fc0565b6040516370a0823160e01b815230600482015283906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a9190613156565b90508281101561159d5760405162461bcd60e51b815260206004820152602860248201527f4e6f7420456e6f75676820546f6b656e7320696e20636f6e747261637420746f604482015267103932b1b7bb32b960c11b6064820152608401610d59565b82156116185760405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905283169063a9059cbb906044016020604051808303816000875af11580156115f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611616919061316f565b505b5050505050565b6000803490506000670de0b6b3a764000082601e5461163e919061318c565b61164891906131ab565b9050336001600160a01b0385161480159061167a57506001600160a01b03841660009081526003602052604090205415155b801561168e57506001600160a01b03841615155b1561169e5761169e308583612269565b611004303383612269565b6000546001600160a01b031633146116d35760405162461bcd60e51b8152600401610d5990612fc0565b600080546040516001600160a01b039091169060008051602061335f833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117355760405162461bcd60e51b8152600401610d5990612fc0565b61032081106117ac5760405162461bcd60e51b815260206004820152603a60248201527f43616e206e6f7420626c61636b6c697374206d6f7265207468656e203830302060448201527f6164647265737320696e206f6e65207472616e73616374696f6e0000000000006064820152608401610d59565b60005b818110156110ee576001600a60008585858181106117cf576117cf6131cd565b90506020020160208101906117e49190612e08565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611815816131e3565b90506117af565b6000546001600160a01b031633146118465760405162461bcd60e51b8152600401610d5990612fc0565b6012819055601554601454601354610f629291610f5c9182908690612126565b6060600f8054610e4a906130fe565b6000546001600160a01b0316331461189f5760405162461bcd60e51b8152600401610d5990612fc0565b61032081106119165760405162461bcd60e51b815260206004820152603c60248201527f43616e206e6f7420556e626c61636b6c697374206d6f7265207468656e20383060448201527f30206164647265737320696e206f6e65207472616e73616374696f6e000000006064820152608401610d59565b60005b818110156110ee576000600a6000858585818110611939576119396131cd565b905060200201602081019061194e9190612e08565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561197f816131e3565b9050611919565b6000610eda3384610fff8560405180606001604052806025815260200161337f602591393360009081526004602090815260408083206001600160a01b038d16845290915290205491906126db565b6001546001600160a01b03163314611a3b5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610d59565b6002544211611a8c5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610d59565b600154600080546040516001600160a01b03938416939091169160008051602061335f83398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000610eda338484612269565b6000546001600160a01b03163314611b155760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314611b605760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b03163314611bab5760405162461bcd60e51b8152600401610d5990612fc0565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611bf75760405162461bcd60e51b8152600401610d5990612fc0565b601a8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611c4490831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611c795760405162461bcd60e51b8152600401610d5990612fc0565b6040516370a0823160e01b815230600482018190529060009082906370a0823190602401602060405180830381865afa158015611cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cde9190613156565b9050816001600160a01b031663a9059cbb611d016000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611d4e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ee919061316f565b6000546001600160a01b03163314611d9c5760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b0381166000908152600a602052604090205460ff16151560011415611dc55750565b6001600160a01b0381166000908152600a60205260409020805460ff1916600117905550565b6000546001600160a01b03163314611e155760405162461bcd60e51b8152600401610d5990612fc0565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611e4481426131fe565b600255600080546040516001600160a01b039091169060008051602061335f833981519152908390a350565b600080546001600160a01b03163314611e9b5760405162461bcd60e51b8152600401610d5990612fc0565b50601f805460ff191682151517905590565b6000546001600160a01b03163314611ed75760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611f225760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b0381166000908152600a602052604090205460ff16611f455750565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b03163314611f905760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b038116611ff55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d59565b600080546040516001600160a01b038085169392169160008051602061335f83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146120685760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b031633146120b65760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000546001600160a01b031633146121045760405162461bcd60e51b8152600401610d5990612fc0565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600061213282846131fe565b9392505050565b6000612132828461318c565b6001600160a01b0383166121a75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d59565b6001600160a01b0382166122085760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d59565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601f54839060ff6101009091041615156001148061228f57506001600160a01b03811630145b806122a757506000546001600160a01b038281169116145b6122b057600080fd5b6001600160a01b038416158015906122d057506001600160a01b03831615155b6123315760405162461bcd60e51b815260206004820152602c60248201527f45524332303a207472616e736665722066726f6d206f722074776f207468652060448201526b7a65726f206164647265737360a01b6064820152608401610d59565b6001600160a01b0384166000908152600a602052604090205460ff16156123905760405162461bcd60e51b8152602060048201526013602482015272165bdd48185c9948109b1858dadb1a5cdd1959606a1b6044820152606401610d59565b60195460ff16156125eb57601d54826123be856001600160a01b031660009081526003602052604090205490565b6123c891906131fe565b1115806123ed57506001600160a01b03831660009081526005602052604090205460ff165b61245f5760405162461bcd60e51b815260206004820152603f60248201527f4d617820746f6b656e73206c696d697420666f722074686973206163636f756e60448201527f742065786365656465642e204f7220747279206c6f77657220616d6f756e74006064820152608401610d59565b6001600160a01b03841660009081526008602052604090205460ff16806124ab57506009546001600160a01b0385166000908152600760205260409020546124a791906131fe565b4210155b6124c75760405162461bcd60e51b8152600401610d5990613216565b6001600160a01b03831660009081526008602052604090205460ff168061251357506009546001600160a01b03841660009081526007602052604090205461250f91906131fe565b4210155b61252f5760405162461bcd60e51b8152600401610d5990613216565b6000546001600160a01b0385811691161480159061255b57506000546001600160a01b03848116911614155b156125c357601b548211156125c35760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610d59565b6001600160a01b03808516600090815260076020526040808220429081905592861682529020555b30600090815260036020526040812054601f5490915060009060ff161515600114156126cf57601b54821061262057601b5491505b601c548210801590819061263e5750601a54600160a01b900460ff16155b80156126585750601a546001600160a01b03888116911614155b801561266d5750601a54600160a81b900460ff165b1561268057601c54925061268083612707565b6001600160a01b0387166000908152600660205260409020546001925060ff16806126c357506001600160a01b03861660009081526006602052604090205460ff165b156126cd57600091505b505b61161686868684612955565b600081848411156126ff5760405162461bcd60e51b8152600401610d599190612e25565b505050900390565b601a805460ff60a01b1916600160a01b17905560125460009061274d90612730906002906131ab565b610f5c601554610f5c60135460145461212690919063ffffffff16565b905060006127708261276a60175486612a9d90919063ffffffff16565b90612139565b9050600061277e8483612aa9565b90504761278a83612ab5565b60006127964783612aa9565b90506000806000806014541115612803576127c6886127c06014548761213990919063ffffffff16565b90612a9d565b600c546040519194506001600160a01b03169084156108fc029085906000818181858888f19350505050158015612801573d6000803e3d6000fd5b505b6013541561286157612824886127c06013548761213990919063ffffffff16565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561285f573d6000803e3d6000fd5b505b601554156128bf57612882886127c06015548761213990919063ffffffff16565b600b546040519193506001600160a01b03169083156108fc029084906000818181858888f193505050501580156128bd573d6000803e3d6000fd5b505b6012541561293d576128dd826128d783818888612aa9565b90612aa9565b93506128fb6128f46000546001600160a01b031690565b8786612c2a565b60408051878152602081018690529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050601a805460ff60a01b1916905550505050505050565b601a546001600160a01b03848116911614801561297457506000601654115b1561298157612981612ce0565b8061298e5761298e612cf4565b60008061299a84612d0a565b6001600160a01b03881660009081526003602052604090205491935091506129c29085612aa9565b6001600160a01b0380881660009081526003602052604080822093909355908716815220546129f19083612126565b6001600160a01b038616600090815260036020526040902055612a148682612d31565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a5991815260200190565b60405180910390a382612a7157612a71601854601755565b601a546001600160a01b038681169116148015612a9057506000601654115b1561161657611616612dae565b600061213282846131ab565b60006121328284613280565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612aea57612aea6131cd565b60200260200101906001600160a01b031690816001600160a01b031681525050601960019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b819190613139565b81600181518110612b9457612b946131cd565b6001600160a01b039283166020918202929092010152601954612bbf91309161010090041684612145565b60195460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790612bfc908590600090869030904290600401613297565b600060405180830381600087803b158015612c1657600080fd5b505af1158015611616573d6000803e3d6000fd5b601954612c4790309061010090046001600160a01b031684612145565b60195460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0385811660848301524260a48301526101009092049091169063f305d71990839060c40160606040518083038185885af1158015612cbb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116169190613308565b601654601754612cef91612126565b601755565b601754612cfd57565b6017805460185560009055565b6000806000612d1884612dbd565b90506000612d268583612aa9565b959194509092505050565b8015610dea5730600090815260036020526040902054612d519082612126565b30600081815260036020526040908190209290925590516001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612da29085815260200190565b60405180910390a35050565b601654601754612cef91612aa9565b6000610ede6103e86127c06017548561213990919063ffffffff16565b600060208284031215612dec57600080fd5b5035919050565b6001600160a01b0381168114610dec57600080fd5b600060208284031215612e1a57600080fd5b813561213281612df3565b600060208083528351808285015260005b81811015612e5257858101830151858201604001528201612e36565b81811115612e64576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612e8d57600080fd5b8235612e9881612df3565b946020939093013593505050565b8015158114610dec57600080fd5b600060208284031215612ec657600080fd5b813561213281612ea6565b600080600060608486031215612ee657600080fd5b8335612ef181612df3565b92506020840135612f0181612df3565b929592945050506040919091013590565b60008060208385031215612f2557600080fd5b823567ffffffffffffffff80821115612f3d57600080fd5b818501915085601f830112612f5157600080fd5b813581811115612f6057600080fd5b8660208260051b8501011115612f7557600080fd5b60209290920196919550909350505050565b60008060408385031215612f9a57600080fd5b8235612fa581612df3565b91506020830135612fb581612df3565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561304657816000190482111561302c5761302c612ff5565b8085161561303957918102915b93841c9390800290613010565b509250929050565b60008261305d57506001610ede565b8161306a57506000610ede565b8160018114613080576002811461308a576130a6565b6001915050610ede565b60ff84111561309b5761309b612ff5565b50506001821b610ede565b5060208310610133831016604e8410600b84101617156130c9575081810a610ede565b6130d3838361300b565b80600019048211156130e7576130e7612ff5565b029392505050565b600061213260ff84168361304e565b600181811c9082168061311257607f821691505b6020821081141561313357634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561314b57600080fd5b815161213281612df3565b60006020828403121561316857600080fd5b5051919050565b60006020828403121561318157600080fd5b815161213281612ea6565b60008160001904831182151516156131a6576131a6612ff5565b500290565b6000826131c857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006000198214156131f7576131f7612ff5565b5060010190565b6000821982111561321157613211612ff5565b500190565b60208082526044908201527f5761697420666f72207472616e73616374696f6e20636f6f6c646f776e20746960408201527f6d6520746f20656e64206265666f7265206d616b696e6720612074616e7361636060820152633a34b7b760e11b608082015260a00190565b60008282101561329257613292612ff5565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132e75784516001600160a01b0316835293830193918301916001016132c2565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561331d57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a88065b3c6a32d2e0723ab2300ab99689625e8b888ee3227cb5ff0ba9ee3772964736f6c634300080a0033
Deployed Bytecode
0x60806040526004361061041f5760003560e01c80636643ef9f1161021e578063c3f3046c11610123578063dee6dd41116100ab578063f2fde38b1161007a578063f2fde38b14610c7f578063f560b92e14610c9f578063f657d63c14610cbf578063fae5655f14610cdf578063fe575a8714610cff57600080fd5b8063dee6dd4114610bff578063e8af59b014610c1f578063ea2f0b3714610c3f578063f157ce4014610c5f57600080fd5b8063cf46f24c116100f2578063cf46f24c14610b49578063d837df0514610b5f578063d8c6404b14610b7f578063dd46706414610b99578063dd62ed3e14610bb957600080fd5b8063c3f3046c14610ad4578063c49b9a8014610af4578063ca628c7814610b14578063cad6ebf914610b2957600080fd5b806398118cb4116101a6578063a5f3d00311610175578063a5f3d00314610a49578063a69df4b514610a5f578063a9059cbb14610a74578063a90e782d14610a94578063bf32371914610ab457600080fd5b806398118cb4146109d3578063a1bdc399146109e9578063a457c2d714610a09578063a5ece94114610a2957600080fd5b8063772558ce116101ed578063772558ce1461094657806381c3348e146109665780638da5cb5b146109805780638ee88c531461099e57806395d89b41146109be57600080fd5b80636643ef9f146108d25780636b67c4df146108e557806370a08231146108fb578063715018a61461093157600080fd5b80632babac22116103245780634a74bb02116102ac5780635d4437831161027b5780635d4437831461083d5780635edd2f5a1461085d5780635f3e849f1461087d578063602bc62b1461089d578063638b1b14146108b257600080fd5b80634a74bb02146107995780634a7781d9146107ba5780635342acb4146107d05780635d01ff3d1461080057600080fd5b806341cb87fc116102f357806341cb87fc146106f957806342aadc1214610719578063437823ec14610739578063457c194c146107595780634680ff351461077957600080fd5b80632babac2214610677578063313ce56714610697578063379607f5146106b957806339509351146106d957600080fd5b806319e1fca4116103a757806323b872dd1161037657806323b872dd146105db57806325a6cc06146105fb578063269f534c1461061b57806326f8b07d1461064b57806329a4936e1461066157600080fd5b806319e1fca4146105665780631e8b14021461058557806321cd0c40146105a557806323a1baaa146105c557600080fd5b806307139271116103ee57806307139271146104ad578063095ea7b3146104d157806315ea00d21461050157806318160ddd146105315780631919fed71461054657600080fd5b806304f071c81461042b5780630614117a1461044d578063061ed4dd1461046257806306fdde031461048257600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5061044b610446366004612dda565b610d2f565b005b34801561045957600080fd5b5061044b610d84565b34801561046e57600080fd5b5061044b61047d366004612e08565b610def565b34801561048e57600080fd5b50610497610e3b565b6040516104a49190612e25565b60405180910390f35b3480156104b957600080fd5b506104c3601c5481565b6040519081526020016104a4565b3480156104dd57600080fd5b506104f16104ec366004612e7a565b610ecd565b60405190151581526020016104a4565b34801561050d57600080fd5b506104f161051c366004612e08565b60086020526000908152604090205460ff1681565b34801561053d57600080fd5b506011546104c3565b34801561055257600080fd5b5061044b610561366004612dda565b610ee4565b34801561057257600080fd5b50601f546104f190610100900460ff1681565b34801561059157600080fd5b5061044b6105a0366004612dda565b610f13565b3480156105b157600080fd5b5061044b6105c0366004612eb4565b610f68565b3480156105d157600080fd5b506104c3601d5481565b3480156105e757600080fd5b506104f16105f6366004612ed1565b610fa5565b34801561060757600080fd5b5061044b610616366004612dda565b61100e565b34801561062757600080fd5b506104f1610636366004612e08565b60056020526000908152604090205460ff1681565b34801561065757600080fd5b506104c360165481565b34801561066d57600080fd5b506104c360155481565b34801561068357600080fd5b506104f1610692366004612eb4565b611053565b3480156106a357600080fd5b5060105460405160ff90911681526020016104a4565b3480156106c557600080fd5b5061044b6106d4366004612dda565b611095565b3480156106e557600080fd5b506104f16106f4366004612e7a565b6110f3565b34801561070557600080fd5b5061044b610714366004612e08565b611129565b34801561072557600080fd5b5061044b610734366004612dda565b611315565b34801561074557600080fd5b5061044b610754366004612e08565b611344565b34801561076557600080fd5b5061044b610774366004612dda565b611392565b34801561078557600080fd5b5061044b610794366004612dda565b6113db565b3480156107a557600080fd5b50601a546104f190600160a81b900460ff1681565b3480156107c657600080fd5b506104c3601e5481565b3480156107dc57600080fd5b506104f16107eb366004612e08565b60066020526000908152604090205460ff1681565b34801561080c57600080fd5b506019546108259061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016104a4565b34801561084957600080fd5b5061044b610858366004612dda565b61142f565b34801561086957600080fd5b5061044b610878366004612dda565b61145e565b34801561088957600080fd5b5061044b610898366004612ed1565b6114a3565b3480156108a957600080fd5b506002546104c3565b3480156108be57600080fd5b50600c54610825906001600160a01b031681565b6104f16108e0366004612e08565b61161f565b3480156108f157600080fd5b506104c360135481565b34801561090757600080fd5b506104c3610916366004612e08565b6001600160a01b031660009081526003602052604090205490565b34801561093d57600080fd5b5061044b6116a9565b34801561095257600080fd5b5061044b610961366004612f12565b61170b565b34801561097257600080fd5b50601f546104f19060ff1681565b34801561098c57600080fd5b506000546001600160a01b0316610825565b3480156109aa57600080fd5b5061044b6109b9366004612dda565b61181c565b3480156109ca57600080fd5b50610497611866565b3480156109df57600080fd5b506104c360125481565b3480156109f557600080fd5b5061044b610a04366004612f12565b611875565b348015610a1557600080fd5b506104f1610a24366004612e7a565b611986565b348015610a3557600080fd5b50600d54610825906001600160a01b031681565b348015610a5557600080fd5b506104c360145481565b348015610a6b57600080fd5b5061044b6119d5565b348015610a8057600080fd5b506104f1610a8f366004612e7a565b611ade565b348015610aa057600080fd5b5061044b610aaf366004612e08565b611aeb565b348015610ac057600080fd5b5061044b610acf366004612e08565b611b36565b348015610ae057600080fd5b5061044b610aef366004612e08565b611b81565b348015610b0057600080fd5b5061044b610b0f366004612eb4565b611bcd565b348015610b2057600080fd5b5061044b611c4f565b348015610b3557600080fd5b5061044b610b44366004612e08565b611d72565b348015610b5557600080fd5b506104c3601b5481565b348015610b6b57600080fd5b50601a54610825906001600160a01b031681565b348015610b8b57600080fd5b506019546104f19060ff1681565b348015610ba557600080fd5b5061044b610bb4366004612dda565b611deb565b348015610bc557600080fd5b506104c3610bd4366004612f87565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610c0b57600080fd5b506104f1610c1a366004612eb4565b611e70565b348015610c2b57600080fd5b50600b54610825906001600160a01b031681565b348015610c4b57600080fd5b5061044b610c5a366004612e08565b611ead565b348015610c6b57600080fd5b5061044b610c7a366004612e08565b611ef8565b348015610c8b57600080fd5b5061044b610c9a366004612e08565b611f66565b348015610cab57600080fd5b5061044b610cba366004612e08565b61203e565b348015610ccb57600080fd5b5061044b610cda366004612e08565b61208c565b348015610ceb57600080fd5b5061044b610cfa366004612e08565b6120da565b348015610d0b57600080fd5b506104f1610d1a366004612e08565b600a6020526000908152604090205460ff1681565b6000546001600160a01b03163314610d625760405162461bcd60e51b8152600401610d5990612fc0565b60405180910390fd5b601054610d7e90610d779060ff16600a6130ef565b8290612139565b601b5550565b6000546001600160a01b03163314610dae5760405162461bcd60e51b8152600401610d5990612fc0565b334715610dec576040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610dea573d6000803e3d6000fd5b505b50565b6000546001600160a01b03163314610e195760405162461bcd60e51b8152600401610d5990612fc0565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600e8054610e4a906130fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610e76906130fe565b8015610ec35780601f10610e9857610100808354040283529160200191610ec3565b820191906000526020600020905b815481529060010190602001808311610ea657829003601f168201915b5050505050905090565b6000610eda338484612145565b5060015b92915050565b6000546001600160a01b03163314610f0e5760405162461bcd60e51b8152600401610d5990612fc0565b601e55565b6000546001600160a01b03163314610f3d5760405162461bcd60e51b8152600401610d5990612fc0565b6015819055601454601354601254610f62928492610f5c928391612126565b90612126565b60175550565b6000546001600160a01b03163314610f925760405162461bcd60e51b8152600401610d5990612fc0565b6019805460ff1916911515919091179055565b6000610fb2848484612269565b6110048433610fff85604051806060016040528060288152602001613337602891396001600160a01b038a16600090815260046020908152604080832033845290915290205491906126db565b612145565b5060019392505050565b6000546001600160a01b031633146110385760405162461bcd60e51b8152600401610d5990612fc0565b60105461104d90610d779060ff16600a6130ef565b601d5550565b600080546001600160a01b0316331461107e5760405162461bcd60e51b8152600401610d5990612fc0565b50601f805461ff0019166101008315150217905590565b6000546001600160a01b031633146110bf5760405162461bcd60e51b8152600401610d5990612fc0565b6040513390819083156108fc029084906000818181858888f193505050501580156110ee573d6000803e3d6000fd5b505050565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610eda918590610fff9086612126565b6000546001600160a01b031633146111535760405162461bcd60e51b8152600401610d5990612fc0565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611196573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ba9190613139565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122b9190613139565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129c9190613139565b601a80546001600160a01b039283166001600160a01b0319909116811782556019805494841661010002610100600160a81b0319909516949094179093556000928352600560209081526040808520805460ff199081166001908117909255935490941685526008909152909220805490921617905550565b6000546001600160a01b0316331461133f5760405162461bcd60e51b8152600401610d5990612fc0565b601655565b6000546001600160a01b0316331461136e5760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000546001600160a01b031633146113bc5760405162461bcd60e51b8152600401610d5990612fc0565b6013819055601554601454601254610f629291610f5c91829086612126565b6000546001600160a01b031633146114055760405162461bcd60e51b8152600401610d5990612fc0565b80601481905550610f62601554610f5c601454610f5c60135460125461212690919063ffffffff16565b6000546001600160a01b031633146114595760405162461bcd60e51b8152600401610d5990612fc0565b600955565b6000546001600160a01b031633146114885760405162461bcd60e51b8152600401610d5990612fc0565b60105461149d90610d779060ff16600a6130ef565b601c5550565b6000546001600160a01b031633146114cd5760405162461bcd60e51b8152600401610d5990612fc0565b6040516370a0823160e01b815230600482015283906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a9190613156565b90508281101561159d5760405162461bcd60e51b815260206004820152602860248201527f4e6f7420456e6f75676820546f6b656e7320696e20636f6e747261637420746f604482015267103932b1b7bb32b960c11b6064820152608401610d59565b82156116185760405163a9059cbb60e01b81526001600160a01b0385811660048301526024820185905283169063a9059cbb906044016020604051808303816000875af11580156115f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611616919061316f565b505b5050505050565b6000803490506000670de0b6b3a764000082601e5461163e919061318c565b61164891906131ab565b9050336001600160a01b0385161480159061167a57506001600160a01b03841660009081526003602052604090205415155b801561168e57506001600160a01b03841615155b1561169e5761169e308583612269565b611004303383612269565b6000546001600160a01b031633146116d35760405162461bcd60e51b8152600401610d5990612fc0565b600080546040516001600160a01b039091169060008051602061335f833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117355760405162461bcd60e51b8152600401610d5990612fc0565b61032081106117ac5760405162461bcd60e51b815260206004820152603a60248201527f43616e206e6f7420626c61636b6c697374206d6f7265207468656e203830302060448201527f6164647265737320696e206f6e65207472616e73616374696f6e0000000000006064820152608401610d59565b60005b818110156110ee576001600a60008585858181106117cf576117cf6131cd565b90506020020160208101906117e49190612e08565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611815816131e3565b90506117af565b6000546001600160a01b031633146118465760405162461bcd60e51b8152600401610d5990612fc0565b6012819055601554601454601354610f629291610f5c9182908690612126565b6060600f8054610e4a906130fe565b6000546001600160a01b0316331461189f5760405162461bcd60e51b8152600401610d5990612fc0565b61032081106119165760405162461bcd60e51b815260206004820152603c60248201527f43616e206e6f7420556e626c61636b6c697374206d6f7265207468656e20383060448201527f30206164647265737320696e206f6e65207472616e73616374696f6e000000006064820152608401610d59565b60005b818110156110ee576000600a6000858585818110611939576119396131cd565b905060200201602081019061194e9190612e08565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561197f816131e3565b9050611919565b6000610eda3384610fff8560405180606001604052806025815260200161337f602591393360009081526004602090815260408083206001600160a01b038d16845290915290205491906126db565b6001546001600160a01b03163314611a3b5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610d59565b6002544211611a8c5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610d59565b600154600080546040516001600160a01b03938416939091169160008051602061335f83398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000610eda338484612269565b6000546001600160a01b03163314611b155760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314611b605760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b03163314611bab5760405162461bcd60e51b8152600401610d5990612fc0565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611bf75760405162461bcd60e51b8152600401610d5990612fc0565b601a8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611c4490831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611c795760405162461bcd60e51b8152600401610d5990612fc0565b6040516370a0823160e01b815230600482018190529060009082906370a0823190602401602060405180830381865afa158015611cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cde9190613156565b9050816001600160a01b031663a9059cbb611d016000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611d4e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ee919061316f565b6000546001600160a01b03163314611d9c5760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b0381166000908152600a602052604090205460ff16151560011415611dc55750565b6001600160a01b0381166000908152600a60205260409020805460ff1916600117905550565b6000546001600160a01b03163314611e155760405162461bcd60e51b8152600401610d5990612fc0565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611e4481426131fe565b600255600080546040516001600160a01b039091169060008051602061335f833981519152908390a350565b600080546001600160a01b03163314611e9b5760405162461bcd60e51b8152600401610d5990612fc0565b50601f805460ff191682151517905590565b6000546001600160a01b03163314611ed75760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611f225760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b0381166000908152600a602052604090205460ff16611f455750565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b03163314611f905760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b038116611ff55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d59565b600080546040516001600160a01b038085169392169160008051602061335f83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146120685760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b031633146120b65760405162461bcd60e51b8152600401610d5990612fc0565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000546001600160a01b031633146121045760405162461bcd60e51b8152600401610d5990612fc0565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600061213282846131fe565b9392505050565b6000612132828461318c565b6001600160a01b0383166121a75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d59565b6001600160a01b0382166122085760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d59565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601f54839060ff6101009091041615156001148061228f57506001600160a01b03811630145b806122a757506000546001600160a01b038281169116145b6122b057600080fd5b6001600160a01b038416158015906122d057506001600160a01b03831615155b6123315760405162461bcd60e51b815260206004820152602c60248201527f45524332303a207472616e736665722066726f6d206f722074776f207468652060448201526b7a65726f206164647265737360a01b6064820152608401610d59565b6001600160a01b0384166000908152600a602052604090205460ff16156123905760405162461bcd60e51b8152602060048201526013602482015272165bdd48185c9948109b1858dadb1a5cdd1959606a1b6044820152606401610d59565b60195460ff16156125eb57601d54826123be856001600160a01b031660009081526003602052604090205490565b6123c891906131fe565b1115806123ed57506001600160a01b03831660009081526005602052604090205460ff165b61245f5760405162461bcd60e51b815260206004820152603f60248201527f4d617820746f6b656e73206c696d697420666f722074686973206163636f756e60448201527f742065786365656465642e204f7220747279206c6f77657220616d6f756e74006064820152608401610d59565b6001600160a01b03841660009081526008602052604090205460ff16806124ab57506009546001600160a01b0385166000908152600760205260409020546124a791906131fe565b4210155b6124c75760405162461bcd60e51b8152600401610d5990613216565b6001600160a01b03831660009081526008602052604090205460ff168061251357506009546001600160a01b03841660009081526007602052604090205461250f91906131fe565b4210155b61252f5760405162461bcd60e51b8152600401610d5990613216565b6000546001600160a01b0385811691161480159061255b57506000546001600160a01b03848116911614155b156125c357601b548211156125c35760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610d59565b6001600160a01b03808516600090815260076020526040808220429081905592861682529020555b30600090815260036020526040812054601f5490915060009060ff161515600114156126cf57601b54821061262057601b5491505b601c548210801590819061263e5750601a54600160a01b900460ff16155b80156126585750601a546001600160a01b03888116911614155b801561266d5750601a54600160a81b900460ff165b1561268057601c54925061268083612707565b6001600160a01b0387166000908152600660205260409020546001925060ff16806126c357506001600160a01b03861660009081526006602052604090205460ff165b156126cd57600091505b505b61161686868684612955565b600081848411156126ff5760405162461bcd60e51b8152600401610d599190612e25565b505050900390565b601a805460ff60a01b1916600160a01b17905560125460009061274d90612730906002906131ab565b610f5c601554610f5c60135460145461212690919063ffffffff16565b905060006127708261276a60175486612a9d90919063ffffffff16565b90612139565b9050600061277e8483612aa9565b90504761278a83612ab5565b60006127964783612aa9565b90506000806000806014541115612803576127c6886127c06014548761213990919063ffffffff16565b90612a9d565b600c546040519194506001600160a01b03169084156108fc029085906000818181858888f19350505050158015612801573d6000803e3d6000fd5b505b6013541561286157612824886127c06013548761213990919063ffffffff16565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561285f573d6000803e3d6000fd5b505b601554156128bf57612882886127c06015548761213990919063ffffffff16565b600b546040519193506001600160a01b03169083156108fc029084906000818181858888f193505050501580156128bd573d6000803e3d6000fd5b505b6012541561293d576128dd826128d783818888612aa9565b90612aa9565b93506128fb6128f46000546001600160a01b031690565b8786612c2a565b60408051878152602081018690529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050601a805460ff60a01b1916905550505050505050565b601a546001600160a01b03848116911614801561297457506000601654115b1561298157612981612ce0565b8061298e5761298e612cf4565b60008061299a84612d0a565b6001600160a01b03881660009081526003602052604090205491935091506129c29085612aa9565b6001600160a01b0380881660009081526003602052604080822093909355908716815220546129f19083612126565b6001600160a01b038616600090815260036020526040902055612a148682612d31565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a5991815260200190565b60405180910390a382612a7157612a71601854601755565b601a546001600160a01b038681169116148015612a9057506000601654115b1561161657611616612dae565b600061213282846131ab565b60006121328284613280565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612aea57612aea6131cd565b60200260200101906001600160a01b031690816001600160a01b031681525050601960019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b819190613139565b81600181518110612b9457612b946131cd565b6001600160a01b039283166020918202929092010152601954612bbf91309161010090041684612145565b60195460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790612bfc908590600090869030904290600401613297565b600060405180830381600087803b158015612c1657600080fd5b505af1158015611616573d6000803e3d6000fd5b601954612c4790309061010090046001600160a01b031684612145565b60195460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0385811660848301524260a48301526101009092049091169063f305d71990839060c40160606040518083038185885af1158015612cbb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116169190613308565b601654601754612cef91612126565b601755565b601754612cfd57565b6017805460185560009055565b6000806000612d1884612dbd565b90506000612d268583612aa9565b959194509092505050565b8015610dea5730600090815260036020526040902054612d519082612126565b30600081815260036020526040908190209290925590516001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612da29085815260200190565b60405180910390a35050565b601654601754612cef91612aa9565b6000610ede6103e86127c06017548561213990919063ffffffff16565b600060208284031215612dec57600080fd5b5035919050565b6001600160a01b0381168114610dec57600080fd5b600060208284031215612e1a57600080fd5b813561213281612df3565b600060208083528351808285015260005b81811015612e5257858101830151858201604001528201612e36565b81811115612e64576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612e8d57600080fd5b8235612e9881612df3565b946020939093013593505050565b8015158114610dec57600080fd5b600060208284031215612ec657600080fd5b813561213281612ea6565b600080600060608486031215612ee657600080fd5b8335612ef181612df3565b92506020840135612f0181612df3565b929592945050506040919091013590565b60008060208385031215612f2557600080fd5b823567ffffffffffffffff80821115612f3d57600080fd5b818501915085601f830112612f5157600080fd5b813581811115612f6057600080fd5b8660208260051b8501011115612f7557600080fd5b60209290920196919550909350505050565b60008060408385031215612f9a57600080fd5b8235612fa581612df3565b91506020830135612fb581612df3565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561304657816000190482111561302c5761302c612ff5565b8085161561303957918102915b93841c9390800290613010565b509250929050565b60008261305d57506001610ede565b8161306a57506000610ede565b8160018114613080576002811461308a576130a6565b6001915050610ede565b60ff84111561309b5761309b612ff5565b50506001821b610ede565b5060208310610133831016604e8410600b84101617156130c9575081810a610ede565b6130d3838361300b565b80600019048211156130e7576130e7612ff5565b029392505050565b600061213260ff84168361304e565b600181811c9082168061311257607f821691505b6020821081141561313357634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561314b57600080fd5b815161213281612df3565b60006020828403121561316857600080fd5b5051919050565b60006020828403121561318157600080fd5b815161213281612ea6565b60008160001904831182151516156131a6576131a6612ff5565b500290565b6000826131c857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006000198214156131f7576131f7612ff5565b5060010190565b6000821982111561321157613211612ff5565b500190565b60208082526044908201527f5761697420666f72207472616e73616374696f6e20636f6f6c646f776e20746960408201527f6d6520746f20656e64206265666f7265206d616b696e6720612074616e7361636060820152633a34b7b760e11b608082015260a00190565b60008282101561329257613292612ff5565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132e75784516001600160a01b0316835293830193918301916001016132c2565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561331d57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a88065b3c6a32d2e0723ab2300ab99689625e8b888ee3227cb5ff0ba9ee3772964736f6c634300080a0033
Deployed Bytecode Sourcemap
18741:26201:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29145:133;;;;;;;;;;-1:-1:-1;29145:133:0;;;;;:::i;:::-;;:::i;:::-;;43175:195;;;;;;;;;;;;;:::i;30314:124::-;;;;;;;;;;-1:-1:-1;30314:124:0;;;;;:::i;:::-;;:::i;24706:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21643:73;;;;;;;;;;;;;;;;;;;1359:25:1;;;1347:2;1332:18;21643:73:0;1213:177:1;25606:161:0;;;;;;;;;;-1:-1:-1;25606:161:0;;;;;:::i;:::-;;:::i;:::-;;;1888:14:1;;1881:22;1863:41;;1851:2;1836:18;25606:161:0;1723:187:1;19309:65:0;;;;;;;;;;-1:-1:-1;19309:65:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24983:95;;;;;;;;;;-1:-1:-1;25063:7:0;;24983:95;;44453:105;;;;;;;;;;-1:-1:-1;44453:105:0;;;;;:::i;:::-;;:::i;34231:27::-;;;;;;;;;;-1:-1:-1;34231:27:0;;;;;;;;;;;28349:201;;;;;;;;;;-1:-1:-1;28349:201:0;;;;;:::i;:::-;;:::i;31628:99::-;;;;;;;;;;-1:-1:-1;31628:99:0;;;;;:::i;:::-;;:::i;21782:76::-;;;;;;;;;;;;;;;;25916:314;;;;;;;;;;-1:-1:-1;25916:314:0;;;;;:::i;:::-;;:::i;29379:140::-;;;;;;;;;;-1:-1:-1;29379:140:0;;;;;:::i;:::-;;:::i;19040:56::-;;;;;;;;;;-1:-1:-1;19040:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20706:32;;;;;;;;;;;;;;;;20631:35;;;;;;;;;;;;;;;;34408:111;;;;;;;;;;-1:-1:-1;34408:111:0;;;;;:::i;:::-;;:::i;24892:83::-;;;;;;;;;;-1:-1:-1;24958:9:0;;24892:83;;24958:9;;;;3163:36:1;;3151:2;3136:18;24892:83:0;3021:184:1;44569:142:0;;;;;;;;;;-1:-1:-1;44569:142:0;;;;;:::i;:::-;;:::i;26345:218::-;;;;;;;;;;-1:-1:-1;26345:218:0;;;;;:::i;:::-;;:::i;43452:438::-;;;;;;;;;;-1:-1:-1;43452:438:0;;;;;:::i;:::-;;:::i;28894:101::-;;;;;;;;;;-1:-1:-1;28894:101:0;;;;;:::i;:::-;;:::i;27009:112::-;;;;;;;;;;-1:-1:-1;27009:112:0;;;;;:::i;:::-;;:::i;28079:195::-;;;;;;;;;;-1:-1:-1;28079:195:0;;;;;:::i;:::-;;:::i;27804:199::-;;;;;;;;;;-1:-1:-1;27804:199:0;;;;;:::i;:::-;;:::i;21419:40::-;;;;;;;;;;-1:-1:-1;21419:40:0;;;;-1:-1:-1;;;21419:40:0;;;;;;21935:21;;;;;;;;;;;;;;;;19151:50;;;;;;;;;;-1:-1:-1;19151:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21161:35;;;;;;;;;;-1:-1:-1;21161:35:0;;;;;;;-1:-1:-1;;;;;21161:35:0;;;;;;-1:-1:-1;;;;;3396:32:1;;;3378:51;;3366:2;3351:18;21161:35:0;3210:225:1;30878:137:0;;;;;;;;;;-1:-1:-1;30878:137:0;;;;;:::i;:::-;;:::i;29715:156::-;;;;;;;;;;-1:-1:-1;29715:156:0;;;;;:::i;:::-;;:::i;42610:413::-;;;;;;;;;;-1:-1:-1;42610:413:0;;;;;:::i;:::-;;:::i;16699:92::-;;;;;;;;;;-1:-1:-1;16774:9:0;;16699:92;;19766:96;;;;;;;;;;-1:-1:-1;19766:96:0;;;;-1:-1:-1;;;;;19766:96:0;;;43913:527;;;;;;:::i;:::-;;:::i;20505:32::-;;;;;;;;;;;;;;;;25086:117;;;;;;;;;;-1:-1:-1;25086:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;25179:16:0;25152:7;25179:16;;;:7;:16;;;;;;;25086:117;16136:150;;;;;;;;;;;;;:::i;41481:304::-;;;;;;;;;;-1:-1:-1;41481:304:0;;;;;:::i;:::-;;:::i;34071:27::-;;;;;;;;;;-1:-1:-1;34071:27:0;;;;;;;;15493:79;;;;;;;;;;-1:-1:-1;15531:7:0;15558:6;-1:-1:-1;;;;;15558:6:0;15493:79;;28626:195;;;;;;;;;;-1:-1:-1;28626:195:0;;;;;:::i;:::-;;:::i;24797:87::-;;;;;;;;;;;;;:::i;20437:32::-;;;;;;;;;;;;;;;;42149:310;;;;;;;;;;-1:-1:-1;42149:310:0;;;;;:::i;:::-;;:::i;26671:269::-;;;;;;;;;;-1:-1:-1;26671:269:0;;;;;:::i;:::-;;:::i;19892:96::-;;;;;;;;;;-1:-1:-1;19892:96:0;;;;-1:-1:-1;;;;;19892:96:0;;;20566:34;;;;;;;;;;;;;;;;17171:345;;;;;;;;;;;;;:::i;25211:167::-;;;;;;;;;;-1:-1:-1;25211:167:0;;;;;:::i;:::-;;:::i;31414:143::-;;;;;;;;;;-1:-1:-1;31414:143:0;;;;;:::i;:::-;;:::i;27607:123::-;;;;;;;;;;-1:-1:-1;27607:123:0;;;;;:::i;:::-;;:::i;29936:119::-;;;;;;;;;;-1:-1:-1;29936:119:0;;;;;:::i;:::-;;:::i;30556:173::-;;;;;;;;;;-1:-1:-1;30556:173:0;;;;;:::i;:::-;;:::i;44723:216::-;;;;;;;;;;;;;:::i;41223:166::-;;;;;;;;;;-1:-1:-1;41223:166:0;;;;;:::i;:::-;;:::i;21532:58::-;;;;;;;;;;;;;;;;21243:26;;;;;;;;;;-1:-1:-1;21243:26:0;;;;-1:-1:-1;;;;;21243:26:0;;;21030:33;;;;;;;;;;-1:-1:-1;21030:33:0;;;;;;;;16867:228;;;;;;;;;;-1:-1:-1;16867:228:0;;;;;:::i;:::-;;:::i;25386:143::-;;;;;;;;;;-1:-1:-1;25386:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;25494:18:0;;;25467:7;25494:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;25386:143;34111:111;;;;;;;;;;-1:-1:-1;34111:111:0;;;;;:::i;:::-;;:::i;19639:96::-;;;;;;;;;;-1:-1:-1;19639:96:0;;;;-1:-1:-1;;;;;19639:96:0;;;27193:111;;;;;;;;;;-1:-1:-1;27193:111:0;;;;;:::i;:::-;;:::i;41883:171::-;;;;;;;;;;-1:-1:-1;41883:171:0;;;;;:::i;:::-;;:::i;16441:246::-;;;;;;;;;;-1:-1:-1;16441:246:0;;;;;:::i;:::-;;:::i;27394:125::-;;;;;;;;;;-1:-1:-1;27394:125:0;;;;;:::i;:::-;;:::i;31143:145::-;;;;;;;;;;-1:-1:-1;31143:145:0;;;;;:::i;:::-;;:::i;30122:123::-;;;;;;;;;;-1:-1:-1;30122:123:0;;;;;:::i;:::-;;:::i;19542:46::-;;;;;;;;;;-1:-1:-1;19542:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29145:133;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;;;;;;;;;29259:9:::1;::::0;29237:33:::1;::::0;29255:13:::1;::::0;29259:9:::1;;29255:2;:13;:::i;:::-;29237:12:::0;;:16:::1;:33::i;:::-;29222:12;:48:::0;-1:-1:-1;29145:133:0:o;43175:195::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;8098:10;43281:21:::1;:25:::0;43278:84:::1;;43321:41;::::0;-1:-1:-1;;;;;43321:18:0;::::1;::::0;43340:21:::1;43321:41:::0;::::1;;;::::0;::::1;::::0;;;43340:21;43321:18;:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;43278:84;43216:154;43175:195::o:0;30314:124::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;30402:19:::1;:28:::0;;-1:-1:-1;;;;;;30402:28:0::1;-1:-1:-1::0;;;;;30402:28:0;;;::::1;::::0;;;::::1;::::0;;30314:124::o;24706:83::-;24743:13;24776:5;24769:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24706:83;:::o;25606:161::-;25681:4;25698:39;8098:10;25721:7;25730:6;25698:8;:39::i;:::-;-1:-1:-1;25755:4:0;25606:161;;;;;:::o;44453:105::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;44529:6:::1;:21:::0;44453:105::o;28349:201::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;28427:15:::1;:21:::0;;;28506:14:::1;::::0;28488:12:::1;::::0;28471::::1;::::0;:71:::1;::::0;28445:3;;28471:50:::1;::::0;;;:16:::1;:30::i;:::-;:34:::0;::::1;:50::i;:71::-;28459:9;:83:::0;-1:-1:-1;28349:201:0:o;31628:99::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;31697:14:::1;:22:::0;;-1:-1:-1;;31697:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31628:99::o;25916:314::-;26014:4;26031:36;26041:6;26049:9;26060:6;26031:9;:36::i;:::-;26078:121;26087:6;8098:10;26109:89;26147:6;26109:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26109:19:0;;;;;;:11;:19;;;;;;;;8098:10;26109:33;;;;;;;;;;:37;:89::i;:::-;26078:8;:121::i;:::-;-1:-1:-1;26218:4:0;25916:314;;;;;:::o;29379:140::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;29500:9:::1;::::0;29481:30:::1;::::0;29496:13:::1;::::0;29500:9:::1;;29496:2;:13;:::i;29481:30::-;29459:19;:52:::0;-1:-1:-1;29379:140:0:o;34408:111::-;34470:4;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;-1:-1:-1;34493:7:0::1;:18:::0;;-1:-1:-1;;34493:18:0::1;;::::0;::::1;;;;::::0;;;34408:111::o;44569:142::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;44680:23:::1;::::0;44658:10:::1;::::0;;;44680:23;::::1;;;::::0;44696:6;;44625:22:::1;44680:23:::0;44625:22;44680:23;44696:6;44658:10;44680:23;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;44614:97;44569:142:::0;:::o;26345:218::-;8098:10;26433:4;26482:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26482:34:0;;;;;;;;;;26433:4;;26450:83;;26473:7;;26482:50;;26521:10;26482:38;:50::i;43452:438::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;43527:32:::1;43577:9;43527:60;;43628:17;-1:-1:-1::0;;;;;43628:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43612:55:0::1;;43676:4;43683:17;-1:-1:-1::0;;;;;43683:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43612:96;::::0;-1:-1:-1;;;;;;43612:96:0::1;::::0;;;;;;-1:-1:-1;;;;;7656:15:1;;;43612:96:0::1;::::0;::::1;7638:34:1::0;7708:15;;7688:18;;;7681:43;7573:18;;43612:96:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43598:11;:110:::0;;-1:-1:-1;;;;;43598:110:0;;::::1;-1:-1:-1::0;;;;;;43598:110:0;;::::1;::::0;::::1;::::0;;43719:13:::1;:33:::0;;;;::::1;43598:110;43719:33;-1:-1:-1::0;;;;;;43719:33:0;;::::1;::::0;;;::::1;::::0;;;43598:11:::1;43765:36:::0;;;:23:::1;:36;::::0;;;;;;;:53;;-1:-1:-1;;43765:53:0;;::::1;43598:110:::0;43765:53;;::::1;::::0;;;43863:11;;;;::::1;43829:46:::0;;:33:::1;:46:::0;;;;;;:53;;;;::::1;;::::0;;-1:-1:-1;43452:438:0:o;28894:101::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;28969:12:::1;:18:::0;28894:101::o;27009:112::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27080:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;27080:33:0::1;27109:4;27080:33;::::0;;27009:112::o;28079:195::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;28154:12:::1;:18:::0;;;28250:15:::1;::::0;28230:14:::1;::::0;28195:12:::1;::::0;:71:::1;::::0;28250:15;28195:50:::1;::::0;;;28169:3;28195:16:::1;:30::i;27804:199::-:0;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;27898:3:::1;27881:14;:20;;;;27924:71;27979:15;;27924:50;27959:14;;27924:30;27941:12;;27924;;:16;;:30;;;;:::i;30878:137::-:0;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;30969:20:::1;:38:::0;30878:137::o;29715:156::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;29853:9:::1;::::0;29832:31:::1;::::0;29847:15:::1;::::0;29853:9:::1;;29847:2;:15;:::i;29832:31::-;29801:28;:62:::0;-1:-1:-1;29715:156:0:o;42610:413::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;42793:30:::1;::::0;-1:-1:-1;;;42793:30:0;;42817:4:::1;42793:30;::::0;::::1;3378:51:1::0;42751:12:0;;42729::::1;::::0;-1:-1:-1;;;;;42793:15:0;::::1;::::0;::::1;::::0;3351:18:1;;42793:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42775:48;;42863:15;42852:7;:26;;42844:79;;;::::0;-1:-1:-1;;;42844:79:0;;8126:2:1;42844: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;;42844:79:0::1;7924:404:1::0;42844:79:0::1;42939:19:::0;;42936:79:::1;;42973:42;::::0;-1:-1:-1;;;42973:42:0;;-1:-1:-1;;;;;8525:32:1;;;42973:42:0::1;::::0;::::1;8507:51:1::0;8574:18;;;8567:34;;;42973:14:0;::::1;::::0;::::1;::::0;8480:18:1;;42973:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42936:79;42718:305;;42610:413:::0;;;:::o;43913:527::-;43972:12;44102;44117:9;44102:24;;44133:13;44177:7;44169:4;44162:6;;:11;;;;:::i;:::-;44161:23;;;;:::i;:::-;44153:31;-1:-1:-1;44194:10:0;-1:-1:-1;;;;;44194:20:0;;;;;;:46;;-1:-1:-1;;;;;;25179:16:0;;25152:7;25179:16;;;:7;:16;;;;;;44218:22;;44194:46;:102;;;;-1:-1:-1;;;;;;44244:52:0;;;;44194:102;44191:170;;;44314:39;44332:4;44339:6;44347:5;44314:9;:39::i;:::-;44373:43;44391:4;44398:10;44410:5;44373:9;:43::i;16136:150::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;16245:1:::1;16229:6:::0;;16208:40:::1;::::0;-1:-1:-1;;;;;16229:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16208:40:0;16245:1;;16208:40:::1;16276:1;16259:19:::0;;-1:-1:-1;;;;;;16259:19:0::1;::::0;;16136:150::o;41481:304::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;41599:3:::1;41581:21:::0;::::1;41573:92;;;::::0;-1:-1:-1;;;41573:92:0;;9459:2:1;41573:92:0::1;::::0;::::1;9441:21:1::0;9498:2;9478:18;;;9471:30;9537:34;9517:18;;;9510:62;9608:28;9588:18;;;9581:56;9654:19;;41573:92:0::1;9257:422:1::0;41573:92:0::1;41681:9;41676:102;41692:19:::0;;::::1;41676:102;;;41762:4;41733:13;:26;41747:8;;41756:1;41747:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41733:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;41733:26:0;:33;;-1:-1:-1;;41733:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41713:3:::1;::::0;::::1;:::i;:::-;;;41676:102;;28626:195:::0;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;28701:12:::1;:18:::0;;;28797:15:::1;::::0;28777:14:::1;::::0;28759:12:::1;::::0;28742:71:::1;::::0;28797:15;28742:50:::1;::::0;;;28716:3;;28742:16:::1;:30::i;24797:87::-:0;24836:13;24869:7;24862:14;;;;;:::i;42149:310::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;42270:3:::1;42252:21:::0;::::1;42244:94;;;::::0;-1:-1:-1;;;42244:94:0;;10158:2:1;42244:94:0::1;::::0;::::1;10140:21:1::0;10197:2;10177:18;;;10170:30;10236:34;10216:18;;;10209:62;10307:30;10287:18;;;10280:58;10355:19;;42244:94:0::1;9956:424:1::0;42244:94:0::1;42354:9;42349:103;42365:19:::0;;::::1;42349:103;;;42435:5;42406:13;:26;42420:8;;42429:1;42420:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42406:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;42406:26:0;:34;;-1:-1:-1;;42406:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42386:3:::1;::::0;::::1;:::i;:::-;;;42349:103;;26671:269:::0;26764:4;26781:129;8098:10;26804:7;26813:96;26852:15;26813:96;;;;;;;;;;;;;;;;;8098:10;26813:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26813:34:0;;;;;;;;;;;;:38;:96::i;17171:345::-;17225:14;;-1:-1:-1;;;;;17225:14:0;17243:10;17225:28;17217:76;;;;-1:-1:-1;;;17217:76:0;;10587:2:1;17217:76:0;;;10569:21:1;10626:2;10606:18;;;10599:30;10665:34;10645:18;;;10638:62;-1:-1:-1;;;10716:18:1;;;10709:33;10759:19;;17217:76:0;10385:399:1;17217:76:0;17330:9;;17312:15;:27;17304:72;;;;-1:-1:-1;;;17304:72:0;;10991:2:1;17304:72:0;;;10973:21:1;11030:2;11010:18;;;11003:30;11069:33;11049:18;;;11042:61;11120:18;;17304:72:0;10789:355:1;17304:72:0;17421:14;;;17413:6;;17392:44;;-1:-1:-1;;;;;17421:14:0;;;;17413:6;;;;-1:-1:-1;;;;;;;;;;;17392:44:0;;17456:14;;;;17447:23;;-1:-1:-1;;;;;;17447:23:0;;;-1:-1:-1;;;;;17456:14:0;;17447:23;;;;17481:27;;;17171:345::o;25211:167::-;25289:4;25306:42;8098:10;25330:9;25341:6;25306:9;:42::i;31414:143::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31499:42:0::1;31544:5;31499:42:::0;;;:33:::1;:42;::::0;;;;:50;;-1:-1:-1;;31499:50:0::1;::::0;;31414:143::o;27607:123::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27682:32:0::1;27717:5;27682:32:::0;;;:23:::1;:32;::::0;;;;:40;;-1:-1:-1;;27682:40:0::1;::::0;;27607:123::o;29936:119::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;30022:16:::1;:25:::0;;-1:-1:-1;;;;;;30022:25:0::1;-1:-1:-1::0;;;;;30022:25:0;;;::::1;::::0;;;::::1;::::0;;29936:119::o;30556:173::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;30635:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;30635:32:0::1;-1:-1:-1::0;;;;30635:32:0;;::::1;;::::0;;30683:38:::1;::::0;::::1;::::0;::::1;::::0;30659:8;1888:14:1;1881:22;1863:41;;1851:2;1836:18;;1723:187;30683:38:0::1;;;;;;;;30556:173:::0;:::o;44723:216::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;44848:35:::1;::::0;-1:-1:-1;;;44848:35:0;;44813:4:::1;44848:35;::::0;::::1;3378:51:1::0;;;44813:4:0;44778:17:::1;::::0;44813:4;;44848:20:::1;::::0;3351:18:1;;44848:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44830:53;;44894:10;-1:-1:-1::0;;;;;44894:19:0::1;;44914:7;15531::::0;15558:6;-1:-1:-1;;;;;15558:6:0;;15493:79;44914:7:::1;44894:37;::::0;-1:-1:-1;;;;;;44894:37:0::1;::::0;;;;;;-1:-1:-1;;;;;8525:32:1;;;44894:37:0::1;::::0;::::1;8507:51:1::0;8574:18;;;8567:34;;;8480:18;;44894:37:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;41223:166::-:0;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41303:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;;::::1;;:30;;:22:::0;:30:::1;41300:42;;;43216:154;43175:195::o:0;41300:42::-:1;-1:-1:-1::0;;;;;41352:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;:29;;-1:-1:-1;;41352:29:0::1;41377:4;41352:29;::::0;;41223:166;:::o;16867:228::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;16950:6:::1;::::0;;;16933:23;;-1:-1:-1;;;;;;16933:23:0;;::::1;-1:-1:-1::0;;;;;16950:6:0;::::1;16933:23;::::0;;;16967:19:::1;::::0;;17009:22:::1;17027:4:::0;17009:15:::1;:22;:::i;:::-;16997:9;:34:::0;17084:1:::1;17068:6:::0;;17047:40:::1;::::0;-1:-1:-1;;;;;17068:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17047:40:0;17084:1;;17047:40:::1;16867:228:::0;:::o;34111:111::-;34173:4;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;-1:-1:-1;34196:7:0::1;:18:::0;;-1:-1:-1;;34196:18:0::1;::::0;::::1;;;::::0;;;34111:111::o;27193:::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27262:26:0::1;27291:5;27262:26:::0;;;:17:::1;:26;::::0;;;;:34;;-1:-1:-1;;27262:34:0::1;::::0;;27193:111::o;41883:171::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41966:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;;::::1;;41963:43;;43216:154;43175:195::o:0;41963:43::-:1;-1:-1:-1::0;;;;;42016:22:0::1;42041:5;42016:22:::0;;;:13:::1;:22;::::0;;;;:30;;-1:-1:-1;;42016:30:0::1;::::0;;41883:171::o;16441:246::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16532:22:0;::::1;16524:73;;;::::0;-1:-1:-1;;;16524:73:0;;11484:2:1;16524:73:0::1;::::0;::::1;11466:21:1::0;11523:2;11503:18;;;11496:30;11562:34;11542:18;;;11535:62;-1:-1:-1;;;11613:18:1;;;11606:36;11659:19;;16524:73:0::1;11282:402:1::0;16524:73:0::1;16634:6;::::0;;16613:38:::1;::::0;-1:-1:-1;;;;;16613:38:0;;::::1;::::0;16634:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;16613:38:0;::::1;16662:6;:17:::0;;-1:-1:-1;;;;;;16662:17:0::1;-1:-1:-1::0;;;;;16662:17:0;;;::::1;::::0;;;::::1;::::0;;16441:246::o;27394:125::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27472:32:0::1;;::::0;;;:23:::1;:32;::::0;;;;:39;;-1:-1:-1;;27472:39:0::1;27507:4;27472:39;::::0;;27394:125::o;31143:145::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31231:42:0::1;;::::0;;;:33:::1;:42;::::0;;;;:49;;-1:-1:-1;;31231:49:0::1;31276:4;31231:49;::::0;;31143:145::o;30122:123::-;15705:6;;-1:-1:-1;;;;;15705:6:0;8098:10;15705:22;15697:67;;;;-1:-1:-1;;;15697:67:0;;;;;;;:::i;:::-;30210:18:::1;:27:::0;;-1:-1:-1;;;;;;30210:27:0::1;-1:-1:-1::0;;;;;30210:27:0;;;::::1;::::0;;;::::1;::::0;;30122:123::o;3804:98::-;3862:7;3889:5;3893:1;3889;:5;:::i;:::-;3882:12;3804:98;-1:-1:-1;;;3804:98:0:o;4542:::-;4600:7;4627:5;4631:1;4627;:5;:::i;33726:337::-;-1:-1:-1;;;;;33819:19:0;;33811:68;;;;-1:-1:-1;;;33811:68:0;;11891:2:1;33811:68:0;;;11873:21:1;11930:2;11910:18;;;11903:30;11969:34;11949:18;;;11942:62;-1:-1:-1;;;12020:18:1;;;12013:34;12064:19;;33811:68:0;11689:400:1;33811:68:0;-1:-1:-1;;;;;33898:21:0;;33890:68;;;;-1:-1:-1;;;33890:68:0;;12296:2:1;33890:68:0;;;12278:21:1;12335:2;12315:18;;;12308:30;12374:34;12354:18;;;12347:62;-1:-1:-1;;;12425:18:1;;;12418:32;12467:19;;33890:68:0;12094:398:1;33890:68:0;-1:-1:-1;;;;;33971:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;34023:32;;1359:25:1;;;34023:32:0;;1332:18:1;34023:32:0;;;;;;;33726:337;;;:::o;34685:2584::-;34325:7;;34801:4;;34325:7;;;;;;:14;;:7;:14;;:37;;-1:-1:-1;;;;;;34342:20:0;;34357:4;34342:20;34325:37;:56;;;-1:-1:-1;15531:7:0;15558:6;-1:-1:-1;;;;;34366:15:0;;;15558:6;;34366:15;34325:56;34317:65;;;;;;-1:-1:-1;;;;;34825:18:0;::::1;::::0;;::::1;::::0;:38:::1;;-1:-1:-1::0;;;;;;34847:16:0;::::1;::::0;::::1;34825:38;34817:95;;;::::0;-1:-1:-1;;;34817:95:0;;12699:2:1;34817:95:0::1;::::0;::::1;12681:21:1::0;12738:2;12718:18;;;12711:30;12777:34;12757:18;;;12750:62;-1:-1:-1;;;12828:18:1;;;12821:42;12880:19;;34817:95:0::1;12497:408:1::0;34817:95:0::1;-1:-1:-1::0;;;;;34932:19:0;::::1;;::::0;;;:13:::1;:19;::::0;;;;;::::1;;34931:20;34923:52;;;::::0;-1:-1:-1;;;34923:52:0;;13112:2:1;34923:52:0::1;::::0;::::1;13094:21:1::0;13151:2;13131:18;;;13124:30;-1:-1:-1;;;13170:18:1;;;13163:49;13229:18;;34923:52:0::1;12910:343:1::0;34923:52:0::1;34989:14;::::0;::::1;;34986:917;;;35054:19;;35044:6;35028:13;35038:2;-1:-1:-1::0;;;;;25179:16:0;25152:7;25179:16;;;:7;:16;;;;;;;25086:117;35028:13:::1;:22;;;;:::i;:::-;:45;;:76;;;-1:-1:-1::0;;;;;;35077:27:0;::::1;;::::0;;;:23:::1;:27;::::0;;;;;::::1;;35028:76;35020:165;;;::::0;-1:-1:-1;;;35020:165:0;;13460:2:1;35020:165:0::1;::::0;::::1;13442:21:1::0;13499:2;13479:18;;;13472:30;13538:34;13518:18;;;13511:62;13609:33;13589:18;;;13582:61;13660:19;;35020:165:0::1;13258:427:1::0;35020:165:0::1;-1:-1:-1::0;;;;;35208:39:0;::::1;;::::0;;;:33:::1;:39;::::0;;;;;::::1;;::::0;:113:::1;;-1:-1:-1::0;35301:20:0::1;::::0;-1:-1:-1;;;;;35270:28:0;::::1;;::::0;;;:22:::1;:28;::::0;;;;;:51:::1;::::0;35301:20;35270:51:::1;:::i;:::-;35251:15;:70;;35208:113;35200:207;;;;-1:-1:-1::0;;;35200:207:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35430:37:0;::::1;;::::0;;;:33:::1;:37;::::0;;;;;::::1;;::::0;:109:::1;;-1:-1:-1::0;35519:20:0::1;::::0;-1:-1:-1;;;;;35490:26:0;::::1;;::::0;;;:22:::1;:26;::::0;;;;;:49:::1;::::0;35519:20;35490:49:::1;:::i;:::-;35471:15;:68;;35430:109;35422:203;;;;-1:-1:-1::0;;;35422:203:0::1;;;;;;;:::i;:::-;15531:7:::0;15558:6;-1:-1:-1;;;;;35643:15:0;;::::1;15558:6:::0;;35643:15:::1;::::0;::::1;::::0;:32:::1;;-1:-1:-1::0;15531:7:0;15558:6;-1:-1:-1;;;;;35662:13:0;;::::1;15558:6:::0;;35662:13:::1;;35643:32;35640:129;;;35712:12;;35702:6;:22;;35694:75;;;::::0;-1:-1:-1;;;35694:75:0;;14369:2:1;35694:75:0::1;::::0;::::1;14351:21:1::0;14408:2;14388:18;;;14381:30;14447:34;14427:18;;;14420:62;-1:-1:-1;;;14498:18:1;;;14491:38;14546:19;;35694:75:0::1;14167:404:1::0;35694:75:0::1;-1:-1:-1::0;;;;;35786:28:0;;::::1;;::::0;;;:22:::1;:28;::::0;;;;;35817:15:::1;35786:46:::0;;;;35847:26;;::::1;::::0;;;;:44;34986:917:::1;36246:4;36197:28;25179:16:::0;;;:7;:16;;;;;;36290:7:::1;::::0;36197:55;;-1:-1:-1;36263:12:0::1;::::0;36290:7:::1;;:13;;:7:::0;:13:::1;36287:877;;;36352:12;;36328:20;:36;36325:112;;36413:12;;36390:35;;36325:112;36507:28;::::0;36484:51;::::1;::::0;::::1;::::0;;;36564:53:::1;;-1:-1:-1::0;36601:16:0::1;::::0;-1:-1:-1;;;36601:16:0;::::1;;;36600:17;36564:53;:89;;;;-1:-1:-1::0;36642:11:0::1;::::0;-1:-1:-1;;;;;36634:19:0;;::::1;36642:11:::0;::::1;36634:19;;36564:89;:127;;;;-1:-1:-1::0;36670:21:0::1;::::0;-1:-1:-1;;;36670:21:0;::::1;;;36564:127;36546:314;;;36740:28;;36718:50;;36812:36;36827:20;36812:14;:36::i;:::-;-1:-1:-1::0;;;;;37062:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;36951:4:::1;::::0;-1:-1:-1;37062:23:0::1;;::::0;:48:::1;;-1:-1:-1::0;;;;;;37089:21:0;::::1;;::::0;;;:17:::1;:21;::::0;;;;;::::1;;37062:48;37059:94;;;37136:5;37126:15;;37059:94;36314:850;36287:877;37223:38;37238:4;37243:2;37246:6;37253:7;37223:14;:38::i;6083:240::-:0;6203:7;6264:12;6256:6;;;;6248:29;;;;-1:-1:-1;;;6248:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;6299:5:0;;;6083:240::o;37373:1668::-;22459:16;:23;;-1:-1:-1;;;;22459:23:0;-1:-1:-1;;;22459:23:0;;;37600:12:::1;::::0;22459:23;;37542:73:::1;::::0;37600:14:::1;::::0;37613:1:::1;::::0;37600:14:::1;:::i;:::-;37542:53;37579:15;;37542:32;37561:12;;37542:14;;:18;;:32;;;;:::i;:73::-;37520:95;;37626:18;37647:44;37679:11;37647:27;37664:9;;37647:12;:16;;:27;;;;:::i;:::-;:31:::0;::::1;:44::i;:::-;37626:65:::0;-1:-1:-1;37702:23:0::1;37728:28;:12:::0;37626:65;37728:16:::1;:28::i;:::-;37702:54:::0;-1:-1:-1;37792:21:0::1;37834:28;37851:10:::0;37834:16:::1;:28::i;:::-;37875:26;37904:41;:21;37930:14:::0;37904:25:::1;:41::i;:::-;37875:70;;37956:25;37996:26:::0;38037:23:::1;38097:1:::0;38080:14:::1;;:18;38077:197;;;38144:55;38187:11;38144:38;38167:14;;38144:18;:22;;:38;;;;:::i;:::-;:42:::0;::::1;:55::i;:::-;38216:18;::::0;:46:::1;::::0;38124:75;;-1:-1:-1;;;;;;38216:18:0::1;::::0;:46;::::1;;;::::0;38124:75;;38216:18:::1;:46:::0;:18;:46;38124:75;38216:18;:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;38077:197;38289:12;::::0;:16;38286:187:::1;;38349:53;38390:11;38349:36;38372:12;;38349:18;:22;;:36;;;;:::i;:53::-;38419:16;::::0;:42:::1;::::0;38331:71;;-1:-1:-1;;;;;;38419:16:0::1;::::0;:42;::::1;;;::::0;38331:71;;38419:16:::1;:42:::0;:16;:42;38331:71;38419:16;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;38286:187;38488:15;::::0;:19;38485:202:::1;;38554:56;38598:11;38554:39;38577:15;;38554:18;:22;;:39;;;;:::i;:56::-;38627:19;::::0;:48:::1;::::0;38533:77;;-1:-1:-1;;;;;;38627:19:0::1;::::0;:48;::::1;;;::::0;38533:77;;38627:19:::1;:48:::0;:19;:48;38533:77;38627:19;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;38485:202;38710:12;::::0;:16;38707:327:::1;;38773:86;38840:18:::0;38773:62:::1;38819:15:::0;38773:62;:18;38796:17;38773:22:::1;:41::i;:::-;:45:::0;::::1;:62::i;:86::-;38752:107;;38874:58;38887:7;15531::::0;15558:6;-1:-1:-1;;;;;15558:6:0;;15493:79;38887:7:::1;38896:15;38913:18;38874:12;:58::i;:::-;38954:68;::::0;;14778:25:1;;;14834:2;14819:18;;14812:34;;;14862:18;;;14855:34;;;38954:68:0::1;::::0;14766:2:1;14751:18;38954:68:0::1;;;;;;;38707:327;-1:-1:-1::0;;22505:16:0;:24;;-1:-1:-1;;;;22505:24:0;;;-1:-1:-1;;;;;;;37373:1668:0:o;40438:694::-;40561:11;;-1:-1:-1;;;;;40548:24:0;;;40561:11;;40548:24;:44;;;;;40591:1;40576:12;;:16;40548:44;40545:75;;;40607:13;:11;:13::i;:::-;40635:7;40631:40;;40657:14;:12;:14::i;:::-;40685:23;40710:12;40726:18;40737:6;40726:10;:18::i;:::-;-1:-1:-1;;;;;40773:15:0;;;;;;:7;:15;;;;;;40684:60;;-1:-1:-1;40684:60:0;-1:-1:-1;40773:27:0;;40793:6;40773:19;:27::i;:::-;-1:-1:-1;;;;;40755:15:0;;;;;;;:7;:15;;;;;;:45;;;;40832:18;;;;;;;:39;;40855:15;40832:22;:39::i;:::-;-1:-1:-1;;;;;40811:18:0;;;;;;:7;:18;;;;;:60;40884:22;40893:6;40901:4;40884:8;:22::i;:::-;40939:9;-1:-1:-1;;;;;40922:44:0;40931:6;-1:-1:-1;;;;;40922:44:0;;40950:15;40922:44;;;;1359:25:1;;1347:2;1332:18;;1213:177;40922:44:0;;;;;;;;41001:7;40997:41;;41023:15;33438:17;;33426:9;:29;33382:81;41023:15;41065:11;;-1:-1:-1;;;;;41052:24:0;;;41065:11;;41052:24;:44;;;;;41095:1;41080:12;;:16;41052:44;41049:75;;;41111:13;:11;:13::i;4941:98::-;4999:7;5026:5;5030:1;5026;:5;:::i;4185:98::-;4243:7;4270:5;4274:1;4270;:5;:::i;39149:583::-;39299:16;;;39313:1;39299:16;;;;;;;;39275:21;;39299:16;;;;;;;;;;-1:-1:-1;39299:16:0;39275:40;;39344:4;39326;39331:1;39326:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;39326:23:0;;;-1:-1:-1;;;;;39326:23:0;;;;;39370:13;;;;;;;;;-1:-1:-1;;;;;39370:13:0;-1:-1:-1;;;;;39370:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39360:4;39365:1;39360:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39360:30:0;;;:7;;;;;;;;;:30;39435:13;;39403:60;;39420:4;;39435:13;;;;39451:11;39403:8;:60::i;:::-;39502:13;;:222;;-1:-1:-1;;;39502:222:0;;:13;;;;-1:-1:-1;;;;;39502:13:0;;:64;;:222;;39581:11;;39607:1;;39651:4;;39678;;39698:15;;39502:222;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39827:530;40026:13;;39994:60;;40011:4;;40026:13;;;-1:-1:-1;;;;;40026:13:0;40042:11;39994:8;:60::i;:::-;40097:13;;:252;;-1:-1:-1;;;40097:252:0;;40167:4;40097:252;;;16488:34:1;16538:18;;;16531:34;;;40213:1:0;16581:18:1;;;16574:34;;;16624:18;;;16617:34;-1:-1:-1;;;;;16688:15:1;;;16667:19;;;16660:44;40323:15:0;16720:19:1;;;16713:35;40097:13:0;;;;;;;;:29;;40134:9;;16422:19:1;;40097:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32940:89::-;33008:12;;32994:9;;:27;;:13;:27::i;:::-;32982:9;:39;32940:89::o;33134:150::-;33180:9;;33177:26;;33134:150::o;33177:26::-;33243:9;;;33223:17;:29;-1:-1:-1;33263:13:0;;33134:150::o;32086:227::-;32145:7;32154;32174:12;32189:21;32202:7;32189:12;:21::i;:::-;32174:36;-1:-1:-1;32221:23:0;32247:17;:7;32174:36;32247:11;:17::i;:::-;32221:43;32300:4;;-1:-1:-1;32086:227:0;;-1:-1:-1;;;32086:227:0:o;32414:230::-;32485:8;;32482:155;;32551:4;32535:22;;;;:7;:22;;;;;;:32;;32562:4;32535:26;:32::i;:::-;32526:4;32510:22;;;;:7;:22;;;;;;;:57;;;;32587:38;;-1:-1:-1;;;;;32587:38:0;;;;;;;32620:4;1359:25:1;;1347:2;1332:18;;1213:177;32587:38:0;;;;;;;;32414:230;;:::o;33531:89::-;33599:12;;33585:9;;:27;;:13;:27::i;32722:153::-;32783:7;32810:57;32851:5;32810:22;32822:9;;32810: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;8862:168::-;8902:7;8968:1;8964;8960:6;8956:14;8953:1;8950:21;8945:1;8938:9;8931:17;8927:45;8924:71;;;8975:18;;:::i;:::-;-1:-1:-1;9015:9:1;;8862:168::o;9035:217::-;9075:1;9101;9091:132;;9145:10;9140:3;9136:20;9133:1;9126:31;9180:4;9177:1;9170:15;9208:4;9205:1;9198:15;9091:132;-1:-1:-1;9237:9:1;;9035:217::o;9684:127::-;9745:10;9740:3;9736:20;9733:1;9726:31;9776:4;9773:1;9766:15;9800:4;9797:1;9790:15;9816:135;9855:3;-1:-1:-1;;9876:17:1;;9873:43;;;9896:18;;:::i;:::-;-1:-1:-1;9943:1:1;9932:13;;9816:135::o;11149:128::-;11189:3;11220:1;11216:6;11213:1;11210:13;11207:39;;;11226:18;;:::i;:::-;-1:-1:-1;11262:9:1;;11149:128::o;13690:472::-;13892:2;13874:21;;;13931:2;13911:18;;;13904:30;13970:34;13965:2;13950:18;;13943:62;14041:34;14036:2;14021:18;;14014:62;-1:-1:-1;;;14107:3:1;14092:19;;14085:35;14152:3;14137:19;;13690:472::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://a88065b3c6a32d2e0723ab2300ab99689625e8b888ee3227cb5ff0ba9ee37729
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.