Latest 25 from a total of 1,234 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 21352072 | 2 days ago | IN | 0 ETH | 0.00102275 | ||||
Transfer | 21349628 | 3 days ago | IN | 0 ETH | 0.00059174 | ||||
Transfer | 21335338 | 5 days ago | IN | 0 ETH | 0.00103877 | ||||
Transfer | 21278127 | 13 days ago | IN | 0 ETH | 0.00045 | ||||
Transfer | 21180497 | 26 days ago | IN | 0 ETH | 0.00255714 | ||||
Transfer | 21179639 | 26 days ago | IN | 0 ETH | 0.00417489 | ||||
Transfer | 21144610 | 31 days ago | IN | 0 ETH | 0.00091143 | ||||
Transfer | 21127788 | 34 days ago | IN | 0 ETH | 0.00081643 | ||||
Transfer | 21058562 | 43 days ago | IN | 0 ETH | 0.00033624 | ||||
Transfer | 21025794 | 48 days ago | IN | 0 ETH | 0.00019473 | ||||
Transfer | 21025768 | 48 days ago | IN | 0 ETH | 0.0003194 | ||||
Transfer | 21015516 | 49 days ago | IN | 0 ETH | 0.00029813 | ||||
Transfer | 21015497 | 49 days ago | IN | 0 ETH | 0.00048468 | ||||
Approve | 20984252 | 54 days ago | IN | 0 ETH | 0.000542 | ||||
Transfer | 20872828 | 69 days ago | IN | 0 ETH | 0.00059067 | ||||
Transfer | 20872740 | 69 days ago | IN | 0 ETH | 0.00101364 | ||||
Transfer | 20803492 | 79 days ago | IN | 0 ETH | 0.00036629 | ||||
Transfer | 20741787 | 87 days ago | IN | 0 ETH | 0.00016192 | ||||
Transfer | 20703517 | 93 days ago | IN | 0 ETH | 0.00009904 | ||||
Transfer | 20665537 | 98 days ago | IN | 0 ETH | 0.00041283 | ||||
Transfer | 20633180 | 103 days ago | IN | 0 ETH | 0.00009744 | ||||
Transfer | 20615939 | 105 days ago | IN | 0 ETH | 0.0000948 | ||||
Transfer | 20527952 | 117 days ago | IN | 0 ETH | 0.00046209 | ||||
Transfer | 20481211 | 124 days ago | IN | 0 ETH | 0.00016222 | ||||
Approve | 19669093 | 237 days ago | IN | 0 ETH | 0.00082248 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
EnvoyToken
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-28 */ /** *Submitted for verification at BscScan.com on 2021-10-23 */ pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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; } } } contract EnvoyToken is ERC20 { using SafeMath for uint256; // // ******************* VARIABLES ******************* // // Deploy time uint256 private _deployTime = 1635429600; uint256 private _startTime = 1635933600; // Contract owner address public _ownerWallet; // Public sale - 1M address public _publicSaleWallet; // Team - 20M address public _teamWallet; // Ecosystem - 25M address public _ecosystemWallet; // Reserves - 20M address public _reservesWallet; // DEX - 2M address public _dexWallet; // Liquidity incentives - 7M address public _liqWallet; // Amount of tokens per buyer in private sale - 25M mapping(address => uint256) public _buyerTokens; // Amount of tokens assigned to buyers uint256 public _totalBuyerTokens; // Amount of tokens a wallet has withdrawn already, per type mapping(string => mapping(address => uint256)) public _walletTokensWithdrawn; // // ******************* SETUP ******************* // constructor (string memory name, string memory symbol) public ERC20(name, symbol) { // Set owner wallet _ownerWallet = _msgSender(); // Mint 100M tokens for contract _mint(address(this), 100000000000000000000000000); } // // ******************* WALLETS SETUP ******************* // // Owner can update owner function updateOwner(address owner) external { require(_msgSender() == _ownerWallet, "Only owner can update wallets"); _ownerWallet = owner; } // Update wallets function updateWallets(address publicSale, address team, address ecosystem, address reserves, address dex, address liq) external { require(_msgSender() == _ownerWallet, "Only owner can update wallets"); require(publicSale != address(0), "Should not set zero address"); require(team != address(0), "Should not set zero address"); require(ecosystem != address(0), "Should not set zero address"); require(reserves != address(0), "Should not set zero address"); require(dex != address(0), "Should not set zero address"); require(liq != address(0), "Should not set zero address"); _walletTokensWithdrawn["publicsale"][publicSale] = _walletTokensWithdrawn["publicsale"][_publicSaleWallet]; _walletTokensWithdrawn["team"][team] = _walletTokensWithdrawn["team"][_teamWallet]; _walletTokensWithdrawn["ecosystem"][ecosystem] = _walletTokensWithdrawn["ecosystem"][_ecosystemWallet]; _walletTokensWithdrawn["reserve"][reserves] = _walletTokensWithdrawn["reserve"][_reservesWallet]; _walletTokensWithdrawn["dex"][dex] = _walletTokensWithdrawn["dex"][_dexWallet]; _walletTokensWithdrawn["liq"][liq] = _walletTokensWithdrawn["liq"][_liqWallet]; _publicSaleWallet = publicSale; _teamWallet = team; _ecosystemWallet = ecosystem; _reservesWallet = reserves; _dexWallet = dex; _liqWallet = liq; } // Update buyer tokens function setBuyerTokens(address buyer, uint256 tokenAmount) external { require(_msgSender() == _ownerWallet, "Only owner can set buyer tokens"); // Update total _totalBuyerTokens -= _buyerTokens[buyer]; _totalBuyerTokens += tokenAmount; // Check if enough tokens left, can max assign 25M require(_totalBuyerTokens <= 25000000000000000000000000, "Max amount reached"); // Update map _buyerTokens[buyer] = tokenAmount; } // // ******************* OWNER ******************* // function publicSaleWithdraw(uint256 tokenAmount) external { require(_msgSender() == _publicSaleWallet, "Unauthorized public sale wallet"); uint256 hasWithdrawn = _walletTokensWithdrawn["publicsale"][_msgSender()]; // Total = 1M instant uint256 canWithdraw = 1000000000000000000000000 - hasWithdrawn; require(tokenAmount <= canWithdraw, "Withdraw amount too high"); _walletTokensWithdrawn["publicsale"][_msgSender()] += tokenAmount; _transfer(address(this), _msgSender(), tokenAmount); } function liqWithdraw(uint256 tokenAmount) external { require(_msgSender() == _liqWallet, "Unauthorized liquidity incentives wallet"); // TGE = 40% // Cliff = 1 months = 43800 minutes // Vesting = 6 months 262800 minutes // Total = 20M uint256 canWithdraw = walletCanWithdraw(_msgSender(), "liq", 40, 43800, 262800, 7000000000000000000000000, _deployTime); require(tokenAmount <= canWithdraw, "Withdraw amount too high"); _walletTokensWithdrawn["liq"][_msgSender()] += tokenAmount; _transfer(address(this), _msgSender(), tokenAmount); } function teamWithdraw(uint256 tokenAmount) external { require(_msgSender() == _teamWallet, "Unauthorized team wallet"); // Cliff = 6 months = 262800 minutes // Vesting = 20 months 876001 minutes // Total = 20M uint256 canWithdraw = walletCanWithdraw(_msgSender(), "team", 0, 262800, 876001, 20000000000000000000000000, _deployTime); require(tokenAmount <= canWithdraw, "Withdraw amount too high"); _walletTokensWithdrawn["team"][_msgSender()] += tokenAmount; _transfer(address(this), _msgSender(), tokenAmount); } function ecosystemWithdraw(uint256 tokenAmount) external { require(_msgSender() == _ecosystemWallet, "Unauthorized ecosystem wallet"); // TGE = 5% // Cliff = 1 months = 43800 minutes // Vesting = 19 months = 832201 minutes // Total = 25M uint256 canWithdraw = walletCanWithdraw(_msgSender(), "ecosystem", 5, 43800, 832201, 25000000000000000000000000, _deployTime); require(tokenAmount <= canWithdraw, "Withdraw amount too high"); _walletTokensWithdrawn["ecosystem"][_msgSender()] += tokenAmount; _transfer(address(this), _msgSender(), tokenAmount); } function reservesWithdraw(uint256 tokenAmount) external { require(_msgSender() == _reservesWallet, "Unauthorized reserves wallet"); // Cliff = 6 months = 262800 minutes // Vesting = 20 months = 876001 minutes // Total = 20M uint256 canWithdraw = walletCanWithdraw(_msgSender(), "reserve", 0, 262800, 876001, 20000000000000000000000000, _deployTime); require(tokenAmount <= canWithdraw, "Withdraw amount too high"); _walletTokensWithdrawn["reserve"][_msgSender()] += tokenAmount; _transfer(address(this), _msgSender(), tokenAmount); } function dexWithdraw(uint256 tokenAmount) external { require(_msgSender() == _dexWallet, "Unauthorized dex wallet"); uint256 hasWithdrawn = _walletTokensWithdrawn["dex"][_msgSender()]; // Total = 2M instant uint256 canWithdraw = 2000000000000000000000000 - hasWithdrawn; require(tokenAmount <= canWithdraw, "Withdraw amount too high"); _walletTokensWithdrawn["dex"][_msgSender()] += tokenAmount; _transfer(address(this), _msgSender(), tokenAmount); } function buyerWithdraw(uint256 tokenAmount) external { // TGE = 10% // Cliff = 4 months = 175200 minutes // Vesting = 18 months = 788401 minutes uint256 canWithdraw = walletCanWithdraw(_msgSender(), "privatesale", 10, 175200, 788401, _buyerTokens[_msgSender()], _startTime); require(tokenAmount <= canWithdraw, "Withdraw amount too high"); _walletTokensWithdrawn["privatesale"][_msgSender()] += tokenAmount; _transfer(address(this), _msgSender(), tokenAmount); } // // ******************* UNLOCK CALCULATION ******************* // function walletCanWithdraw(address wallet, string memory walletType, uint256 initialPercentage, uint256 cliffMinutes, uint256 vestingMinutes, uint256 totalTokens, uint256 startTime) public view returns(uint256) { uint256 minutesDiff = (block.timestamp - startTime).div(60); // Tokens already withdrawn uint256 withdrawnTokens = _walletTokensWithdrawn[walletType][wallet]; // Initial tokens uint256 initialTokens = 0; if (initialPercentage != 0) { initialTokens = totalTokens.mul(initialPercentage).div(100); } // Cliff not ended if (minutesDiff < uint256(cliffMinutes)) { return initialTokens - withdrawnTokens; } // Tokens per minute over vesting period uint256 buyerTokensPerMinute = totalTokens.sub(initialTokens).div(vestingMinutes); // Advanced minutes minus cliff uint256 unlockedMinutes = minutesDiff - uint256(cliffMinutes); // Unlocked minutes * tokens per minutes + initial tokens uint256 unlockedTokens = unlockedMinutes.mul(buyerTokensPerMinute).add(initialTokens); // No extra tokens unlocked if (unlockedTokens <= withdrawnTokens) { return 0; } // Check if buyer reached max if (unlockedTokens > totalTokens) { return totalTokens - withdrawnTokens; } // Result return unlockedTokens - withdrawnTokens; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"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":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":"","type":"address"}],"name":"_buyerTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dexWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ecosystemWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liqWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ownerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_publicSaleWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reservesWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBuyerTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"address","name":"","type":"address"}],"name":"_walletTokensWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"buyerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"dexWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"ecosystemWithdraw","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":"uint256","name":"tokenAmount","type":"uint256"}],"name":"liqWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"publicSaleWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"reservesWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"setBuyerTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"teamWithdraw","outputs":[],"stateMutability":"nonpayable","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":"owner","type":"address"}],"name":"updateOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"publicSale","type":"address"},{"internalType":"address","name":"team","type":"address"},{"internalType":"address","name":"ecosystem","type":"address"},{"internalType":"address","name":"reserves","type":"address"},{"internalType":"address","name":"dex","type":"address"},{"internalType":"address","name":"liq","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"string","name":"walletType","type":"string"},{"internalType":"uint256","name":"initialPercentage","type":"uint256"},{"internalType":"uint256","name":"cliffMinutes","type":"uint256"},{"internalType":"uint256","name":"vestingMinutes","type":"uint256"},{"internalType":"uint256","name":"totalTokens","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"}],"name":"walletCanWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405263617aace06005556361825da06006553480156200002157600080fd5b50604051620044743803806200447483398181016040528101906200004791906200039f565b81818160039080519060200190620000619291906200027d565b5080600490805190602001906200007a9291906200027d565b5050506200008d620000f260201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000ea306a52b7d2dcc80cd2e4000000620000fa60201b60201c565b50506200067c565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200016d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001649062000465565b60405180910390fd5b62000181600083836200027360201b60201c565b80600260008282546200019591906200051c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620001ec91906200051c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000253919062000487565b60405180910390a36200026f600083836200027860201b60201c565b5050565b505050565b505050565b8280546200028b90620005b9565b90600052602060002090601f016020900481019282620002af5760008555620002fb565b82601f10620002ca57805160ff1916838001178555620002fb565b82800160010185558215620002fb579182015b82811115620002fa578251825591602001919060010190620002dd565b5b5090506200030a91906200030e565b5090565b5b80821115620003295760008160009055506001016200030f565b5090565b6000620003446200033e84620004d8565b620004a4565b9050828152602081018484840111156200035d57600080fd5b6200036a84828562000583565b509392505050565b600082601f8301126200038457600080fd5b8151620003968482602086016200032d565b91505092915050565b60008060408385031215620003b357600080fd5b600083015167ffffffffffffffff811115620003ce57600080fd5b620003dc8582860162000372565b925050602083015167ffffffffffffffff811115620003fa57600080fd5b620004088582860162000372565b9150509250929050565b600062000421601f836200050b565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6200045f8162000579565b82525050565b60006020820190508181036000830152620004808162000412565b9050919050565b60006020820190506200049e600083018462000454565b92915050565b6000604051905081810181811067ffffffffffffffff82111715620004ce57620004cd6200064d565b5b8060405250919050565b600067ffffffffffffffff821115620004f657620004f56200064d565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b6000620005298262000579565b9150620005368362000579565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200056e576200056d620005ef565b5b828201905092915050565b6000819050919050565b60005b83811015620005a357808201518184015260208101905062000586565b83811115620005b3576000848401525b50505050565b60006002820490506001821680620005d257607f821691505b60208210811415620005e957620005e86200061e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613de8806200068c6000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806373ab79251161010f578063a457c2d7116100a2578063b96190d611610071578063b96190d6146105cd578063bec3fab1146105eb578063d6aedc6d14610609578063dd62ed3e14610625576101f0565b8063a457c2d714610535578063a9059cbb14610565578063b03fd85a14610595578063b620743a146105b1576101f0565b806393d60990116100de57806393d60990146104c157806395d89b41146104dd57806399c26c53146104fb5780639f1161c314610517576101f0565b806373ab79251461043b5780637a0f06e71461046b57806381640a9114610489578063880cdc31146104a5576101f0565b8063313ce567116101875780634c420743116101565780634c420743146103a15780634e5fde97146103bf57806363586f39146103db57806370a082311461040b576101f0565b8063313ce5671461031757806337e294d51461033557806339509351146103535780634825fc0d14610383576101f0565b8063100505b9116101c3578063100505b91461028f57806318160ddd146102ad57806322cb364e146102cb57806323b872dd146102e7576101f0565b806306fdde03146101f557806307562e2914610213578063095ea7b31461022f5780630c790fbe1461025f575b600080fd5b6101fd610655565b60405161020a91906137b9565b60405180910390f35b61022d60048036038101906102289190612e9a565b6106e7565b005b61024960048036038101906102449190612e0a565b6108cf565b604051610256919061379e565b60405180910390f35b61027960048036038101906102749190612e46565b6108ed565b6040516102869190613a1b565b60405180910390f35b610297610928565b6040516102a49190613783565b60405180910390f35b6102b561094e565b6040516102c29190613a1b565b60405180910390f35b6102e560048036038101906102e09190612c7c565b610958565b005b61030160048036038101906102fc9190612d05565b611333565b60405161030e919061379e565b60405180910390f35b61031f61142b565b60405161032c9190613a36565b60405180910390f35b61033d611434565b60405161034a9190613783565b60405180910390f35b61036d60048036038101906103689190612e0a565b61145a565b60405161037a919061379e565b60405180910390f35b61038b611506565b6040516103989190613783565b60405180910390f35b6103a961152c565b6040516103b69190613783565b60405180910390f35b6103d960048036038101906103d49190612e9a565b611552565b005b6103f560048036038101906103f09190612c17565b611739565b6040516104029190613a1b565b60405180910390f35b61042560048036038101906104209190612c17565b611751565b6040516104329190613a1b565b60405180910390f35b61045560048036038101906104509190612d54565b611799565b6040516104629190613a1b565b60405180910390f35b610473611926565b6040516104809190613783565b60405180910390f35b6104a3600480360381019061049e9190612e9a565b61194c565b005b6104bf60048036038101906104ba9190612c17565b611b15565b005b6104db60048036038101906104d69190612e9a565b611bf0565b005b6104e5611dba565b6040516104f291906137b9565b60405180910390f35b61051560048036038101906105109190612e9a565b611e4c565b005b61051f612015565b60405161052c9190613783565b60405180910390f35b61054f600480360381019061054a9190612e0a565b61203b565b60405161055c919061379e565b60405180910390f35b61057f600480360381019061057a9190612e0a565b612126565b60405161058c919061379e565b60405180910390f35b6105af60048036038101906105aa9190612e9a565b612144565b005b6105cb60048036038101906105c69190612e9a565b6122b2565b005b6105d561247c565b6040516105e29190613a1b565b60405180910390f35b6105f3612482565b6040516106009190613783565b60405180910390f35b610623600480360381019061061e9190612e0a565b6124a8565b005b61063f600480360381019061063a9190612c40565b612648565b60405161064c9190613a1b565b60405180910390f35b60606003805461066490613c85565b80601f016020809104026020016040519081016040528092919081815260200182805461069090613c85565b80156106dd5780601f106106b2576101008083540402835291602001916106dd565b820191906000526020600020905b8154815290600101906020018083116106c057829003601f168201915b5050505050905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166107286126cf565b73ffffffffffffffffffffffffffffffffffffffff161461077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610775906139fb565b60405180910390fd5b6000601060405161078e906136f0565b908152602001604051809103902060006107a66126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000816a01a784379d99db420000006107fc9190613bba565b905080831115610841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610838906138bb565b60405180910390fd5b826010604051610850906136f0565b908152602001604051809103902060006108686126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108b19190613ad9565b925050819055506108ca306108c46126cf565b856126d7565b505050565b60006108e36108dc6126cf565b8484612958565b6001905092915050565b601082805160208101820180518482526020830160208501208183528095505050505050602052806000526040600020600091509150505481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166109996126cf565b73ffffffffffffffffffffffffffffffffffffffff16146109ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e6906139bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a56906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac6906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b36906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba6906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c16906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c86906138fb565b60405180910390fd5b6010604051610c9d9061371a565b90815260200160405180910390206000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010604051610d199061371a565b908152602001604051809103902060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506010604051610d7690613759565b90815260200160405180910390206000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010604051610df290613759565b908152602001604051809103902060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506010604051610e4f90613744565b90815260200160405180910390206000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010604051610ecb90613744565b908152602001604051809103902060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506010604051610f289061376e565b90815260200160405180910390206000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010604051610fa49061376e565b908152602001604051809103902060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506010604051611001906136f0565b90815260200160405180910390206000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060405161107d906136f0565b908152602001604051809103902060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060106040516110da90613705565b90815260200160405180910390206000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060405161115690613705565b908152602001604051809103902060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050565b60006113408484846126d7565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061138b6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561140b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114029061391b565b60405180910390fd5b61141f856114176126cf565b858403612958565b60019150509392505050565b60006012905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006114fc6114676126cf565b8484600160006114756126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114f79190613ad9565b612958565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115936126cf565b73ffffffffffffffffffffffffffffffffffffffff16146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e09061389b565b60405180910390fd5b600060106040516115f99061371a565b908152602001604051809103902060006116116126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008169d3c21bcecceda10000006116669190613bba565b9050808311156116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a2906138bb565b60405180910390fd5b8260106040516116ba9061371a565b908152602001604051809103902060006116d26126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461171b9190613ad9565b925050819055506117343061172e6126cf565b856126d7565b505050565b600e6020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806117bb603c84426117ad9190613bba565b612b2390919063ffffffff16565b905060006010896040516117cf91906136d9565b908152602001604051809103902060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600080891461184f5761184c606461183e8b89612b3990919063ffffffff16565b612b2390919063ffffffff16565b90505b8783101561186d5781816118639190613bba565b935050505061191b565b600061189488611886848a612b4f90919063ffffffff16565b612b2390919063ffffffff16565b9050600089856118a49190613bba565b905060006118cd846118bf8585612b3990919063ffffffff16565b612b6590919063ffffffff16565b90508481116118e5576000965050505050505061191b565b888111156119065784896118f99190613bba565b965050505050505061191b565b84816119129190613bba565b96505050505050505b979650505050505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661198d6126cf565b73ffffffffffffffffffffffffffffffffffffffff16146119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da9061381b565b60405180910390fd5b6000611a436119f06126cf565b6040518060400160405280600381526020017f6c69710000000000000000000000000000000000000000000000000000000000815250602861ab18620402906a05ca4ec2a79a7f67000000600554611799565b905080821115611a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7f906138bb565b60405180910390fd5b816010604051611a9790613705565b90815260200160405180910390206000611aaf6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af89190613ad9565b92505081905550611b1130611b0b6126cf565b846126d7565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b566126cf565b73ffffffffffffffffffffffffffffffffffffffff1614611bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba3906139bb565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c316126cf565b73ffffffffffffffffffffffffffffffffffffffff1614611c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7e9061385b565b60405180910390fd5b6000611ce8611c946126cf565b6040518060400160405280600481526020017f7465616d00000000000000000000000000000000000000000000000000000000815250600062040290620d5de16a108b2a2c28029094000000600554611799565b905080821115611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d24906138bb565b60405180910390fd5b816010604051611d3c90613759565b90815260200160405180910390206000611d546126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d9d9190613ad9565b92505081905550611db630611db06126cf565b846126d7565b5050565b606060048054611dc990613c85565b80601f0160208091040260200160405190810160405280929190818152602001828054611df590613c85565b8015611e425780601f10611e1757610100808354040283529160200191611e42565b820191906000526020600020905b815481529060010190602001808311611e2557829003601f168201915b5050505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e8d6126cf565b73ffffffffffffffffffffffffffffffffffffffff1614611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda906138db565b60405180910390fd5b6000611f43611ef06126cf565b6040518060400160405280600981526020017f65636f73797374656d0000000000000000000000000000000000000000000000815250600561ab18620cb2c96a14adf4b7320334b9000000600554611799565b905080821115611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f906138bb565b60405180910390fd5b816010604051611f9790613744565b90815260200160405180910390206000611faf6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ff89190613ad9565b925050819055506120113061200b6126cf565b846126d7565b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806001600061204a6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fe906139db565b60405180910390fd5b61211b6121126126cf565b85858403612958565b600191505092915050565b600061213a6121336126cf565b84846126d7565b6001905092915050565b60006121e06121516126cf565b6040518060400160405280600b81526020017f7072697661746573616c65000000000000000000000000000000000000000000815250600a6202ac60620c07b1600e600061219d6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600654611799565b905080821115612225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221c906138bb565b60405180910390fd5b8160106040516122349061372f565b9081526020016040518091039020600061224c6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122959190613ad9565b925050819055506122ae306122a86126cf565b846126d7565b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122f36126cf565b73ffffffffffffffffffffffffffffffffffffffff1614612349576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123409061399b565b60405180910390fd5b60006123aa6123566126cf565b6040518060400160405280600781526020017f7265736572766500000000000000000000000000000000000000000000000000815250600062040290620d5de16a108b2a2c28029094000000600554611799565b9050808211156123ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e6906138bb565b60405180910390fd5b8160106040516123fe9061376e565b908152602001604051809103902060006124166126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461245f9190613ad9565b92505081905550612478306124726126cf565b846126d7565b5050565b600f5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166124e96126cf565b73ffffffffffffffffffffffffffffffffffffffff161461253f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125369061393b565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60008282546125909190613bba565b9250508190555080600f60008282546125a99190613ad9565b925050819055506a14adf4b7320334b9000000600f541115612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f79061387b565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273e9061395b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae906137db565b60405180910390fd5b6127c2838383612b7b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283f9061383b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128db9190613ad9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161293f9190613a1b565b60405180910390a3612952848484612b80565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf9061397b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2f906137fb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b169190613a1b565b60405180910390a3505050565b60008183612b319190613b2f565b905092915050565b60008183612b479190613b60565b905092915050565b60008183612b5d9190613bba565b905092915050565b60008183612b739190613ad9565b905092915050565b505050565b505050565b6000612b98612b9384613a82565b613a51565b905082815260208101848484011115612bb057600080fd5b612bbb848285613c43565b509392505050565b600081359050612bd281613d84565b92915050565b600082601f830112612be957600080fd5b8135612bf9848260208601612b85565b91505092915050565b600081359050612c1181613d9b565b92915050565b600060208284031215612c2957600080fd5b6000612c3784828501612bc3565b91505092915050565b60008060408385031215612c5357600080fd5b6000612c6185828601612bc3565b9250506020612c7285828601612bc3565b9150509250929050565b60008060008060008060c08789031215612c9557600080fd5b6000612ca389828a01612bc3565b9650506020612cb489828a01612bc3565b9550506040612cc589828a01612bc3565b9450506060612cd689828a01612bc3565b9350506080612ce789828a01612bc3565b92505060a0612cf889828a01612bc3565b9150509295509295509295565b600080600060608486031215612d1a57600080fd5b6000612d2886828701612bc3565b9350506020612d3986828701612bc3565b9250506040612d4a86828701612c02565b9150509250925092565b600080600080600080600060e0888a031215612d6f57600080fd5b6000612d7d8a828b01612bc3565b975050602088013567ffffffffffffffff811115612d9a57600080fd5b612da68a828b01612bd8565b9650506040612db78a828b01612c02565b9550506060612dc88a828b01612c02565b9450506080612dd98a828b01612c02565b93505060a0612dea8a828b01612c02565b92505060c0612dfb8a828b01612c02565b91505092959891949750929550565b60008060408385031215612e1d57600080fd5b6000612e2b85828601612bc3565b9250506020612e3c85828601612c02565b9150509250929050565b60008060408385031215612e5957600080fd5b600083013567ffffffffffffffff811115612e7357600080fd5b612e7f85828601612bd8565b9250506020612e9085828601612bc3565b9150509250929050565b600060208284031215612eac57600080fd5b6000612eba84828501612c02565b91505092915050565b612ecc81613bee565b82525050565b612edb81613c00565b82525050565b6000612eec82613ab2565b612ef68185613abd565b9350612f06818560208601613c52565b612f0f81613d73565b840191505092915050565b6000612f2582613ab2565b612f2f8185613ace565b9350612f3f818560208601613c52565b80840191505092915050565b6000612f58602383613abd565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612fbe600383613ace565b91507f64657800000000000000000000000000000000000000000000000000000000006000830152600382019050919050565b6000612ffe600383613ace565b91507f6c697100000000000000000000000000000000000000000000000000000000006000830152600382019050919050565b600061303e602283613abd565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130a4600a83613ace565b91507f7075626c696373616c65000000000000000000000000000000000000000000006000830152600a82019050919050565b60006130e4602883613abd565b91507f556e617574686f72697a6564206c697175696469747920696e63656e7469766560008301527f732077616c6c65740000000000000000000000000000000000000000000000006020830152604082019050919050565b600061314a602683613abd565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131b0601883613abd565b91507f556e617574686f72697a6564207465616d2077616c6c657400000000000000006000830152602082019050919050565b60006131f0601283613abd565b91507f4d617820616d6f756e74207265616368656400000000000000000000000000006000830152602082019050919050565b6000613230601f83613abd565b91507f556e617574686f72697a6564207075626c69632073616c652077616c6c6574006000830152602082019050919050565b6000613270601883613abd565b91507f576974686472617720616d6f756e7420746f6f206869676800000000000000006000830152602082019050919050565b60006132b0601d83613abd565b91507f556e617574686f72697a65642065636f73797374656d2077616c6c65740000006000830152602082019050919050565b60006132f0600b83613ace565b91507f7072697661746573616c650000000000000000000000000000000000000000006000830152600b82019050919050565b6000613330601b83613abd565b91507f53686f756c64206e6f7420736574207a65726f206164647265737300000000006000830152602082019050919050565b6000613370602883613abd565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133d6600983613ace565b91507f65636f73797374656d00000000000000000000000000000000000000000000006000830152600982019050919050565b6000613416601f83613abd565b91507f4f6e6c79206f776e65722063616e2073657420627579657220746f6b656e73006000830152602082019050919050565b6000613456602583613abd565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134bc602483613abd565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613522601c83613abd565b91507f556e617574686f72697a65642072657365727665732077616c6c6574000000006000830152602082019050919050565b6000613562601d83613abd565b91507f4f6e6c79206f776e65722063616e207570646174652077616c6c6574730000006000830152602082019050919050565b60006135a2600483613ace565b91507f7465616d000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b60006135e2600783613ace565b91507f72657365727665000000000000000000000000000000000000000000000000006000830152600782019050919050565b6000613622602583613abd565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613688601783613abd565b91507f556e617574686f72697a6564206465782077616c6c65740000000000000000006000830152602082019050919050565b6136c481613c2c565b82525050565b6136d381613c36565b82525050565b60006136e58284612f1a565b915081905092915050565b60006136fb82612fb1565b9150819050919050565b600061371082612ff1565b9150819050919050565b600061372582613097565b9150819050919050565b600061373a826132e3565b9150819050919050565b600061374f826133c9565b9150819050919050565b600061376482613595565b9150819050919050565b6000613779826135d5565b9150819050919050565b60006020820190506137986000830184612ec3565b92915050565b60006020820190506137b36000830184612ed2565b92915050565b600060208201905081810360008301526137d38184612ee1565b905092915050565b600060208201905081810360008301526137f481612f4b565b9050919050565b6000602082019050818103600083015261381481613031565b9050919050565b60006020820190508181036000830152613834816130d7565b9050919050565b600060208201905081810360008301526138548161313d565b9050919050565b60006020820190508181036000830152613874816131a3565b9050919050565b60006020820190508181036000830152613894816131e3565b9050919050565b600060208201905081810360008301526138b481613223565b9050919050565b600060208201905081810360008301526138d481613263565b9050919050565b600060208201905081810360008301526138f4816132a3565b9050919050565b6000602082019050818103600083015261391481613323565b9050919050565b6000602082019050818103600083015261393481613363565b9050919050565b6000602082019050818103600083015261395481613409565b9050919050565b6000602082019050818103600083015261397481613449565b9050919050565b60006020820190508181036000830152613994816134af565b9050919050565b600060208201905081810360008301526139b481613515565b9050919050565b600060208201905081810360008301526139d481613555565b9050919050565b600060208201905081810360008301526139f481613615565b9050919050565b60006020820190508181036000830152613a148161367b565b9050919050565b6000602082019050613a3060008301846136bb565b92915050565b6000602082019050613a4b60008301846136ca565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613a7857613a77613d44565b5b8060405250919050565b600067ffffffffffffffff821115613a9d57613a9c613d44565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000613ae482613c2c565b9150613aef83613c2c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b2457613b23613cb7565b5b828201905092915050565b6000613b3a82613c2c565b9150613b4583613c2c565b925082613b5557613b54613ce6565b5b828204905092915050565b6000613b6b82613c2c565b9150613b7683613c2c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613baf57613bae613cb7565b5b828202905092915050565b6000613bc582613c2c565b9150613bd083613c2c565b925082821015613be357613be2613cb7565b5b828203905092915050565b6000613bf982613c0c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613c70578082015181840152602081019050613c55565b83811115613c7f576000848401525b50505050565b60006002820490506001821680613c9d57607f821691505b60208210811415613cb157613cb0613d15565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613d8d81613bee565b8114613d9857600080fd5b50565b613da481613c2c565b8114613daf57600080fd5b5056fea26469706673582212203d72b2129de14afa9bc74af7f53f3a952be4af8d686a22f4c512db83727f80ef64736f6c63430008000033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000005454e564f590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003454e560000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101f05760003560e01c806373ab79251161010f578063a457c2d7116100a2578063b96190d611610071578063b96190d6146105cd578063bec3fab1146105eb578063d6aedc6d14610609578063dd62ed3e14610625576101f0565b8063a457c2d714610535578063a9059cbb14610565578063b03fd85a14610595578063b620743a146105b1576101f0565b806393d60990116100de57806393d60990146104c157806395d89b41146104dd57806399c26c53146104fb5780639f1161c314610517576101f0565b806373ab79251461043b5780637a0f06e71461046b57806381640a9114610489578063880cdc31146104a5576101f0565b8063313ce567116101875780634c420743116101565780634c420743146103a15780634e5fde97146103bf57806363586f39146103db57806370a082311461040b576101f0565b8063313ce5671461031757806337e294d51461033557806339509351146103535780634825fc0d14610383576101f0565b8063100505b9116101c3578063100505b91461028f57806318160ddd146102ad57806322cb364e146102cb57806323b872dd146102e7576101f0565b806306fdde03146101f557806307562e2914610213578063095ea7b31461022f5780630c790fbe1461025f575b600080fd5b6101fd610655565b60405161020a91906137b9565b60405180910390f35b61022d60048036038101906102289190612e9a565b6106e7565b005b61024960048036038101906102449190612e0a565b6108cf565b604051610256919061379e565b60405180910390f35b61027960048036038101906102749190612e46565b6108ed565b6040516102869190613a1b565b60405180910390f35b610297610928565b6040516102a49190613783565b60405180910390f35b6102b561094e565b6040516102c29190613a1b565b60405180910390f35b6102e560048036038101906102e09190612c7c565b610958565b005b61030160048036038101906102fc9190612d05565b611333565b60405161030e919061379e565b60405180910390f35b61031f61142b565b60405161032c9190613a36565b60405180910390f35b61033d611434565b60405161034a9190613783565b60405180910390f35b61036d60048036038101906103689190612e0a565b61145a565b60405161037a919061379e565b60405180910390f35b61038b611506565b6040516103989190613783565b60405180910390f35b6103a961152c565b6040516103b69190613783565b60405180910390f35b6103d960048036038101906103d49190612e9a565b611552565b005b6103f560048036038101906103f09190612c17565b611739565b6040516104029190613a1b565b60405180910390f35b61042560048036038101906104209190612c17565b611751565b6040516104329190613a1b565b60405180910390f35b61045560048036038101906104509190612d54565b611799565b6040516104629190613a1b565b60405180910390f35b610473611926565b6040516104809190613783565b60405180910390f35b6104a3600480360381019061049e9190612e9a565b61194c565b005b6104bf60048036038101906104ba9190612c17565b611b15565b005b6104db60048036038101906104d69190612e9a565b611bf0565b005b6104e5611dba565b6040516104f291906137b9565b60405180910390f35b61051560048036038101906105109190612e9a565b611e4c565b005b61051f612015565b60405161052c9190613783565b60405180910390f35b61054f600480360381019061054a9190612e0a565b61203b565b60405161055c919061379e565b60405180910390f35b61057f600480360381019061057a9190612e0a565b612126565b60405161058c919061379e565b60405180910390f35b6105af60048036038101906105aa9190612e9a565b612144565b005b6105cb60048036038101906105c69190612e9a565b6122b2565b005b6105d561247c565b6040516105e29190613a1b565b60405180910390f35b6105f3612482565b6040516106009190613783565b60405180910390f35b610623600480360381019061061e9190612e0a565b6124a8565b005b61063f600480360381019061063a9190612c40565b612648565b60405161064c9190613a1b565b60405180910390f35b60606003805461066490613c85565b80601f016020809104026020016040519081016040528092919081815260200182805461069090613c85565b80156106dd5780601f106106b2576101008083540402835291602001916106dd565b820191906000526020600020905b8154815290600101906020018083116106c057829003601f168201915b5050505050905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166107286126cf565b73ffffffffffffffffffffffffffffffffffffffff161461077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610775906139fb565b60405180910390fd5b6000601060405161078e906136f0565b908152602001604051809103902060006107a66126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000816a01a784379d99db420000006107fc9190613bba565b905080831115610841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610838906138bb565b60405180910390fd5b826010604051610850906136f0565b908152602001604051809103902060006108686126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108b19190613ad9565b925050819055506108ca306108c46126cf565b856126d7565b505050565b60006108e36108dc6126cf565b8484612958565b6001905092915050565b601082805160208101820180518482526020830160208501208183528095505050505050602052806000526040600020600091509150505481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166109996126cf565b73ffffffffffffffffffffffffffffffffffffffff16146109ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e6906139bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a56906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac6906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b36906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba6906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c16906138fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c86906138fb565b60405180910390fd5b6010604051610c9d9061371a565b90815260200160405180910390206000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010604051610d199061371a565b908152602001604051809103902060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506010604051610d7690613759565b90815260200160405180910390206000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010604051610df290613759565b908152602001604051809103902060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506010604051610e4f90613744565b90815260200160405180910390206000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010604051610ecb90613744565b908152602001604051809103902060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506010604051610f289061376e565b90815260200160405180910390206000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010604051610fa49061376e565b908152602001604051809103902060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506010604051611001906136f0565b90815260200160405180910390206000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060405161107d906136f0565b908152602001604051809103902060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060106040516110da90613705565b90815260200160405180910390206000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060405161115690613705565b908152602001604051809103902060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050565b60006113408484846126d7565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061138b6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561140b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114029061391b565b60405180910390fd5b61141f856114176126cf565b858403612958565b60019150509392505050565b60006012905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006114fc6114676126cf565b8484600160006114756126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114f79190613ad9565b612958565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115936126cf565b73ffffffffffffffffffffffffffffffffffffffff16146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e09061389b565b60405180910390fd5b600060106040516115f99061371a565b908152602001604051809103902060006116116126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008169d3c21bcecceda10000006116669190613bba565b9050808311156116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a2906138bb565b60405180910390fd5b8260106040516116ba9061371a565b908152602001604051809103902060006116d26126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461171b9190613ad9565b925050819055506117343061172e6126cf565b856126d7565b505050565b600e6020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806117bb603c84426117ad9190613bba565b612b2390919063ffffffff16565b905060006010896040516117cf91906136d9565b908152602001604051809103902060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600080891461184f5761184c606461183e8b89612b3990919063ffffffff16565b612b2390919063ffffffff16565b90505b8783101561186d5781816118639190613bba565b935050505061191b565b600061189488611886848a612b4f90919063ffffffff16565b612b2390919063ffffffff16565b9050600089856118a49190613bba565b905060006118cd846118bf8585612b3990919063ffffffff16565b612b6590919063ffffffff16565b90508481116118e5576000965050505050505061191b565b888111156119065784896118f99190613bba565b965050505050505061191b565b84816119129190613bba565b96505050505050505b979650505050505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661198d6126cf565b73ffffffffffffffffffffffffffffffffffffffff16146119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da9061381b565b60405180910390fd5b6000611a436119f06126cf565b6040518060400160405280600381526020017f6c69710000000000000000000000000000000000000000000000000000000000815250602861ab18620402906a05ca4ec2a79a7f67000000600554611799565b905080821115611a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7f906138bb565b60405180910390fd5b816010604051611a9790613705565b90815260200160405180910390206000611aaf6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af89190613ad9565b92505081905550611b1130611b0b6126cf565b846126d7565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b566126cf565b73ffffffffffffffffffffffffffffffffffffffff1614611bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba3906139bb565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c316126cf565b73ffffffffffffffffffffffffffffffffffffffff1614611c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7e9061385b565b60405180910390fd5b6000611ce8611c946126cf565b6040518060400160405280600481526020017f7465616d00000000000000000000000000000000000000000000000000000000815250600062040290620d5de16a108b2a2c28029094000000600554611799565b905080821115611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d24906138bb565b60405180910390fd5b816010604051611d3c90613759565b90815260200160405180910390206000611d546126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d9d9190613ad9565b92505081905550611db630611db06126cf565b846126d7565b5050565b606060048054611dc990613c85565b80601f0160208091040260200160405190810160405280929190818152602001828054611df590613c85565b8015611e425780601f10611e1757610100808354040283529160200191611e42565b820191906000526020600020905b815481529060010190602001808311611e2557829003601f168201915b5050505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e8d6126cf565b73ffffffffffffffffffffffffffffffffffffffff1614611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda906138db565b60405180910390fd5b6000611f43611ef06126cf565b6040518060400160405280600981526020017f65636f73797374656d0000000000000000000000000000000000000000000000815250600561ab18620cb2c96a14adf4b7320334b9000000600554611799565b905080821115611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f906138bb565b60405180910390fd5b816010604051611f9790613744565b90815260200160405180910390206000611faf6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ff89190613ad9565b925050819055506120113061200b6126cf565b846126d7565b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806001600061204a6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fe906139db565b60405180910390fd5b61211b6121126126cf565b85858403612958565b600191505092915050565b600061213a6121336126cf565b84846126d7565b6001905092915050565b60006121e06121516126cf565b6040518060400160405280600b81526020017f7072697661746573616c65000000000000000000000000000000000000000000815250600a6202ac60620c07b1600e600061219d6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600654611799565b905080821115612225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221c906138bb565b60405180910390fd5b8160106040516122349061372f565b9081526020016040518091039020600061224c6126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122959190613ad9565b925050819055506122ae306122a86126cf565b846126d7565b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122f36126cf565b73ffffffffffffffffffffffffffffffffffffffff1614612349576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123409061399b565b60405180910390fd5b60006123aa6123566126cf565b6040518060400160405280600781526020017f7265736572766500000000000000000000000000000000000000000000000000815250600062040290620d5de16a108b2a2c28029094000000600554611799565b9050808211156123ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e6906138bb565b60405180910390fd5b8160106040516123fe9061376e565b908152602001604051809103902060006124166126cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461245f9190613ad9565b92505081905550612478306124726126cf565b846126d7565b5050565b600f5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166124e96126cf565b73ffffffffffffffffffffffffffffffffffffffff161461253f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125369061393b565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f60008282546125909190613bba565b9250508190555080600f60008282546125a99190613ad9565b925050819055506a14adf4b7320334b9000000600f541115612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f79061387b565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273e9061395b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae906137db565b60405180910390fd5b6127c2838383612b7b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283f9061383b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128db9190613ad9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161293f9190613a1b565b60405180910390a3612952848484612b80565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf9061397b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2f906137fb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b169190613a1b565b60405180910390a3505050565b60008183612b319190613b2f565b905092915050565b60008183612b479190613b60565b905092915050565b60008183612b5d9190613bba565b905092915050565b60008183612b739190613ad9565b905092915050565b505050565b505050565b6000612b98612b9384613a82565b613a51565b905082815260208101848484011115612bb057600080fd5b612bbb848285613c43565b509392505050565b600081359050612bd281613d84565b92915050565b600082601f830112612be957600080fd5b8135612bf9848260208601612b85565b91505092915050565b600081359050612c1181613d9b565b92915050565b600060208284031215612c2957600080fd5b6000612c3784828501612bc3565b91505092915050565b60008060408385031215612c5357600080fd5b6000612c6185828601612bc3565b9250506020612c7285828601612bc3565b9150509250929050565b60008060008060008060c08789031215612c9557600080fd5b6000612ca389828a01612bc3565b9650506020612cb489828a01612bc3565b9550506040612cc589828a01612bc3565b9450506060612cd689828a01612bc3565b9350506080612ce789828a01612bc3565b92505060a0612cf889828a01612bc3565b9150509295509295509295565b600080600060608486031215612d1a57600080fd5b6000612d2886828701612bc3565b9350506020612d3986828701612bc3565b9250506040612d4a86828701612c02565b9150509250925092565b600080600080600080600060e0888a031215612d6f57600080fd5b6000612d7d8a828b01612bc3565b975050602088013567ffffffffffffffff811115612d9a57600080fd5b612da68a828b01612bd8565b9650506040612db78a828b01612c02565b9550506060612dc88a828b01612c02565b9450506080612dd98a828b01612c02565b93505060a0612dea8a828b01612c02565b92505060c0612dfb8a828b01612c02565b91505092959891949750929550565b60008060408385031215612e1d57600080fd5b6000612e2b85828601612bc3565b9250506020612e3c85828601612c02565b9150509250929050565b60008060408385031215612e5957600080fd5b600083013567ffffffffffffffff811115612e7357600080fd5b612e7f85828601612bd8565b9250506020612e9085828601612bc3565b9150509250929050565b600060208284031215612eac57600080fd5b6000612eba84828501612c02565b91505092915050565b612ecc81613bee565b82525050565b612edb81613c00565b82525050565b6000612eec82613ab2565b612ef68185613abd565b9350612f06818560208601613c52565b612f0f81613d73565b840191505092915050565b6000612f2582613ab2565b612f2f8185613ace565b9350612f3f818560208601613c52565b80840191505092915050565b6000612f58602383613abd565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612fbe600383613ace565b91507f64657800000000000000000000000000000000000000000000000000000000006000830152600382019050919050565b6000612ffe600383613ace565b91507f6c697100000000000000000000000000000000000000000000000000000000006000830152600382019050919050565b600061303e602283613abd565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130a4600a83613ace565b91507f7075626c696373616c65000000000000000000000000000000000000000000006000830152600a82019050919050565b60006130e4602883613abd565b91507f556e617574686f72697a6564206c697175696469747920696e63656e7469766560008301527f732077616c6c65740000000000000000000000000000000000000000000000006020830152604082019050919050565b600061314a602683613abd565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131b0601883613abd565b91507f556e617574686f72697a6564207465616d2077616c6c657400000000000000006000830152602082019050919050565b60006131f0601283613abd565b91507f4d617820616d6f756e74207265616368656400000000000000000000000000006000830152602082019050919050565b6000613230601f83613abd565b91507f556e617574686f72697a6564207075626c69632073616c652077616c6c6574006000830152602082019050919050565b6000613270601883613abd565b91507f576974686472617720616d6f756e7420746f6f206869676800000000000000006000830152602082019050919050565b60006132b0601d83613abd565b91507f556e617574686f72697a65642065636f73797374656d2077616c6c65740000006000830152602082019050919050565b60006132f0600b83613ace565b91507f7072697661746573616c650000000000000000000000000000000000000000006000830152600b82019050919050565b6000613330601b83613abd565b91507f53686f756c64206e6f7420736574207a65726f206164647265737300000000006000830152602082019050919050565b6000613370602883613abd565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133d6600983613ace565b91507f65636f73797374656d00000000000000000000000000000000000000000000006000830152600982019050919050565b6000613416601f83613abd565b91507f4f6e6c79206f776e65722063616e2073657420627579657220746f6b656e73006000830152602082019050919050565b6000613456602583613abd565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134bc602483613abd565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613522601c83613abd565b91507f556e617574686f72697a65642072657365727665732077616c6c6574000000006000830152602082019050919050565b6000613562601d83613abd565b91507f4f6e6c79206f776e65722063616e207570646174652077616c6c6574730000006000830152602082019050919050565b60006135a2600483613ace565b91507f7465616d000000000000000000000000000000000000000000000000000000006000830152600482019050919050565b60006135e2600783613ace565b91507f72657365727665000000000000000000000000000000000000000000000000006000830152600782019050919050565b6000613622602583613abd565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613688601783613abd565b91507f556e617574686f72697a6564206465782077616c6c65740000000000000000006000830152602082019050919050565b6136c481613c2c565b82525050565b6136d381613c36565b82525050565b60006136e58284612f1a565b915081905092915050565b60006136fb82612fb1565b9150819050919050565b600061371082612ff1565b9150819050919050565b600061372582613097565b9150819050919050565b600061373a826132e3565b9150819050919050565b600061374f826133c9565b9150819050919050565b600061376482613595565b9150819050919050565b6000613779826135d5565b9150819050919050565b60006020820190506137986000830184612ec3565b92915050565b60006020820190506137b36000830184612ed2565b92915050565b600060208201905081810360008301526137d38184612ee1565b905092915050565b600060208201905081810360008301526137f481612f4b565b9050919050565b6000602082019050818103600083015261381481613031565b9050919050565b60006020820190508181036000830152613834816130d7565b9050919050565b600060208201905081810360008301526138548161313d565b9050919050565b60006020820190508181036000830152613874816131a3565b9050919050565b60006020820190508181036000830152613894816131e3565b9050919050565b600060208201905081810360008301526138b481613223565b9050919050565b600060208201905081810360008301526138d481613263565b9050919050565b600060208201905081810360008301526138f4816132a3565b9050919050565b6000602082019050818103600083015261391481613323565b9050919050565b6000602082019050818103600083015261393481613363565b9050919050565b6000602082019050818103600083015261395481613409565b9050919050565b6000602082019050818103600083015261397481613449565b9050919050565b60006020820190508181036000830152613994816134af565b9050919050565b600060208201905081810360008301526139b481613515565b9050919050565b600060208201905081810360008301526139d481613555565b9050919050565b600060208201905081810360008301526139f481613615565b9050919050565b60006020820190508181036000830152613a148161367b565b9050919050565b6000602082019050613a3060008301846136bb565b92915050565b6000602082019050613a4b60008301846136ca565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613a7857613a77613d44565b5b8060405250919050565b600067ffffffffffffffff821115613a9d57613a9c613d44565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000613ae482613c2c565b9150613aef83613c2c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b2457613b23613cb7565b5b828201905092915050565b6000613b3a82613c2c565b9150613b4583613c2c565b925082613b5557613b54613ce6565b5b828204905092915050565b6000613b6b82613c2c565b9150613b7683613c2c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613baf57613bae613cb7565b5b828202905092915050565b6000613bc582613c2c565b9150613bd083613c2c565b925082821015613be357613be2613cb7565b5b828203905092915050565b6000613bf982613c0c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613c70578082015181840152602081019050613c55565b83811115613c7f576000848401525b50505050565b60006002820490506001821680613c9d57607f821691505b60208210811415613cb157613cb0613d15565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613d8d81613bee565b8114613d9857600080fd5b50565b613da481613c2c565b8114613daf57600080fd5b5056fea26469706673582212203d72b2129de14afa9bc74af7f53f3a952be4af8d686a22f4c512db83727f80ef64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000005454e564f590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003454e560000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): ENVOY
Arg [1] : symbol (string): ENV
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [3] : 454e564f59000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 454e560000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
21403:8991:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4924:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27877:502;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7091:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22293:76;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21731:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6044:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22983:1382;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7742:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5886:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21785:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8643:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21674:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21838:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24936:538;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22094:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6215:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28990:1399;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22007:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25480:601;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22798:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26087:570;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5143:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26663:612;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21945:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9361:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6555:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28385:520;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27281:590;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22190:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21895:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24397:467;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6793:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4924:100;4978:13;5011:5;5004:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4924:100;:::o;27877:502::-;27959:10;;;;;;;;;;;27943:26;;:12;:10;:12::i;:::-;:26;;;27935:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28006:20;28029:22;:29;;;;;:::i;:::-;;;;;;;;;;;;;:43;28059:12;:10;:12::i;:::-;28029:43;;;;;;;;;;;;;;;;28006:66;;28108:19;28158:12;28130:25;:40;;;;:::i;:::-;28108:62;;28202:11;28187;:26;;28179:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28298:11;28251:22;:29;;;;;:::i;:::-;;;;;;;;;;;;;:43;28281:12;:10;:12::i;:::-;28251:43;;;;;;;;;;;;;;;;:58;;;;;;;:::i;:::-;;;;;;;;28318:51;28336:4;28343:12;:10;:12::i;:::-;28357:11;28318:9;:51::i;:::-;27877:502;;;:::o;7091:169::-;7174:4;7191:39;7200:12;:10;:12::i;:::-;7214:7;7223:6;7191:8;:39::i;:::-;7248:4;7241:11;;7091:169;;;;:::o;22293:76::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21731:32::-;;;;;;;;;;;;;:::o;6044:108::-;6105:7;6132:12;;6125:19;;6044:108;:::o;22983:1382::-;23143:12;;;;;;;;;;;23127:28;;:12;:10;:12::i;:::-;:28;;;23119:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23228:1;23206:24;;:10;:24;;;;23198:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23293:1;23277:18;;:4;:18;;;;23269:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;23363:1;23342:23;;:9;:23;;;;23334:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;23432:1;23412:22;;:8;:22;;;;23404:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23496:1;23481:17;;:3;:17;;;;23473:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23560:1;23545:17;;:3;:17;;;;23537:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23654:22;:36;;;;;:::i;:::-;;;;;;;;;;;;;:55;23691:17;;;;;;;;;;;23654:55;;;;;;;;;;;;;;;;23603:22;:36;;;;;:::i;:::-;;;;;;;;;;;;;:48;23640:10;23603:48;;;;;;;;;;;;;;;:106;;;;23755:22;:30;;;;;:::i;:::-;;;;;;;;;;;;;:43;23786:11;;;;;;;;;;;23755:43;;;;;;;;;;;;;;;;23716:22;:30;;;;;:::i;:::-;;;;;;;;;;;;;:36;23747:4;23716:36;;;;;;;;;;;;;;;:82;;;;23854:22;:35;;;;;:::i;:::-;;;;;;;;;;;;;:53;23890:16;;;;;;;;;;;23854:53;;;;;;;;;;;;;;;;23805:22;:35;;;;;:::i;:::-;;;;;;;;;;;;;:46;23841:9;23805:46;;;;;;;;;;;;;;;:102;;;;23960:22;:33;;;;;:::i;:::-;;;;;;;;;;;;;:50;23994:15;;;;;;;;;;;23960:50;;;;;;;;;;;;;;;;23914:22;:33;;;;;:::i;:::-;;;;;;;;;;;;;:43;23948:8;23914:43;;;;;;;;;;;;;;;:96;;;;24054:22;:29;;;;;:::i;:::-;;;;;;;;;;;;;:41;24084:10;;;;;;;;;;;24054:41;;;;;;;;;;;;;;;;24017:22;:29;;;;;:::i;:::-;;;;;;;;;;;;;:34;24047:3;24017:34;;;;;;;;;;;;;;;:78;;;;24139:22;:29;;;;;:::i;:::-;;;;;;;;;;;;;:41;24169:10;;;;;;;;;;;24139:41;;;;;;;;;;;;;;;;24102:22;:29;;;;;:::i;:::-;;;;;;;;;;;;;:34;24132:3;24102:34;;;;;;;;;;;;;;;:78;;;;24209:10;24189:17;;:30;;;;;;;;;;;;;;;;;;24241:4;24227:11;;:18;;;;;;;;;;;;;;;;;;24271:9;24252:16;;:28;;;;;;;;;;;;;;;;;;24305:8;24287:15;;:26;;;;;;;;;;;;;;;;;;24333:3;24320:10;;:16;;;;;;;;;;;;;;;;;;24356:3;24343:10;;:16;;;;;;;;;;;;;;;;;;22983:1382;;;;;;:::o;7742:492::-;7882:4;7899:36;7909:6;7917:9;7928:6;7899:9;:36::i;:::-;7948:24;7975:11;:19;7987:6;7975:19;;;;;;;;;;;;;;;:33;7995:12;:10;:12::i;:::-;7975:33;;;;;;;;;;;;;;;;7948:60;;8047:6;8027:16;:26;;8019:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8134:57;8143:6;8151:12;:10;:12::i;:::-;8184:6;8165:16;:25;8134:8;:57::i;:::-;8222:4;8215:11;;;7742:492;;;;;:::o;5886:93::-;5944:5;5969:2;5962:9;;5886:93;:::o;21785:26::-;;;;;;;;;;;;;:::o;8643:215::-;8731:4;8748:80;8757:12;:10;:12::i;:::-;8771:7;8817:10;8780:11;:25;8792:12;:10;:12::i;:::-;8780:25;;;;;;;;;;;;;;;:34;8806:7;8780:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;8748:8;:80::i;:::-;8846:4;8839:11;;8643:215;;;;:::o;21674:27::-;;;;;;;;;;;;;:::o;21838:31::-;;;;;;;;;;;;;:::o;24936:538::-;25025:17;;;;;;;;;;;25009:33;;:12;:10;:12::i;:::-;:33;;;25001:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25087:20;25110:22;:36;;;;;:::i;:::-;;;;;;;;;;;;;:50;25147:12;:10;:12::i;:::-;25110:50;;;;;;;;;;;;;;;;25087:73;;25196:19;25246:12;25218:25;:40;;;;:::i;:::-;25196:62;;25290:11;25275;:26;;25267:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;25393:11;25339:22;:36;;;;;:::i;:::-;;;;;;;;;;;;;:50;25376:12;:10;:12::i;:::-;25339:50;;;;;;;;;;;;;;;;:65;;;;;;;:::i;:::-;;;;;;;;25413:51;25431:4;25438:12;:10;:12::i;:::-;25452:11;25413:9;:51::i;:::-;24936:538;;;:::o;22094:47::-;;;;;;;;;;;;;;;;;:::o;6215:127::-;6289:7;6316:9;:18;6326:7;6316:18;;;;;;;;;;;;;;;;6309:25;;6215:127;;;:::o;28990:1399::-;29192:7;29214:19;29236:37;29270:2;29255:9;29237:15;:27;;;;:::i;:::-;29236:33;;:37;;;;:::i;:::-;29214:59;;29315:23;29341:22;29364:10;29341:34;;;;;;:::i;:::-;;;;;;;;;;;;;:42;29376:6;29341:42;;;;;;;;;;;;;;;;29315:68;;29415:21;29472:1;29451:17;:22;29447:104;;29500:43;29539:3;29500:34;29516:17;29500:11;:15;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;29484:59;;29447:104;29609:12;29587:11;:35;29583:96;;;29656:15;29640:13;:31;;;;:::i;:::-;29633:38;;;;;;;29583:96;29733:28;29764:50;29799:14;29764:30;29780:13;29764:11;:15;;:30;;;;:::i;:::-;:34;;:50;;;;:::i;:::-;29733:81;;29861:23;29909:12;29887:11;:35;;;;:::i;:::-;29861:61;;29995:22;30020:60;30066:13;30020:41;30040:20;30020:15;:19;;:41;;;;:::i;:::-;:45;;:60;;;;:::i;:::-;29995:85;;30149:15;30131:14;:33;30127:64;;30182:1;30175:8;;;;;;;;;;30127:64;30255:11;30238:14;:28;30234:87;;;30298:15;30284:11;:29;;;;:::i;:::-;30277:36;;;;;;;;;;30234:87;30368:15;30351:14;:32;;;;:::i;:::-;30344:39;;;;;;;;28990:1399;;;;;;;;;;:::o;22007:25::-;;;;;;;;;;;;;:::o;25480:601::-;25562:10;;;;;;;;;;;25546:26;;:12;:10;:12::i;:::-;:26;;;25538:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;25747:19;25769:97;25787:12;:10;:12::i;:::-;25769:97;;;;;;;;;;;;;;;;;25808:2;25812:5;25819:6;25827:25;25854:11;;25769:17;:97::i;:::-;25747:119;;25902:11;25887;:26;;25879:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;25998:11;25951:22;:29;;;;;:::i;:::-;;;;;;;;;;;;;:43;25981:12;:10;:12::i;:::-;25951:43;;;;;;;;;;;;;;;;:58;;;;;;;:::i;:::-;;;;;;;;26018:51;26036:4;26043:12;:10;:12::i;:::-;26057:11;26018:9;:51::i;:::-;25480:601;;:::o;22798:158::-;22874:12;;;;;;;;;;;22858:28;;:12;:10;:12::i;:::-;:28;;;22850:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22944:5;22929:12;;:20;;;;;;;;;;;;;;;;;;22798:158;:::o;26087:570::-;26170:11;;;;;;;;;;;26154:27;;:12;:10;:12::i;:::-;:27;;;26146:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26324:19;26346:99;26364:12;:10;:12::i;:::-;26346:99;;;;;;;;;;;;;;;;;26386:1;26389:6;26397;26405:26;26433:11;;26346:17;:99::i;:::-;26324:121;;26481:11;26466;:26;;26458:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;26578:11;26530:22;:30;;;;;:::i;:::-;;;;;;;;;;;;;:44;26561:12;:10;:12::i;:::-;26530:44;;;;;;;;;;;;;;;;:59;;;;;;;:::i;:::-;;;;;;;;26598:51;26616:4;26623:12;:10;:12::i;:::-;26637:11;26598:9;:51::i;:::-;26087:570;;:::o;5143:104::-;5199:13;5232:7;5225:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5143:104;:::o;26663:612::-;26751:16;;;;;;;;;;;26735:32;;:12;:10;:12::i;:::-;:32;;;26727:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26933:19;26955:103;26973:12;:10;:12::i;:::-;26955:103;;;;;;;;;;;;;;;;;27000:1;27003:5;27010:6;27018:26;27046:11;;26955:17;:103::i;:::-;26933:125;;27094:11;27079;:26;;27071:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27196:11;27143:22;:35;;;;;:::i;:::-;;;;;;;;;;;;;:49;27179:12;:10;:12::i;:::-;27143:49;;;;;;;;;;;;;;;;:64;;;;;;;:::i;:::-;;;;;;;;27216:51;27234:4;27241:12;:10;:12::i;:::-;27255:11;27216:9;:51::i;:::-;26663:612;;:::o;21945:25::-;;;;;;;;;;;;;:::o;9361:413::-;9454:4;9471:24;9498:11;:25;9510:12;:10;:12::i;:::-;9498:25;;;;;;;;;;;;;;;:34;9524:7;9498:34;;;;;;;;;;;;;;;;9471:61;;9571:15;9551:16;:35;;9543:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9664:67;9673:12;:10;:12::i;:::-;9687:7;9715:15;9696:16;:34;9664:8;:67::i;:::-;9762:4;9755:11;;;9361:413;;;;:::o;6555:175::-;6641:4;6658:42;6668:12;:10;:12::i;:::-;6682:9;6693:6;6658:9;:42::i;:::-;6718:4;6711:11;;6555:175;;;;:::o;28385:520::-;28556:19;28578:106;28596:12;:10;:12::i;:::-;28578:106;;;;;;;;;;;;;;;;;28625:2;28629:6;28637;28645:12;:26;28658:12;:10;:12::i;:::-;28645:26;;;;;;;;;;;;;;;;28673:10;;28578:17;:106::i;:::-;28556:128;;28720:11;28705;:26;;28697:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28824:11;28769:22;:37;;;;;:::i;:::-;;;;;;;;;;;;;:51;28807:12;:10;:12::i;:::-;28769:51;;;;;;;;;;;;;;;;:66;;;;;;;:::i;:::-;;;;;;;;28844:51;28862:4;28869:12;:10;:12::i;:::-;28883:11;28844:9;:51::i;:::-;28385:520;;:::o;27281:590::-;27368:15;;;;;;;;;;;27352:31;;:12;:10;:12::i;:::-;:31;;;27344:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;27532:19;27554:102;27572:12;:10;:12::i;:::-;27554:102;;;;;;;;;;;;;;;;;27597:1;27600:6;27608;27616:26;27644:11;;27554:17;:102::i;:::-;27532:124;;27692:11;27677;:26;;27669:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27792:11;27741:22;:33;;;;;:::i;:::-;;;;;;;;;;;;;:47;27775:12;:10;:12::i;:::-;27741:47;;;;;;;;;;;;;;;;:62;;;;;;;:::i;:::-;;;;;;;;27812:51;27830:4;27837:12;:10;:12::i;:::-;27851:11;27812:9;:51::i;:::-;27281:590;;:::o;22190:32::-;;;;:::o;21895:30::-;;;;;;;;;;;;;:::o;24397:467::-;24497:12;;;;;;;;;;;24481:28;;:12;:10;:12::i;:::-;:28;;;24473:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;24596:12;:19;24609:5;24596:19;;;;;;;;;;;;;;;;24575:17;;:40;;;;;;;:::i;:::-;;;;;;;;24643:11;24622:17;;:32;;;;;;;:::i;:::-;;;;;;;;24748:26;24727:17;;:47;;24719:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;24847:11;24825:12;:19;24838:5;24825:19;;;;;;;;;;;;;;;:33;;;;24397:467;;:::o;6793:151::-;6882:7;6909:11;:18;6921:5;6909:18;;;;;;;;;;;;;;;:27;6928:7;6909:27;;;;;;;;;;;;;;;;6902:34;;6793:151;;;;:::o;637:98::-;690:7;717:10;710:17;;637:98;:::o;10264:733::-;10422:1;10404:20;;:6;:20;;;;10396:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10506:1;10485:23;;:9;:23;;;;10477:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10561:47;10582:6;10590:9;10601:6;10561:20;:47::i;:::-;10621:21;10645:9;:17;10655:6;10645:17;;;;;;;;;;;;;;;;10621:41;;10698:6;10681:13;:23;;10673:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;10819:6;10803:13;:22;10783:9;:17;10793:6;10783:17;;;;;;;;;;;;;;;:42;;;;10871:6;10847:9;:20;10857:9;10847:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;10912:9;10895:35;;10904:6;10895:35;;;10923:6;10895:35;;;;;;:::i;:::-;;;;;;;;10943:46;10963:6;10971:9;10982:6;10943:19;:46::i;:::-;10264:733;;;;:::o;13045:380::-;13198:1;13181:19;;:5;:19;;;;13173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13279:1;13260:21;;:7;:21;;;;13252:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13363:6;13333:11;:18;13345:5;13333:18;;;;;;;;;;;;;;;:27;13352:7;13333:27;;;;;;;;;;;;;;;:36;;;;13401:7;13385:32;;13394:5;13385:32;;;13410:6;13385:32;;;;;;:::i;:::-;;;;;;;;13045:380;;;:::o;18373:98::-;18431:7;18462:1;18458;:5;;;;:::i;:::-;18451:12;;18373:98;;;;:::o;17974:::-;18032:7;18063:1;18059;:5;;;;:::i;:::-;18052:12;;17974:98;;;;:::o;17617:::-;17675:7;17706:1;17702;:5;;;;:::i;:::-;17695:12;;17617:98;;;;:::o;17236:::-;17294:7;17325:1;17321;:5;;;;:::i;:::-;17314:12;;17236:98;;;;:::o;14025:125::-;;;;:::o;14754:124::-;;;;:::o;7:344:1:-;;110:65;125:49;167:6;125:49;:::i;:::-;110:65;:::i;:::-;101:74;;198:6;191:5;184:21;236:4;229:5;225:16;274:3;265:6;260:3;256:16;253:25;250:2;;;291:1;288;281:12;250:2;304:41;338:6;333:3;328;304:41;:::i;:::-;91:260;;;;;;:::o;357:139::-;;441:6;428:20;419:29;;457:33;484:5;457:33;:::i;:::-;409:87;;;;:::o;516:273::-;;621:3;614:4;606:6;602:17;598:27;588:2;;639:1;636;629:12;588:2;679:6;666:20;704:79;779:3;771:6;764:4;756:6;752:17;704:79;:::i;:::-;695:88;;578:211;;;;;:::o;795:139::-;;879:6;866:20;857:29;;895:33;922:5;895:33;:::i;:::-;847:87;;;;:::o;940:262::-;;1048:2;1036:9;1027:7;1023:23;1019:32;1016:2;;;1064:1;1061;1054:12;1016:2;1107:1;1132:53;1177:7;1168:6;1157:9;1153:22;1132:53;:::i;:::-;1122:63;;1078:117;1006:196;;;;:::o;1208:407::-;;;1333:2;1321:9;1312:7;1308:23;1304:32;1301:2;;;1349:1;1346;1339:12;1301:2;1392:1;1417:53;1462:7;1453:6;1442:9;1438:22;1417:53;:::i;:::-;1407:63;;1363:117;1519:2;1545:53;1590:7;1581:6;1570:9;1566:22;1545:53;:::i;:::-;1535:63;;1490:118;1291:324;;;;;:::o;1621:990::-;;;;;;;1814:3;1802:9;1793:7;1789:23;1785:33;1782:2;;;1831:1;1828;1821:12;1782:2;1874:1;1899:53;1944:7;1935:6;1924:9;1920:22;1899:53;:::i;:::-;1889:63;;1845:117;2001:2;2027:53;2072:7;2063:6;2052:9;2048:22;2027:53;:::i;:::-;2017:63;;1972:118;2129:2;2155:53;2200:7;2191:6;2180:9;2176:22;2155:53;:::i;:::-;2145:63;;2100:118;2257:2;2283:53;2328:7;2319:6;2308:9;2304:22;2283:53;:::i;:::-;2273:63;;2228:118;2385:3;2412:53;2457:7;2448:6;2437:9;2433:22;2412:53;:::i;:::-;2402:63;;2356:119;2514:3;2541:53;2586:7;2577:6;2566:9;2562:22;2541:53;:::i;:::-;2531:63;;2485:119;1772:839;;;;;;;;:::o;2617:552::-;;;;2759:2;2747:9;2738:7;2734:23;2730:32;2727:2;;;2775:1;2772;2765:12;2727:2;2818:1;2843:53;2888:7;2879:6;2868:9;2864:22;2843:53;:::i;:::-;2833:63;;2789:117;2945:2;2971:53;3016:7;3007:6;2996:9;2992:22;2971:53;:::i;:::-;2961:63;;2916:118;3073:2;3099:53;3144:7;3135:6;3124:9;3120:22;3099:53;:::i;:::-;3089:63;;3044:118;2717:452;;;;;:::o;3175:1249::-;;;;;;;;3395:3;3383:9;3374:7;3370:23;3366:33;3363:2;;;3412:1;3409;3402:12;3363:2;3455:1;3480:53;3525:7;3516:6;3505:9;3501:22;3480:53;:::i;:::-;3470:63;;3426:117;3610:2;3599:9;3595:18;3582:32;3641:18;3633:6;3630:30;3627:2;;;3673:1;3670;3663:12;3627:2;3701:63;3756:7;3747:6;3736:9;3732:22;3701:63;:::i;:::-;3691:73;;3553:221;3813:2;3839:53;3884:7;3875:6;3864:9;3860:22;3839:53;:::i;:::-;3829:63;;3784:118;3941:2;3967:53;4012:7;4003:6;3992:9;3988:22;3967:53;:::i;:::-;3957:63;;3912:118;4069:3;4096:53;4141:7;4132:6;4121:9;4117:22;4096:53;:::i;:::-;4086:63;;4040:119;4198:3;4225:53;4270:7;4261:6;4250:9;4246:22;4225:53;:::i;:::-;4215:63;;4169:119;4327:3;4354:53;4399:7;4390:6;4379:9;4375:22;4354:53;:::i;:::-;4344:63;;4298:119;3353:1071;;;;;;;;;;:::o;4430:407::-;;;4555:2;4543:9;4534:7;4530:23;4526:32;4523:2;;;4571:1;4568;4561:12;4523:2;4614:1;4639:53;4684:7;4675:6;4664:9;4660:22;4639:53;:::i;:::-;4629:63;;4585:117;4741:2;4767:53;4812:7;4803:6;4792:9;4788:22;4767:53;:::i;:::-;4757:63;;4712:118;4513:324;;;;;:::o;4843:520::-;;;4978:2;4966:9;4957:7;4953:23;4949:32;4946:2;;;4994:1;4991;4984:12;4946:2;5065:1;5054:9;5050:17;5037:31;5095:18;5087:6;5084:30;5081:2;;;5127:1;5124;5117:12;5081:2;5155:63;5210:7;5201:6;5190:9;5186:22;5155:63;:::i;:::-;5145:73;;5008:220;5267:2;5293:53;5338:7;5329:6;5318:9;5314:22;5293:53;:::i;:::-;5283:63;;5238:118;4936:427;;;;;:::o;5369:262::-;;5477:2;5465:9;5456:7;5452:23;5448:32;5445:2;;;5493:1;5490;5483:12;5445:2;5536:1;5561:53;5606:7;5597:6;5586:9;5582:22;5561:53;:::i;:::-;5551:63;;5507:117;5435:196;;;;:::o;5637:118::-;5724:24;5742:5;5724:24;:::i;:::-;5719:3;5712:37;5702:53;;:::o;5761:109::-;5842:21;5857:5;5842:21;:::i;:::-;5837:3;5830:34;5820:50;;:::o;5876:364::-;;5992:39;6025:5;5992:39;:::i;:::-;6047:71;6111:6;6106:3;6047:71;:::i;:::-;6040:78;;6127:52;6172:6;6167:3;6160:4;6153:5;6149:16;6127:52;:::i;:::-;6204:29;6226:6;6204:29;:::i;:::-;6199:3;6195:39;6188:46;;5968:272;;;;;:::o;6246:377::-;;6380:39;6413:5;6380:39;:::i;:::-;6435:89;6517:6;6512:3;6435:89;:::i;:::-;6428:96;;6533:52;6578:6;6573:3;6566:4;6559:5;6555:16;6533:52;:::i;:::-;6610:6;6605:3;6601:16;6594:23;;6356:267;;;;;:::o;6629:367::-;;6792:67;6856:2;6851:3;6792:67;:::i;:::-;6785:74;;6889:34;6885:1;6880:3;6876:11;6869:55;6955:5;6950:2;6945:3;6941:12;6934:27;6987:2;6982:3;6978:12;6971:19;;6775:221;;;:::o;7002:335::-;;7183:84;7265:1;7260:3;7183:84;:::i;:::-;7176:91;;7297:5;7293:1;7288:3;7284:11;7277:26;7329:1;7324:3;7320:11;7313:18;;7166:171;;;:::o;7343:335::-;;7524:84;7606:1;7601:3;7524:84;:::i;:::-;7517:91;;7638:5;7634:1;7629:3;7625:11;7618:26;7670:1;7665:3;7661:11;7654:18;;7507:171;;;:::o;7684:366::-;;7847:67;7911:2;7906:3;7847:67;:::i;:::-;7840:74;;7944:34;7940:1;7935:3;7931:11;7924:55;8010:4;8005:2;8000:3;7996:12;7989:26;8041:2;8036:3;8032:12;8025:19;;7830:220;;;:::o;8056:344::-;;8237:85;8319:2;8314:3;8237:85;:::i;:::-;8230:92;;8352:12;8348:1;8343:3;8339:11;8332:33;8391:2;8386:3;8382:12;8375:19;;8220:180;;;:::o;8406:372::-;;8569:67;8633:2;8628:3;8569:67;:::i;:::-;8562:74;;8666:34;8662:1;8657:3;8653:11;8646:55;8732:10;8727:2;8722:3;8718:12;8711:32;8769:2;8764:3;8760:12;8753:19;;8552:226;;;:::o;8784:370::-;;8947:67;9011:2;9006:3;8947:67;:::i;:::-;8940:74;;9044:34;9040:1;9035:3;9031:11;9024:55;9110:8;9105:2;9100:3;9096:12;9089:30;9145:2;9140:3;9136:12;9129:19;;8930:224;;;:::o;9160:322::-;;9323:67;9387:2;9382:3;9323:67;:::i;:::-;9316:74;;9420:26;9416:1;9411:3;9407:11;9400:47;9473:2;9468:3;9464:12;9457:19;;9306:176;;;:::o;9488:316::-;;9651:67;9715:2;9710:3;9651:67;:::i;:::-;9644:74;;9748:20;9744:1;9739:3;9735:11;9728:41;9795:2;9790:3;9786:12;9779:19;;9634:170;;;:::o;9810:329::-;;9973:67;10037:2;10032:3;9973:67;:::i;:::-;9966:74;;10070:33;10066:1;10061:3;10057:11;10050:54;10130:2;10125:3;10121:12;10114:19;;9956:183;;;:::o;10145:322::-;;10308:67;10372:2;10367:3;10308:67;:::i;:::-;10301:74;;10405:26;10401:1;10396:3;10392:11;10385:47;10458:2;10453:3;10449:12;10442:19;;10291:176;;;:::o;10473:327::-;;10636:67;10700:2;10695:3;10636:67;:::i;:::-;10629:74;;10733:31;10729:1;10724:3;10720:11;10713:52;10791:2;10786:3;10782:12;10775:19;;10619:181;;;:::o;10806:345::-;;10987:85;11069:2;11064:3;10987:85;:::i;:::-;10980:92;;11102:13;11098:1;11093:3;11089:11;11082:34;11142:2;11137:3;11133:12;11126:19;;10970:181;;;:::o;11157:325::-;;11320:67;11384:2;11379:3;11320:67;:::i;:::-;11313:74;;11417:29;11413:1;11408:3;11404:11;11397:50;11473:2;11468:3;11464:12;11457:19;;11303:179;;;:::o;11488:372::-;;11651:67;11715:2;11710:3;11651:67;:::i;:::-;11644:74;;11748:34;11744:1;11739:3;11735:11;11728:55;11814:10;11809:2;11804:3;11800:12;11793:32;11851:2;11846:3;11842:12;11835:19;;11634:226;;;:::o;11866:341::-;;12047:84;12129:1;12124:3;12047:84;:::i;:::-;12040:91;;12161:11;12157:1;12152:3;12148:11;12141:32;12199:1;12194:3;12190:11;12183:18;;12030:177;;;:::o;12213:329::-;;12376:67;12440:2;12435:3;12376:67;:::i;:::-;12369:74;;12473:33;12469:1;12464:3;12460:11;12453:54;12533:2;12528:3;12524:12;12517:19;;12359:183;;;:::o;12548:369::-;;12711:67;12775:2;12770:3;12711:67;:::i;:::-;12704:74;;12808:34;12804:1;12799:3;12795:11;12788:55;12874:7;12869:2;12864:3;12860:12;12853:29;12908:2;12903:3;12899:12;12892:19;;12694:223;;;:::o;12923:368::-;;13086:67;13150:2;13145:3;13086:67;:::i;:::-;13079:74;;13183:34;13179:1;13174:3;13170:11;13163:55;13249:6;13244:2;13239:3;13235:12;13228:28;13282:2;13277:3;13273:12;13266:19;;13069:222;;;:::o;13297:326::-;;13460:67;13524:2;13519:3;13460:67;:::i;:::-;13453:74;;13557:30;13553:1;13548:3;13544:11;13537:51;13614:2;13609:3;13605:12;13598:19;;13443:180;;;:::o;13629:327::-;;13792:67;13856:2;13851:3;13792:67;:::i;:::-;13785:74;;13889:31;13885:1;13880:3;13876:11;13869:52;13947:2;13942:3;13938:12;13931:19;;13775:181;;;:::o;13962:336::-;;14143:84;14225:1;14220:3;14143:84;:::i;:::-;14136:91;;14257:6;14253:1;14248:3;14244:11;14237:27;14290:1;14285:3;14281:11;14274:18;;14126:172;;;:::o;14304:339::-;;14485:84;14567:1;14562:3;14485:84;:::i;:::-;14478:91;;14599:9;14595:1;14590:3;14586:11;14579:30;14635:1;14630:3;14626:11;14619:18;;14468:175;;;:::o;14649:369::-;;14812:67;14876:2;14871:3;14812:67;:::i;:::-;14805:74;;14909:34;14905:1;14900:3;14896:11;14889:55;14975:7;14970:2;14965:3;14961:12;14954:29;15009:2;15004:3;15000:12;14993:19;;14795:223;;;:::o;15024:321::-;;15187:67;15251:2;15246:3;15187:67;:::i;:::-;15180:74;;15284:25;15280:1;15275:3;15271:11;15264:46;15336:2;15331:3;15327:12;15320:19;;15170:175;;;:::o;15351:118::-;15438:24;15456:5;15438:24;:::i;:::-;15433:3;15426:37;15416:53;;:::o;15475:112::-;15558:22;15574:5;15558:22;:::i;:::-;15553:3;15546:35;15536:51;;:::o;15593:275::-;;15747:95;15838:3;15829:6;15747:95;:::i;:::-;15740:102;;15859:3;15852:10;;15729:139;;;;:::o;15874:381::-;;16081:148;16225:3;16081:148;:::i;:::-;16074:155;;16246:3;16239:10;;16063:192;;;:::o;16261:381::-;;16468:148;16612:3;16468:148;:::i;:::-;16461:155;;16633:3;16626:10;;16450:192;;;:::o;16648:381::-;;16855:148;16999:3;16855:148;:::i;:::-;16848:155;;17020:3;17013:10;;16837:192;;;:::o;17035:381::-;;17242:148;17386:3;17242:148;:::i;:::-;17235:155;;17407:3;17400:10;;17224:192;;;:::o;17422:381::-;;17629:148;17773:3;17629:148;:::i;:::-;17622:155;;17794:3;17787:10;;17611:192;;;:::o;17809:381::-;;18016:148;18160:3;18016:148;:::i;:::-;18009:155;;18181:3;18174:10;;17998:192;;;:::o;18196:381::-;;18403:148;18547:3;18403:148;:::i;:::-;18396:155;;18568:3;18561:10;;18385:192;;;:::o;18583:222::-;;18714:2;18703:9;18699:18;18691:26;;18727:71;18795:1;18784:9;18780:17;18771:6;18727:71;:::i;:::-;18681:124;;;;:::o;18811:210::-;;18936:2;18925:9;18921:18;18913:26;;18949:65;19011:1;19000:9;18996:17;18987:6;18949:65;:::i;:::-;18903:118;;;;:::o;19027:313::-;;19178:2;19167:9;19163:18;19155:26;;19227:9;19221:4;19217:20;19213:1;19202:9;19198:17;19191:47;19255:78;19328:4;19319:6;19255:78;:::i;:::-;19247:86;;19145:195;;;;:::o;19346:419::-;;19550:2;19539:9;19535:18;19527:26;;19599:9;19593:4;19589:20;19585:1;19574:9;19570:17;19563:47;19627:131;19753:4;19627:131;:::i;:::-;19619:139;;19517:248;;;:::o;19771:419::-;;19975:2;19964:9;19960:18;19952:26;;20024:9;20018:4;20014:20;20010:1;19999:9;19995:17;19988:47;20052:131;20178:4;20052:131;:::i;:::-;20044:139;;19942:248;;;:::o;20196:419::-;;20400:2;20389:9;20385:18;20377:26;;20449:9;20443:4;20439:20;20435:1;20424:9;20420:17;20413:47;20477:131;20603:4;20477:131;:::i;:::-;20469:139;;20367:248;;;:::o;20621:419::-;;20825:2;20814:9;20810:18;20802:26;;20874:9;20868:4;20864:20;20860:1;20849:9;20845:17;20838:47;20902:131;21028:4;20902:131;:::i;:::-;20894:139;;20792:248;;;:::o;21046:419::-;;21250:2;21239:9;21235:18;21227:26;;21299:9;21293:4;21289:20;21285:1;21274:9;21270:17;21263:47;21327:131;21453:4;21327:131;:::i;:::-;21319:139;;21217:248;;;:::o;21471:419::-;;21675:2;21664:9;21660:18;21652:26;;21724:9;21718:4;21714:20;21710:1;21699:9;21695:17;21688:47;21752:131;21878:4;21752:131;:::i;:::-;21744:139;;21642:248;;;:::o;21896:419::-;;22100:2;22089:9;22085:18;22077:26;;22149:9;22143:4;22139:20;22135:1;22124:9;22120:17;22113:47;22177:131;22303:4;22177:131;:::i;:::-;22169:139;;22067:248;;;:::o;22321:419::-;;22525:2;22514:9;22510:18;22502:26;;22574:9;22568:4;22564:20;22560:1;22549:9;22545:17;22538:47;22602:131;22728:4;22602:131;:::i;:::-;22594:139;;22492:248;;;:::o;22746:419::-;;22950:2;22939:9;22935:18;22927:26;;22999:9;22993:4;22989:20;22985:1;22974:9;22970:17;22963:47;23027:131;23153:4;23027:131;:::i;:::-;23019:139;;22917:248;;;:::o;23171:419::-;;23375:2;23364:9;23360:18;23352:26;;23424:9;23418:4;23414:20;23410:1;23399:9;23395:17;23388:47;23452:131;23578:4;23452:131;:::i;:::-;23444:139;;23342:248;;;:::o;23596:419::-;;23800:2;23789:9;23785:18;23777:26;;23849:9;23843:4;23839:20;23835:1;23824:9;23820:17;23813:47;23877:131;24003:4;23877:131;:::i;:::-;23869:139;;23767:248;;;:::o;24021:419::-;;24225:2;24214:9;24210:18;24202:26;;24274:9;24268:4;24264:20;24260:1;24249:9;24245:17;24238:47;24302:131;24428:4;24302:131;:::i;:::-;24294:139;;24192:248;;;:::o;24446:419::-;;24650:2;24639:9;24635:18;24627:26;;24699:9;24693:4;24689:20;24685:1;24674:9;24670:17;24663:47;24727:131;24853:4;24727:131;:::i;:::-;24719:139;;24617:248;;;:::o;24871:419::-;;25075:2;25064:9;25060:18;25052:26;;25124:9;25118:4;25114:20;25110:1;25099:9;25095:17;25088:47;25152:131;25278:4;25152:131;:::i;:::-;25144:139;;25042:248;;;:::o;25296:419::-;;25500:2;25489:9;25485:18;25477:26;;25549:9;25543:4;25539:20;25535:1;25524:9;25520:17;25513:47;25577:131;25703:4;25577:131;:::i;:::-;25569:139;;25467:248;;;:::o;25721:419::-;;25925:2;25914:9;25910:18;25902:26;;25974:9;25968:4;25964:20;25960:1;25949:9;25945:17;25938:47;26002:131;26128:4;26002:131;:::i;:::-;25994:139;;25892:248;;;:::o;26146:419::-;;26350:2;26339:9;26335:18;26327:26;;26399:9;26393:4;26389:20;26385:1;26374:9;26370:17;26363:47;26427:131;26553:4;26427:131;:::i;:::-;26419:139;;26317:248;;;:::o;26571:419::-;;26775:2;26764:9;26760:18;26752:26;;26824:9;26818:4;26814:20;26810:1;26799:9;26795:17;26788:47;26852:131;26978:4;26852:131;:::i;:::-;26844:139;;26742:248;;;:::o;26996:222::-;;27127:2;27116:9;27112:18;27104:26;;27140:71;27208:1;27197:9;27193:17;27184:6;27140:71;:::i;:::-;27094:124;;;;:::o;27224:214::-;;27351:2;27340:9;27336:18;27328:26;;27364:67;27428:1;27417:9;27413:17;27404:6;27364:67;:::i;:::-;27318:120;;;;:::o;27444:283::-;;27510:2;27504:9;27494:19;;27552:4;27544:6;27540:17;27659:6;27647:10;27644:22;27623:18;27611:10;27608:34;27605:62;27602:2;;;27670:18;;:::i;:::-;27602:2;27710:10;27706:2;27699:22;27484:243;;;;:::o;27733:332::-;;27885:18;27877:6;27874:30;27871:2;;;27907:18;;:::i;:::-;27871:2;27992:4;27988:9;27981:4;27973:6;27969:17;27965:33;27957:41;;28053:4;28047;28043:15;28035:23;;27800:265;;;:::o;28071:99::-;;28157:5;28151:12;28141:22;;28130:40;;;:::o;28176:169::-;;28294:6;28289:3;28282:19;28334:4;28329:3;28325:14;28310:29;;28272:73;;;;:::o;28351:148::-;;28490:3;28475:18;;28465:34;;;;:::o;28505:305::-;;28564:20;28582:1;28564:20;:::i;:::-;28559:25;;28598:20;28616:1;28598:20;:::i;:::-;28593:25;;28752:1;28684:66;28680:74;28677:1;28674:81;28671:2;;;28758:18;;:::i;:::-;28671:2;28802:1;28799;28795:9;28788:16;;28549:261;;;;:::o;28816:185::-;;28873:20;28891:1;28873:20;:::i;:::-;28868:25;;28907:20;28925:1;28907:20;:::i;:::-;28902:25;;28946:1;28936:2;;28951:18;;:::i;:::-;28936:2;28993:1;28990;28986:9;28981:14;;28858:143;;;;:::o;29007:348::-;;29070:20;29088:1;29070:20;:::i;:::-;29065:25;;29104:20;29122:1;29104:20;:::i;:::-;29099:25;;29292:1;29224:66;29220:74;29217:1;29214:81;29209:1;29202:9;29195:17;29191:105;29188:2;;;29299:18;;:::i;:::-;29188:2;29347:1;29344;29340:9;29329:20;;29055:300;;;;:::o;29361:191::-;;29421:20;29439:1;29421:20;:::i;:::-;29416:25;;29455:20;29473:1;29455:20;:::i;:::-;29450:25;;29494:1;29491;29488:8;29485:2;;;29499:18;;:::i;:::-;29485:2;29544:1;29541;29537:9;29529:17;;29406:146;;;;:::o;29558:96::-;;29624:24;29642:5;29624:24;:::i;:::-;29613:35;;29603:51;;;:::o;29660:90::-;;29737:5;29730:13;29723:21;29712:32;;29702:48;;;:::o;29756:126::-;;29833:42;29826:5;29822:54;29811:65;;29801:81;;;:::o;29888:77::-;;29954:5;29943:16;;29933:32;;;:::o;29971:86::-;;30046:4;30039:5;30035:16;30024:27;;30014:43;;;:::o;30063:154::-;30147:6;30142:3;30137;30124:30;30209:1;30200:6;30195:3;30191:16;30184:27;30114:103;;;:::o;30223:307::-;30291:1;30301:113;30315:6;30312:1;30309:13;30301:113;;;30400:1;30395:3;30391:11;30385:18;30381:1;30376:3;30372:11;30365:39;30337:2;30334:1;30330:10;30325:15;;30301:113;;;30432:6;30429:1;30426:13;30423:2;;;30512:1;30503:6;30498:3;30494:16;30487:27;30423:2;30272:258;;;;:::o;30536:320::-;;30617:1;30611:4;30607:12;30597:22;;30664:1;30658:4;30654:12;30685:18;30675:2;;30741:4;30733:6;30729:17;30719:27;;30675:2;30803;30795:6;30792:14;30772:18;30769:38;30766:2;;;30822:18;;:::i;:::-;30766:2;30587:269;;;;:::o;30862:180::-;30910:77;30907:1;30900:88;31007:4;31004:1;30997:15;31031:4;31028:1;31021:15;31048:180;31096:77;31093:1;31086:88;31193:4;31190:1;31183:15;31217:4;31214:1;31207:15;31234:180;31282:77;31279:1;31272:88;31379:4;31376:1;31369:15;31403:4;31400:1;31393:15;31420:180;31468:77;31465:1;31458:88;31565:4;31562:1;31555:15;31589:4;31586:1;31579:15;31606:102;;31698:2;31694:7;31689:2;31682:5;31678:14;31674:28;31664:38;;31654:54;;;:::o;31714:122::-;31787:24;31805:5;31787:24;:::i;:::-;31780:5;31777:35;31767:2;;31826:1;31823;31816:12;31767:2;31757:79;:::o;31842:122::-;31915:24;31933:5;31915:24;:::i;:::-;31908:5;31905:35;31895:2;;31954:1;31951;31944:12;31895:2;31885:79;:::o
Swarm Source
ipfs://3d72b2129de14afa9bc74af7f53f3a952be4af8d686a22f4c512db83727f80ef
Loading...
Loading
Loading...
Loading
OVERVIEW
Our goal is to build a new kind of product suite that brings utility to NFTs, fueled by the utility token ENV. First glimpse of the roadmap: Collectors Deck, ENVOY Vault and a Gamification mechanism with level based Collector Points (CP) and rewards.Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.000402 | 39,481,837.0894 | $15,870.51 |
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.