More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 2 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
18942393 | 372 days ago | Contract Creation | 0 ETH | |||
18942393 | 372 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
ZevToken
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-01-05 */ pragma solidity 0.8.20; // SPDX-License-Identifier: MIT abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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); } interface IERC20Zevdata 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, IERC20Zevdata { 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}. * * 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 default value returned by this function, unless * it's 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: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, 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) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, 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) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * 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: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, 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; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _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; // Overflow not possible: amount <= accountBalance <= totalSupply. _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 Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - 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 {} } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() external virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } library SafeERC20 { using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } } contract TokenHandler is Ownable { function sendTokenToOwner(address token) external onlyOwner { if(IERC20(token).balanceOf(address(this)) > 0){ SafeERC20.safeTransfer(IERC20(token),owner(), IERC20(token).balanceOf(address(this))); } } } interface IWETH { function deposit() external payable; } interface ILpPair { function sync() external; } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external; function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable; function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external; function swapTokensForExactTokens(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); } interface IDexFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } contract ZevToken is ERC20, Ownable { mapping (address => bool) public exemptFromFees; mapping (address => bool) public exemptFromLimits; uint256 public immutable launchTime_; mapping (address => bool) public isAMMPair; uint256 public maxTransaction; uint256 public maxWallet; address public projectAddress; address public immutable zevAddress; address public immutable zentinelAddress; struct Taxes { uint64 projectTax; uint64 totalTax; uint64 initialTax; } struct TokensForTax { uint112 tokensForProject; uint112 tokensForZev; bool gasSaver; } TokensForTax public tokensForTax; Taxes public buyTax; Taxes public sellTax; string public website; string public twitter; string public telegram; TokenHandler public immutable tokenHandler; bool public limitsInEffect = true; bool private swapping; uint256 public swapTokensAtAmt; address public lpPair; IDexRouter public dexRouter; IERC20 public pairedToken; uint64 public constant FEE_DIVISOR = 10000; mapping (address => bool) verifiedAddress; uint256 public constant verificationDuration = 20 minutes; // events event UpdatedMaxTransaction(uint256 newMax); event UpdatedMaxWallet(uint256 newMax); event SetExemptFromFees(address _address, bool _isExempt); event SetExemptFromLimits(address _address, bool _isExempt); event RemovedLimits(); event UpdatedBuyTax(uint256 newAmt); event UpdatedSellTax(uint256 newAmt); // constructor constructor(StructsLibrary.CreationParams memory params, address _zevAddress, address _zentinel) ERC20(params._name, params._symbol) { _mint(msg.sender, params._supply); website = params._website; twitter = params._twitter; telegram = params._telegram; launchTime_ = params._launchTime; maxTransaction = totalSupply() * params._maxTransaction / 10000; maxWallet = totalSupply() * params._maxWallet / 10000; swapTokensAtAmt = totalSupply() * 5 / 10000; projectAddress = params._projectAddress; zevAddress = _zevAddress; zentinelAddress = _zentinel; buyTax.projectTax = uint64(params._buyTax); buyTax.totalTax = buyTax.projectTax; buyTax.initialTax = uint64(params._buyTax); require(params._buyTax <= 1000, "Tax too high"); sellTax.projectTax = uint64(params._sellTax); sellTax.totalTax = sellTax.projectTax; sellTax.initialTax = uint64(params._sellTax); require(params._sellTax <= 1000, "Tax too high"); tokensForTax.gasSaver = true; tokenHandler = new TokenHandler(); dexRouter = IDexRouter(params._router); pairedToken = IERC20(dexRouter.WETH()); lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), address(pairedToken)); isAMMPair[lpPair] = true; exemptFromLimits[lpPair] = true; exemptFromLimits[address(this)] = true; exemptFromLimits[address(0xdead)] = true; exemptFromFees[msg.sender] = true; exemptFromFees[address(this)] = true; exemptFromLimits[address(0xdead)] = true; _approve(address(owner()), address(dexRouter), totalSupply()); _approve(address(this), address(dexRouter), type(uint256).max); } function _transfer( address from, address to, uint256 amount ) internal virtual override { if(!exemptFromFees[from] && !exemptFromFees[to]){ if(limitsInEffect){ checkLimits(from, to, amount); } amount -= handleTax(from, to, amount); } super._transfer(from,to,amount); } function checkLimits(address from, address to, uint256 amount) internal view { require(block.timestamp >= launchTime_, "Not Launched Yet"); if(!isAMMPair[to] && block.timestamp <= launchTime_ + verificationDuration){ require(verifiedAddress[to] && to == tx.origin, "Buy via Zev dapp only"); } // buy if (isAMMPair[from] && !exemptFromLimits[to]) { require(amount <= maxTransaction, "Max Tx exceeded"); require(amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded"); } // sell else if (isAMMPair[to] && !exemptFromLimits[from]) { require(amount <= maxTransaction, "Max Tx exceeded"); } else if(!exemptFromLimits[to]) { require(amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded"); } } function handleTax(address from, address to, uint256 amount) internal returns (uint256){ uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmt; if(canSwap && !swapping && isAMMPair[to]) { swapBack(); } uint256 tax = 0; Taxes memory taxes; if (isAMMPair[to]){ taxes = sellTax; } else if(isAMMPair[from]){ taxes = buyTax; } if(taxes.totalTax > 0){ TokensForTax memory tokensForTaxUpdate = tokensForTax; tax = uint128(amount * taxes.totalTax / FEE_DIVISOR); tokensForTaxUpdate.tokensForProject += uint80(tax * 9 / 10 / 1e9); tokensForTaxUpdate.tokensForZev += uint80(tax / 10 / 1e9); tokensForTax = tokensForTaxUpdate; super._transfer(from, address(this), tax); } return tax; } function swapTokensForPAIREDTOKEN(uint256 tokenAmt) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = address(pairedToken); // make the swap dexRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmt, 0, // accept any amt of ETH path, address(tokenHandler), block.timestamp ); tokenHandler.sendTokenToOwner(address(pairedToken)); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); TokensForTax memory tokensForTaxMem = tokensForTax; uint256 totalTokensToSwap = uint256(tokensForTaxMem.tokensForProject) + uint256(tokensForTaxMem.tokensForZev); if(contractBalance == 0) {return;} if(contractBalance > swapTokensAtAmt * 40){ contractBalance = swapTokensAtAmt * 40; } swapTokensForPAIREDTOKEN(contractBalance); uint256 pairedTokenBalance = pairedToken.balanceOf(address(this)); if(tokensForTaxMem.tokensForZev > 0){ SafeERC20.safeTransfer(pairedToken, zevAddress, (pairedTokenBalance * tokensForTaxMem.tokensForZev / totalTokensToSwap)); } pairedTokenBalance = pairedToken.balanceOf(address(this)); if(pairedTokenBalance > 0){ SafeERC20.safeTransfer(pairedToken, projectAddress, pairedTokenBalance); } tokensForTaxMem.tokensForZev = 0; tokensForTaxMem.tokensForProject = 0; tokensForTax = tokensForTaxMem; } // owner functions function setExemptFromFees(address _address, bool _isExempt) external ownerCanChange { require(_address != address(0), "Zero Address"); require(_address != address(this), "cannot remove token from exemption"); exemptFromFees[_address] = _isExempt; emit SetExemptFromFees(_address, _isExempt); } function setExemptFromLimits(address _address, bool _isExempt) external ownerCanChange { require(_address != address(0), "Zero Address"); if(!_isExempt){ require(_address != lpPair, "Cannot remove pair"); } exemptFromLimits[_address] = _isExempt; emit SetExemptFromLimits(_address, _isExempt); } function updateMaxTransaction(uint256 newNumInTokens) external ownerCanChange { require(newNumInTokens >= (totalSupply() * 25 / 10000)/(10**decimals()), "Too low"); maxTransaction = newNumInTokens * (10**decimals()); emit UpdatedMaxTransaction(maxTransaction); } function updateMaxWallet(uint256 newNumInTokens) external ownerCanChange { require(newNumInTokens >= (totalSupply() * 25 / 10000)/(10**decimals()), "Too low"); maxWallet = newNumInTokens * (10**decimals()); emit UpdatedMaxWallet(maxWallet); } function updateBuyTax(uint64 _projectTax) external onlyOwner { Taxes memory taxes = buyTax; taxes.projectTax = _projectTax; taxes.totalTax = _projectTax; require(taxes.totalTax <= taxes.initialTax, "Keep tax at or below Initial Tax"); emit UpdatedBuyTax(taxes.totalTax); buyTax = taxes; } function updateSellTax(uint64 _projectTax) external onlyOwner { Taxes memory taxes = sellTax; taxes.projectTax = _projectTax; taxes.totalTax = _projectTax; require(taxes.totalTax <= taxes.initialTax, "Keep tax at or below Initial Tax"); emit UpdatedSellTax(taxes.totalTax); sellTax = taxes; } function removeLimits() external ownerCanChange { limitsInEffect = false; emit RemovedLimits(); } function airdropToWallets(address[] calldata wallets, uint256[] calldata amountsInWei) external onlyOwner { require(wallets.length == amountsInWei.length, "arrays length mismatch"); for(uint256 i = 0; i < wallets.length; i++){ super._transfer(msg.sender, wallets[i], amountsInWei[i]); } } function rescueTokens(address _token, address _to) external onlyOwner { uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); require(_token != address(this), "cannot take native tokens"); SafeERC20.safeTransfer(IERC20(_token),_to, _contractBalance); } // modifiers modifier ownerCanChange { require(owner() == _msgSender(), "caller not owner"); require(block.timestamp >= launchTime_ + verificationDuration, "Too early"); _; } function updateProjectAddress(address _address) external ownerCanChange { require(_address != address(0), "zero address"); projectAddress = _address; } modifier onlyZentinel { require(zentinelAddress == _msgSender(), "Caller not Zentinel"); _; } // Zentinel Function function setVerified(address _address) external onlyZentinel { verifiedAddress[_address] = true; } } interface ITokenFactory { function generateToken(StructsLibrary.CreationParams memory params) external payable returns (address); } interface ITokenLocker { function lock( address owner, address token, bool isLpToken, uint256 amount, uint256 unlockDate, string memory description ) external returns (uint256 lockId); } contract ZevTokenFactory is Ownable, ITokenFactory { mapping (address => bool) public authorizedAddress; address public zentinelAddress; address public zevAddress; ITokenLocker public tokenLocker; event NewTokenCreated(address indexed newToken); constructor(address _tokenLocker, address _zevTreasuryAddress, address _zentinelAddress){ authorizedAddress[msg.sender] = true; tokenLocker = ITokenLocker(_tokenLocker); zevAddress = _zevTreasuryAddress; zentinelAddress = _zentinelAddress; } modifier onlyAuthorized { require(authorizedAddress[msg.sender], "Not Authorized"); _; } function updateTokenLocker(address _address) external onlyOwner { require(_address != address(0), "Zero address"); tokenLocker = ITokenLocker(_address); } function updateZevAddress(address _address) external onlyOwner { require(_address != address(0), "Zero address"); zevAddress = _address; } function updateZentinelAddress(address _address) external onlyOwner { require(_address != address(0), "Zero address"); zentinelAddress = _address; } function updateAuthorized(address _address, bool _isAuthorized) external onlyOwner { authorizedAddress[_address] = _isAuthorized; } function generateToken(StructsLibrary.CreationParams memory params ) external payable onlyAuthorized returns (address) { ZevToken newToken = new ZevToken(params, zevAddress, zentinelAddress); emit NewTokenCreated(address(newToken)); IDexRouter(params._router).addLiquidityETH{value: msg.value}(address(newToken), params._supply * params._liquidityPercent / 100, 0, 0, address(this), block.timestamp); if(params._airdropWallets.length > 0){ newToken.airdropToWallets(params._airdropWallets, params._airdropAmounts); } if(newToken.balanceOf(address(this)) > 0){ address[] memory remainderDestination = new address[](1); remainderDestination[0] = params._newOwner; uint256[] memory remainderAmount = new uint256[](1); remainderAmount[0] = newToken.balanceOf(address(this)); newToken.airdropToWallets(remainderDestination, remainderAmount); } IERC20 lpPair = IERC20(newToken.lpPair()); uint256 lpPairBalance = lpPair.balanceOf(address(this)); lpPair.approve(address(tokenLocker), lpPairBalance); tokenLocker.lock( params._newOwner, address(lpPair), true, lpPairBalance, params._launchTime + 30 days, string(abi.encodePacked(IERC20Zevdata(address(newToken)).name(), " LP")) ); newToken.transferOwnership(params._newOwner); return address(newToken); } } library StructsLibrary { struct CreationParams { address _tokenFactory; uint256 _launchTime; string _name; string _symbol; uint256 _supply; uint256 _maxWallet; uint256 _maxTransaction; uint256 _liquidityPercent; address _newOwner; address[] _airdropWallets; uint256[] _airdropAmounts; uint256 _buyTax; uint256 _sellTax; address _router; address _projectAddress; string _website; string _twitter; string _telegram; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"components":[{"internalType":"address","name":"_tokenFactory","type":"address"},{"internalType":"uint256","name":"_launchTime","type":"uint256"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTransaction","type":"uint256"},{"internalType":"uint256","name":"_liquidityPercent","type":"uint256"},{"internalType":"address","name":"_newOwner","type":"address"},{"internalType":"address[]","name":"_airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"_airdropAmounts","type":"uint256[]"},{"internalType":"uint256","name":"_buyTax","type":"uint256"},{"internalType":"uint256","name":"_sellTax","type":"uint256"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_projectAddress","type":"address"},{"internalType":"string","name":"_website","type":"string"},{"internalType":"string","name":"_twitter","type":"string"},{"internalType":"string","name":"_telegram","type":"string"}],"internalType":"struct StructsLibrary.CreationParams","name":"params","type":"tuple"},{"internalType":"address","name":"_zevAddress","type":"address"},{"internalType":"address","name":"_zentinel","type":"address"}],"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInWei","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint64","name":"projectTax","type":"uint64"},{"internalType":"uint64","name":"totalTax","type":"uint64"},{"internalType":"uint64","name":"initialTax","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime_","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairedToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint64","name":"projectTax","type":"uint64"},{"internalType":"uint64","name":"totalTax","type":"uint64"},{"internalType":"uint64","name":"initialTax","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setVerified","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"telegram","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenHandler","outputs":[{"internalType":"contract TokenHandler","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTax","outputs":[{"internalType":"uint112","name":"tokensForProject","type":"uint112"},{"internalType":"uint112","name":"tokensForZev","type":"uint112"},{"internalType":"bool","name":"gasSaver","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"twitter","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"_projectTax","type":"uint64"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumInTokens","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateProjectAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_projectTax","type":"uint64"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"verificationDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"website","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zentinelAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zevAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6101006040526012805460ff191660011790553480156200001e575f80fd5b506040516200419e3803806200419e8339810160408190526200004191620009cb565b60408301516060840151600362000059838262000c73565b50600462000068828262000c73565b5050505f6200007c620005b860201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000df338460800151620005bc60201b60201c565b6101e0830151600f90620000f4908262000c73565b506102008301516010906200010a908262000c73565b5061022083015160119062000120908262000c73565b50602083015160805260c0830151612710906200013c60025490565b62000148919062000d4f565b62000154919062000d6f565b60095560a0830151612710906200016a60025490565b62000176919062000d4f565b62000182919062000d6f565b600a556127106200019260025490565b6200019f90600562000d4f565b620001ab919062000d6f565b6013556101c0830151600b80546001600160a01b0319166001600160a01b0392831617905582811660a052811660c052610160830151600d80546001600160801b0319166001600160401b03831690811768010000000000000000820217600160801b600160c01b031916600160801b919091021790556103e81015620002685760405162461bcd60e51b815260206004820152600c60248201526b0a8c2f040e8dede40d0d2ced60a31b60448201526064015b60405180910390fd5b610180830151600e80546001600160801b0319166001600160401b03831690811768010000000000000000820217600160801b600160c01b031916600160801b919091021790556103e81015620002f15760405162461bcd60e51b815260206004820152600c60248201526b0a8c2f040e8dede40d0d2ced60a31b60448201526064016200025f565b600c805460ff60e01b1916600160e01b1790556040516200031290620007a9565b604051809103905ff0801580156200032c573d5f803e3d5ffd5b506001600160a01b0390811660e0526101a0840151601580546001600160a01b03191691909216908117909155604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa15801562000393573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003b9919062000d8f565b601680546001600160a01b0319166001600160a01b039283161790556015546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa15801562000416573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200043c919062000d8f565b6016546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303815f875af11580156200048b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004b1919062000d8f565b601480546001600160a01b0319166001600160a01b0392831690811782555f908152600860209081526040808320805460ff199081166001908117909255945486168452600780845282852080548716831790553080865283862080548816841790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d8054881684178155338752600686528487208054891685179055908652928520805487168317905561dead9094529290915280549092161790556005546200059491166015546001600160a01b03166200058e60025490565b6200067d565b601554620005af9030906001600160a01b03165f196200067d565b50505062000dc8565b3390565b6001600160a01b038216620006145760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200025f565b8060025f82825462000627919062000db2565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038316620006e15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016200025f565b6001600160a01b038216620007445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200025f565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b505050565b6107638062003a3b83390190565b634e487b7160e01b5f52604160045260245ffd5b60405161024081016001600160401b0381118282101715620007f157620007f1620007b7565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620008225762000822620007b7565b604052919050565b80516001600160a01b038116811462000841575f80fd5b919050565b5f82601f83011262000856575f80fd5b81516001600160401b03811115620008725762000872620007b7565b602062000888601f8301601f19168201620007f7565b82815285828487010111156200089c575f80fd5b5f5b83811015620008bb5785810183015182820184015282016200089e565b505f928101909101919091529392505050565b5f6001600160401b03821115620008e957620008e9620007b7565b5060051b60200190565b5f82601f83011262000903575f80fd5b815160206200091c6200091683620008ce565b620007f7565b82815260059290921b840181019181810190868411156200093b575f80fd5b8286015b84811015620009615762000953816200082a565b83529183019183016200093f565b509695505050505050565b5f82601f8301126200097c575f80fd5b815160206200098f6200091683620008ce565b82815260059290921b84018101918181019086841115620009ae575f80fd5b8286015b84811015620009615780518352918301918301620009b2565b5f805f60608486031215620009de575f80fd5b83516001600160401b0380821115620009f5575f80fd5b90850190610240828803121562000a0a575f80fd5b62000a14620007cb565b62000a1f836200082a565b81526020830151602082015260408301518281111562000a3d575f80fd5b62000a4b8982860162000846565b60408301525060608301518281111562000a63575f80fd5b62000a718982860162000846565b6060830152506080830151608082015260a083015160a082015260c083015160c082015260e083015160e082015261010062000aaf8185016200082a565b90820152610120838101518381111562000ac7575f80fd5b62000ad58a828701620008f3565b828401525050610140808401518381111562000aef575f80fd5b62000afd8a8287016200096c565b8284015250506101608084015181830152506101808084015181830152506101a062000b2b8185016200082a565b908201526101c062000b3f8482016200082a565b908201526101e0838101518381111562000b57575f80fd5b62000b658a82870162000846565b828401525050610200808401518381111562000b7f575f80fd5b62000b8d8a82870162000846565b828401525050610220808401518381111562000ba7575f80fd5b62000bb58a82870162000846565b82840152505080955050505062000bcf602085016200082a565b915062000bdf604085016200082a565b90509250925092565b600181811c9082168062000bfd57607f821691505b60208210810362000c1c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620007a4575f81815260208120601f850160051c8101602086101562000c4a5750805b601f850160051c820191505b8181101562000c6b5782815560010162000c56565b505050505050565b81516001600160401b0381111562000c8f5762000c8f620007b7565b62000ca78162000ca0845462000be8565b8462000c22565b602080601f83116001811462000cdd575f841562000cc55750858301515b5f19600386901b1c1916600185901b17855562000c6b565b5f85815260208120601f198616915b8281101562000d0d5788860151825594840194600190910190840162000cec565b508582101562000d2b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141762000d695762000d6962000d3b565b92915050565b5f8262000d8a57634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121562000da0575f80fd5b62000dab826200082a565b9392505050565b8082018082111562000d695762000d6962000d3b565b60805160a05160c05160e051612beb62000e505f395f8181610346015281816123f4015261246b01525f81816106ea01526113b901525f8181610580015261223901525f818161062b0152818161075a0152818161093a01528181610a1601528181610e6301528181610f0c015281816111db01528181611aa70152611b330152612beb5ff3fe608060405234801561000f575f80fd5b5060043610610297575f3560e01c806377b27d1f11610161578063b6f052f1116100ca578063d8ae5be911610084578063d8ae5be9146106a3578063dd62ed3e146106b6578063f2fde38b146106c9578063f8b45b05146106dc578063fa20206a146106e5578063ffc94f901461070c575f80fd5b8063b6f052f114610626578063beb0a4161461064d578063c3f70b5214610655578063c78d0fa01461065e578063c8c7564714610667578063cc1776d31461067a575f80fd5b80639e93ad8e1161011b5780639e93ad8e146105a2578063a13d1a2b146105c3578063a457c2d7146105d6578063a9059cbb146105e9578063abfaeee0146105fc578063b0249cc614610604575f80fd5b806377b27d1f1461051a57806380274a111461052d5780638d3e6e40146105405780638da5cb5b1461056257806395d89b411461057357806396f4c4f71461057b575f80fd5b80633cf96af1116102035780635a90a49e116101bd5780635a90a49e146104645780636b4c1bd8146104865780636d7adcad1461048f57806370a08231146104e2578063715018a61461050a578063751039fc14610512575f80fd5b80633cf96af1146103c3578063452ed4f1146103d657806347ecb665146103e95780634a62bb65146103f15780634f7041a5146103fe5780635431c94e14610451575f80fd5b80631b3d6e87116102545780631b3d6e87146103415780631c499ab0146103685780632307b4411461037b57806323b872dd1461038e578063313ce567146103a157806339509351146103b0575f80fd5b80630517d13d1461029b57806306fdde03146102b05780630758d924146102ce578063095ea7b3146102f95780631057a3ac1461031c57806318160ddd1461032f575b5f80fd5b6102ae6102a936600461263e565b61071f565b005b6102b861085f565b6040516102c59190612677565b60405180910390f35b6015546102e1906001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b61030c6103073660046126c4565b6108ef565b60405190151581526020016102c5565b6102ae61032a3660046126ec565b610908565b6002545b6040519081526020016102c5565b6102e17f000000000000000000000000000000000000000000000000000000000000000081565b6102ae61037636600461263e565b6109e4565b6102ae610389366004612753565b610b14565b61030c61039c3660046127b9565b610bf2565b604051601281526020016102c5565b61030c6103be3660046126c4565b610c15565b600b546102e1906001600160a01b031681565b6014546102e1906001600160a01b031681565b6102b8610c36565b60125461030c9060ff1681565b600d54610427906001600160401b0380821691600160401b8104821691600160801b9091041683565b604080516001600160401b03948516815292841660208401529216918101919091526060016102c5565b6102ae61045f3660046127f2565b610cc2565b61030c6104723660046126ec565b60066020525f908152604090205460ff1681565b6103336104b081565b600c546104ba906001600160701b0380821691600160701b810490911690600160e01b900460ff1683565b604080516001600160701b0394851681529390921660208401521515908201526060016102c5565b6103336104f03660046126ec565b6001600160a01b03165f9081526020819052604090205490565b6102ae610dbe565b6102ae610e31565b6102ae610528366004612833565b610eda565b6102ae61053b366004612868565b61105a565b61030c61054e3660046126ec565b60076020525f908152604090205460ff1681565b6005546001600160a01b03166102e1565b6102b861119a565b6102e17f000000000000000000000000000000000000000000000000000000000000000081565b6105ab61271081565b6040516001600160401b0390911681526020016102c5565b6102ae6105d1366004612833565b6111a9565b61030c6105e43660046126c4565b611316565b61030c6105f73660046126c4565b611390565b6102b861139d565b61030c6106123660046126ec565b60086020525f908152604090205460ff1681565b6103337f000000000000000000000000000000000000000000000000000000000000000081565b6102b86113aa565b61033360095481565b61033360135481565b6102ae6106753660046126ec565b6113b7565b600e54610427906001600160401b0380821691600160401b8104821691600160801b9091041683565b6102ae6106b1366004612868565b611448565b6103336106c43660046127f2565b611588565b6102ae6106d73660046126ec565b6115b2565b610333600a5481565b6102e17f000000000000000000000000000000000000000000000000000000000000000081565b6016546102e1906001600160a01b031681565b6005546001600160a01b031633146107525760405162461bcd60e51b81526004016107499061288e565b60405180910390fd5b61077e6104b07f00000000000000000000000000000000000000000000000000000000000000006128cc565b42101561079d5760405162461bcd60e51b8152600401610749906128df565b6107a96012600a6129e2565b6127106107b560025490565b6107c09060196129f0565b6107ca9190612a07565b6107d49190612a07565b81101561080d5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610749565b6108196012600a6129e2565b61082390826129f0565b60098190556040519081527f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574906020015b60405180910390a150565b60606003805461086e90612a26565b80601f016020809104026020016040519081016040528092919081815260200182805461089a90612a26565b80156108e55780601f106108bc576101008083540402835291602001916108e5565b820191905f5260205f20905b8154815290600101906020018083116108c857829003601f168201915b5050505050905090565b5f336108fc81858561169c565b60019150505b92915050565b6005546001600160a01b031633146109325760405162461bcd60e51b81526004016107499061288e565b61095e6104b07f00000000000000000000000000000000000000000000000000000000000000006128cc565b42101561097d5760405162461bcd60e51b8152600401610749906128df565b6001600160a01b0381166109c25760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610749565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610a0e5760405162461bcd60e51b81526004016107499061288e565b610a3a6104b07f00000000000000000000000000000000000000000000000000000000000000006128cc565b421015610a595760405162461bcd60e51b8152600401610749906128df565b610a656012600a6129e2565b612710610a7160025490565b610a7c9060196129f0565b610a869190612a07565b610a909190612a07565b811015610ac95760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610749565b610ad56012600a6129e2565b610adf90826129f0565b600a8190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610854565b6005546001600160a01b03163314610b3e5760405162461bcd60e51b815260040161074990612a5e565b828114610b865760405162461bcd60e51b81526020600482015260166024820152750c2e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401610749565b5f5b83811015610beb57610bd933868684818110610ba657610ba6612a93565b9050602002016020810190610bbb91906126ec565b858585818110610bcd57610bcd612a93565b905060200201356117bf565b80610be381612aa7565b915050610b88565b5050505050565b5f33610bff858285611963565b610c0a8585856119d5565b506001949350505050565b5f336108fc818585610c278383611588565b610c3191906128cc565b61169c565b60118054610c4390612a26565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6f90612a26565b8015610cba5780601f10610c9157610100808354040283529160200191610cba565b820191905f5260205f20905b815481529060010190602001808311610c9d57829003601f168201915b505050505081565b6005546001600160a01b03163314610cec5760405162461bcd60e51b815260040161074990612a5e565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610d30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d549190612abf565b9050306001600160a01b03841603610dae5760405162461bcd60e51b815260206004820152601960248201527f63616e6e6f742074616b65206e617469766520746f6b656e73000000000000006044820152606401610749565b610db9838383611a53565b505050565b6005546001600160a01b03163314610de85760405162461bcd60e51b815260040161074990612a5e565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610e5b5760405162461bcd60e51b81526004016107499061288e565b610e876104b07f00000000000000000000000000000000000000000000000000000000000000006128cc565b421015610ea65760405162461bcd60e51b8152600401610749906128df565b6012805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6005546001600160a01b03163314610f045760405162461bcd60e51b81526004016107499061288e565b610f306104b07f00000000000000000000000000000000000000000000000000000000000000006128cc565b421015610f4f5760405162461bcd60e51b8152600401610749906128df565b6001600160a01b038216610f945760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610749565b306001600160a01b03831603610ff75760405162461bcd60e51b815260206004820152602260248201527f63616e6e6f742072656d6f766520746f6b656e2066726f6d206578656d70746960448201526137b760f11b6064820152608401610749565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b031633146110845760405162461bcd60e51b815260040161074990612a5e565b60408051606081018252600e54600160801b90046001600160401b03908116928201839052831680825260208201819052909110156111055760405162461bcd60e51b815260206004820181905260248201527f4b65657020746178206174206f722062656c6f7720496e697469616c205461786044820152606401610749565b6020808201516040516001600160401b0390911681527fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c97910160405180910390a18051600e805460208401516040909401516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b03199093169190941617179290921617905550565b60606004805461086e90612a26565b6005546001600160a01b031633146111d35760405162461bcd60e51b81526004016107499061288e565b6111ff6104b07f00000000000000000000000000000000000000000000000000000000000000006128cc565b42101561121e5760405162461bcd60e51b8152600401610749906128df565b6001600160a01b0382166112635760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610749565b806112bb576014546001600160a01b03908116908316036112bb5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610749565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce910161104e565b5f33816113238286611588565b9050838110156113835760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610749565b610c0a828686840361169c565b5f336108fc8185856119d5565b60108054610c4390612a26565b600f8054610c4390612a26565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146114255760405162461bcd60e51b815260206004820152601360248201527210d85b1b195c881b9bdd0816995b9d1a5b995b606a1b6044820152606401610749565b6001600160a01b03165f908152601760205260409020805460ff19166001179055565b6005546001600160a01b031633146114725760405162461bcd60e51b815260040161074990612a5e565b60408051606081018252600d54600160801b90046001600160401b03908116928201839052831680825260208201819052909110156114f35760405162461bcd60e51b815260206004820181905260248201527f4b65657020746178206174206f722062656c6f7720496e697469616c205461786044820152606401610749565b6020808201516040516001600160401b0390911681527f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece0508910160405180910390a18051600d805460208401516040909401516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b03199093169190941617179290921617905550565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146115dc5760405162461bcd60e51b815260040161074990612a5e565b6001600160a01b0381166116415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610749565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166116fe5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610749565b6001600160a01b03821661175f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610749565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610749565b6001600160a01b0382166118855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610749565b6001600160a01b0383165f90815260208190526040902054818110156118fc5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610749565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b5f61196e8484611588565b90505f19811461195d57818110156119c85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610749565b61195d848484840361169c565b6001600160a01b0383165f9081526006602052604090205460ff16158015611a1557506001600160a01b0382165f9081526006602052604090205460ff16155b15611a485760125460ff1615611a3057611a30838383611aa5565b611a3b838383611d8c565b611a459082612ad6565b90505b610db98383836117bf565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610db9908490612034565b7f0000000000000000000000000000000000000000000000000000000000000000421015611b085760405162461bcd60e51b815260206004820152601060248201526f139bdd0813185d5b98da19590816595d60821b6044820152606401610749565b6001600160a01b0382165f9081526008602052604090205460ff16158015611b5b5750611b576104b07f00000000000000000000000000000000000000000000000000000000000000006128cc565b4211155b15611bd3576001600160a01b0382165f9081526017602052604090205460ff168015611b8f57506001600160a01b03821632145b611bd35760405162461bcd60e51b815260206004820152601560248201527442757920766961205a65762064617070206f6e6c7960581b6044820152606401610749565b6001600160a01b0383165f9081526008602052604090205460ff168015611c1257506001600160a01b0382165f9081526007602052604090205460ff16155b15611cc557600954811115611c5b5760405162461bcd60e51b815260206004820152600f60248201526e13585e08151e08195e18d959591959608a1b6044820152606401610749565b600a546001600160a01b0383165f908152602081905260409020545b611c8190836128cc565b1115610db95760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610749565b6001600160a01b0382165f9081526008602052604090205460ff168015611d0457506001600160a01b0383165f9081526007602052604090205460ff16155b15611d4d57600954811115610db95760405162461bcd60e51b815260206004820152600f60248201526e13585e08151e08195e18d959591959608a1b6044820152606401610749565b6001600160a01b0382165f9081526007602052604090205460ff16610db957600a546001600160a01b0383165f90815260208190526040902054611c77565b305f9081526020819052604081205460135481108015908190611db75750601254610100900460ff16155b8015611dda57506001600160a01b0385165f9081526008602052604090205460ff165b15611de757611de7612105565b604080516060810182525f80825260208083018290528284018290526001600160a01b0389168252600890529182205460ff1615611e5d575060408051606081018252600e546001600160401b038082168352600160401b820481166020840152600160801b9091041691810191909152611eb7565b6001600160a01b0388165f9081526008602052604090205460ff1615611eb7575060408051606081018252600d546001600160401b038082168352600160401b820481166020840152600160801b90910416918101919091525b60208101516001600160401b0316156120295760408051606081018252600c546001600160701b038082168352600160701b820416602080840191909152600160e01b90910460ff161515928201929092529082015161271090611f24906001600160401b0316896129f0565b611f2e9190612a07565b6fffffffffffffffffffffffffffffffff169250633b9aca00600a611f548560096129f0565b611f5e9190612a07565b611f689190612a07565b69ffffffffffffffffffff16815f01818151611f849190612ae9565b6001600160701b0316905250633b9aca00611fa0600a85612a07565b611faa9190612a07565b69ffffffffffffffffffff1681602001818151611fc79190612ae9565b6001600160701b039081169091528251600c8054602086015160408701511515600160e01b0260ff60e01b19918616600160701b026001600160e01b031990931694909516939093171791909116919091179055506120278930856117bf565b505b509695505050505050565b5f612088826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661233f9092919063ffffffff16565b805190915015610db957808060200190518101906120a69190612b10565b610db95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610749565b305f9081526020819052604081205460408051606081018252600c546001600160701b03808216808452600160701b830490911660208401819052600160e01b90920460ff16151593830193909352929350915f9161216491906128cc565b9050825f0361217257505050565b6013546121809060286129f0565b831115612198576013546121959060286129f0565b92505b6121a183612355565b6016546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156121e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061220b9190612abf565b60208401519091506001600160701b03161561227d57601654602084015161227d916001600160a01b0316907f000000000000000000000000000000000000000000000000000000000000000090859061226e906001600160701b0316866129f0565b6122789190612a07565b611a53565b6016546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156122c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122e79190612abf565b9050801561230c57601654600b5461230c916001600160a01b03908116911683611a53565b50505f602082018190528152600c80546040909201511515600160e01b026001600160e81b031990921691909117905550565b606061234d84845f856124ca565b949350505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061238857612388612a93565b6001600160a01b0392831660209182029290920101526016548251911690829060019081106123b9576123b9612a93565b6001600160a01b039283166020918202929092010152601554604051635c11d79560e01b8152911690635c11d7959061241e9085905f9086907f0000000000000000000000000000000000000000000000000000000000000000904290600401612b2b565b5f604051808303815f87803b158015612435575f80fd5b505af1158015612447573d5f803e3d5ffd5b50506016546040516304fa881160e21b81526001600160a01b0391821660048201527f000000000000000000000000000000000000000000000000000000000000000090911692506313ea204491506024015f604051808303815f87803b1580156124b0575f80fd5b505af11580156124c2573d5f803e3d5ffd5b505050505050565b60608247101561252b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610749565b5f80866001600160a01b031685876040516125469190612b9a565b5f6040518083038185875af1925050503d805f8114612580576040519150601f19603f3d011682016040523d82523d5f602084013e612585565b606091505b5091509150612596878383876125a1565b979650505050505050565b6060831561260f5782515f03612608576001600160a01b0385163b6126085760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610749565b508161234d565b61234d83838151156126245781518083602001fd5b8060405162461bcd60e51b81526004016107499190612677565b5f6020828403121561264e575f80fd5b5035919050565b5f5b8381101561266f578181015183820152602001612657565b50505f910152565b602081525f8251806020840152612695816040850160208701612655565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146126bf575f80fd5b919050565b5f80604083850312156126d5575f80fd5b6126de836126a9565b946020939093013593505050565b5f602082840312156126fc575f80fd5b612705826126a9565b9392505050565b5f8083601f84011261271c575f80fd5b5081356001600160401b03811115612732575f80fd5b6020830191508360208260051b850101111561274c575f80fd5b9250929050565b5f805f8060408587031215612766575f80fd5b84356001600160401b038082111561277c575f80fd5b6127888883890161270c565b909650945060208701359150808211156127a0575f80fd5b506127ad8782880161270c565b95989497509550505050565b5f805f606084860312156127cb575f80fd5b6127d4846126a9565b92506127e2602085016126a9565b9150604084013590509250925092565b5f8060408385031215612803575f80fd5b61280c836126a9565b915061281a602084016126a9565b90509250929050565b8015158114612830575f80fd5b50565b5f8060408385031215612844575f80fd5b61284d836126a9565b9150602083013561285d81612823565b809150509250929050565b5f60208284031215612878575f80fd5b81356001600160401b0381168114612705575f80fd5b60208082526010908201526f31b0b63632b9103737ba1037bbb732b960811b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610902576109026128b8565b602080825260099082015268546f6f206561726c7960b81b604082015260600190565b600181815b8085111561293c57815f1904821115612922576129226128b8565b8085161561292f57918102915b93841c9390800290612907565b509250929050565b5f8261295257506001610902565b8161295e57505f610902565b8160018114612974576002811461297e5761299a565b6001915050610902565b60ff84111561298f5761298f6128b8565b50506001821b610902565b5060208310610133831016604e8410600b84101617156129bd575081810a610902565b6129c78383612902565b805f19048211156129da576129da6128b8565b029392505050565b5f61270560ff841683612944565b8082028115828204841417610902576109026128b8565b5f82612a2157634e487b7160e01b5f52601260045260245ffd5b500490565b600181811c90821680612a3a57607f821691505b602082108103612a5857634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612ab857612ab86128b8565b5060010190565b5f60208284031215612acf575f80fd5b5051919050565b81810381811115610902576109026128b8565b6001600160701b03818116838216019080821115612b0957612b096128b8565b5092915050565b5f60208284031215612b20575f80fd5b815161270581612823565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612b795784516001600160a01b031683529383019391830191600101612b54565b50506001600160a01b03969096166060850152505050608001529392505050565b5f8251612bab818460208701612655565b919091019291505056fea26469706673582212207646ddf79a74e1d8c6ebcabf66c50fec8d787bb618695a0c9d89ce5d1c70a6c964736f6c63430008140033608060405234801561000f575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506107068061005d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806313ea20441461004e578063715018a6146100635780638da5cb5b1461006b578063f2fde38b14610089575b5f80fd5b61006161005c3660046105c9565b61009c565b005b6100616101bf565b5f54604080516001600160a01b039092168252519081900360200190f35b6100616100973660046105c9565b610230565b5f546001600160a01b031633146100ce5760405162461bcd60e51b81526004016100c5906105f6565b60405180910390fd5b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610112573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610136919061062b565b11156101bc576101bc816101515f546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610193573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101b7919061062b565b610317565b50565b5f546001600160a01b031633146101e85760405162461bcd60e51b81526004016100c5906105f6565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146102595760405162461bcd60e51b81526004016100c5906105f6565b6001600160a01b0381166102be5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100c5565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261036990849061036e565b505050565b5f6103c2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661043f9092919063ffffffff16565b80519091501561036957808060200190518101906103e09190610642565b6103695760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016100c5565b606061044d84845f85610455565b949350505050565b6060824710156104b65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016100c5565b5f80866001600160a01b031685876040516104d19190610683565b5f6040518083038185875af1925050503d805f811461050b576040519150601f19603f3d011682016040523d82523d5f602084013e610510565b606091505b50915091506105218783838761052c565b979650505050505050565b6060831561059a5782515f03610593576001600160a01b0385163b6105935760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016100c5565b508161044d565b61044d83838151156105af5781518083602001fd5b8060405162461bcd60e51b81526004016100c5919061069e565b5f602082840312156105d9575f80fd5b81356001600160a01b03811681146105ef575f80fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f6020828403121561063b575f80fd5b5051919050565b5f60208284031215610652575f80fd5b815180151581146105ef575f80fd5b5f5b8381101561067b578181015183820152602001610663565b50505f910152565b5f8251610694818460208701610661565b9190910192915050565b602081525f82518060208401526106bc816040850160208701610661565b601f01601f1916919091016040019291505056fea2646970667358221220e313f4c18bb02b3e034f24eefa8116771017200997f5dbfd28a94be05b3b536864736f6c6343000814003300000000000000000000000000000000000000000000000000000000000000600000000000000000000000004f013300a0dce6193388cd057108eecb9e1054ac000000000000000000000000eb4ce314540c464754ede63e28111fe91ec4d32d000000000000000000000000033282237e1564058c677a417f28b94f07bfe71000000000000000000000000000000000000000000000000000000000659837ec00000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000084595161401484a000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000050000000000000000000000000755d37858406944dcd79f9c8b069dc7a4b60e93000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f40000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000755d37858406944dcd79f9c8b069dc7a4b60e9300000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000007546573745a6576000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007546573745a65760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f54657374776562736974652e636f6d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000974657374582e636f6d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5465737454472e636f6d00000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610297575f3560e01c806377b27d1f11610161578063b6f052f1116100ca578063d8ae5be911610084578063d8ae5be9146106a3578063dd62ed3e146106b6578063f2fde38b146106c9578063f8b45b05146106dc578063fa20206a146106e5578063ffc94f901461070c575f80fd5b8063b6f052f114610626578063beb0a4161461064d578063c3f70b5214610655578063c78d0fa01461065e578063c8c7564714610667578063cc1776d31461067a575f80fd5b80639e93ad8e1161011b5780639e93ad8e146105a2578063a13d1a2b146105c3578063a457c2d7146105d6578063a9059cbb146105e9578063abfaeee0146105fc578063b0249cc614610604575f80fd5b806377b27d1f1461051a57806380274a111461052d5780638d3e6e40146105405780638da5cb5b1461056257806395d89b411461057357806396f4c4f71461057b575f80fd5b80633cf96af1116102035780635a90a49e116101bd5780635a90a49e146104645780636b4c1bd8146104865780636d7adcad1461048f57806370a08231146104e2578063715018a61461050a578063751039fc14610512575f80fd5b80633cf96af1146103c3578063452ed4f1146103d657806347ecb665146103e95780634a62bb65146103f15780634f7041a5146103fe5780635431c94e14610451575f80fd5b80631b3d6e87116102545780631b3d6e87146103415780631c499ab0146103685780632307b4411461037b57806323b872dd1461038e578063313ce567146103a157806339509351146103b0575f80fd5b80630517d13d1461029b57806306fdde03146102b05780630758d924146102ce578063095ea7b3146102f95780631057a3ac1461031c57806318160ddd1461032f575b5f80fd5b6102ae6102a936600461263e565b61071f565b005b6102b861085f565b6040516102c59190612677565b60405180910390f35b6015546102e1906001600160a01b031681565b6040516001600160a01b0390911681526020016102c5565b61030c6103073660046126c4565b6108ef565b60405190151581526020016102c5565b6102ae61032a3660046126ec565b610908565b6002545b6040519081526020016102c5565b6102e17f000000000000000000000000b82fd435065c1600077bdc9e61b250067c420a6681565b6102ae61037636600461263e565b6109e4565b6102ae610389366004612753565b610b14565b61030c61039c3660046127b9565b610bf2565b604051601281526020016102c5565b61030c6103be3660046126c4565b610c15565b600b546102e1906001600160a01b031681565b6014546102e1906001600160a01b031681565b6102b8610c36565b60125461030c9060ff1681565b600d54610427906001600160401b0380821691600160401b8104821691600160801b9091041683565b604080516001600160401b03948516815292841660208401529216918101919091526060016102c5565b6102ae61045f3660046127f2565b610cc2565b61030c6104723660046126ec565b60066020525f908152604090205460ff1681565b6103336104b081565b600c546104ba906001600160701b0380821691600160701b810490911690600160e01b900460ff1683565b604080516001600160701b0394851681529390921660208401521515908201526060016102c5565b6103336104f03660046126ec565b6001600160a01b03165f9081526020819052604090205490565b6102ae610dbe565b6102ae610e31565b6102ae610528366004612833565b610eda565b6102ae61053b366004612868565b61105a565b61030c61054e3660046126ec565b60076020525f908152604090205460ff1681565b6005546001600160a01b03166102e1565b6102b861119a565b6102e17f0000000000000000000000004f013300a0dce6193388cd057108eecb9e1054ac81565b6105ab61271081565b6040516001600160401b0390911681526020016102c5565b6102ae6105d1366004612833565b6111a9565b61030c6105e43660046126c4565b611316565b61030c6105f73660046126c4565b611390565b6102b861139d565b61030c6106123660046126ec565b60086020525f908152604090205460ff1681565b6103337f00000000000000000000000000000000000000000000000000000000659837ec81565b6102b86113aa565b61033360095481565b61033360135481565b6102ae6106753660046126ec565b6113b7565b600e54610427906001600160401b0380821691600160401b8104821691600160801b9091041683565b6102ae6106b1366004612868565b611448565b6103336106c43660046127f2565b611588565b6102ae6106d73660046126ec565b6115b2565b610333600a5481565b6102e17f000000000000000000000000eb4ce314540c464754ede63e28111fe91ec4d32d81565b6016546102e1906001600160a01b031681565b6005546001600160a01b031633146107525760405162461bcd60e51b81526004016107499061288e565b60405180910390fd5b61077e6104b07f00000000000000000000000000000000000000000000000000000000659837ec6128cc565b42101561079d5760405162461bcd60e51b8152600401610749906128df565b6107a96012600a6129e2565b6127106107b560025490565b6107c09060196129f0565b6107ca9190612a07565b6107d49190612a07565b81101561080d5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610749565b6108196012600a6129e2565b61082390826129f0565b60098190556040519081527f76a9278644b7300961aa0e7e86f10934585987f1daf1c6ecc971c18376691574906020015b60405180910390a150565b60606003805461086e90612a26565b80601f016020809104026020016040519081016040528092919081815260200182805461089a90612a26565b80156108e55780601f106108bc576101008083540402835291602001916108e5565b820191905f5260205f20905b8154815290600101906020018083116108c857829003601f168201915b5050505050905090565b5f336108fc81858561169c565b60019150505b92915050565b6005546001600160a01b031633146109325760405162461bcd60e51b81526004016107499061288e565b61095e6104b07f00000000000000000000000000000000000000000000000000000000659837ec6128cc565b42101561097d5760405162461bcd60e51b8152600401610749906128df565b6001600160a01b0381166109c25760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610749565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610a0e5760405162461bcd60e51b81526004016107499061288e565b610a3a6104b07f00000000000000000000000000000000000000000000000000000000659837ec6128cc565b421015610a595760405162461bcd60e51b8152600401610749906128df565b610a656012600a6129e2565b612710610a7160025490565b610a7c9060196129f0565b610a869190612a07565b610a909190612a07565b811015610ac95760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610749565b610ad56012600a6129e2565b610adf90826129f0565b600a8190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610854565b6005546001600160a01b03163314610b3e5760405162461bcd60e51b815260040161074990612a5e565b828114610b865760405162461bcd60e51b81526020600482015260166024820152750c2e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401610749565b5f5b83811015610beb57610bd933868684818110610ba657610ba6612a93565b9050602002016020810190610bbb91906126ec565b858585818110610bcd57610bcd612a93565b905060200201356117bf565b80610be381612aa7565b915050610b88565b5050505050565b5f33610bff858285611963565b610c0a8585856119d5565b506001949350505050565b5f336108fc818585610c278383611588565b610c3191906128cc565b61169c565b60118054610c4390612a26565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6f90612a26565b8015610cba5780601f10610c9157610100808354040283529160200191610cba565b820191905f5260205f20905b815481529060010190602001808311610c9d57829003601f168201915b505050505081565b6005546001600160a01b03163314610cec5760405162461bcd60e51b815260040161074990612a5e565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610d30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d549190612abf565b9050306001600160a01b03841603610dae5760405162461bcd60e51b815260206004820152601960248201527f63616e6e6f742074616b65206e617469766520746f6b656e73000000000000006044820152606401610749565b610db9838383611a53565b505050565b6005546001600160a01b03163314610de85760405162461bcd60e51b815260040161074990612a5e565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610e5b5760405162461bcd60e51b81526004016107499061288e565b610e876104b07f00000000000000000000000000000000000000000000000000000000659837ec6128cc565b421015610ea65760405162461bcd60e51b8152600401610749906128df565b6012805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6005546001600160a01b03163314610f045760405162461bcd60e51b81526004016107499061288e565b610f306104b07f00000000000000000000000000000000000000000000000000000000659837ec6128cc565b421015610f4f5760405162461bcd60e51b8152600401610749906128df565b6001600160a01b038216610f945760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610749565b306001600160a01b03831603610ff75760405162461bcd60e51b815260206004820152602260248201527f63616e6e6f742072656d6f766520746f6b656e2066726f6d206578656d70746960448201526137b760f11b6064820152608401610749565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d91015b60405180910390a15050565b6005546001600160a01b031633146110845760405162461bcd60e51b815260040161074990612a5e565b60408051606081018252600e54600160801b90046001600160401b03908116928201839052831680825260208201819052909110156111055760405162461bcd60e51b815260206004820181905260248201527f4b65657020746178206174206f722062656c6f7720496e697469616c205461786044820152606401610749565b6020808201516040516001600160401b0390911681527fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c97910160405180910390a18051600e805460208401516040909401516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b03199093169190941617179290921617905550565b60606004805461086e90612a26565b6005546001600160a01b031633146111d35760405162461bcd60e51b81526004016107499061288e565b6111ff6104b07f00000000000000000000000000000000000000000000000000000000659837ec6128cc565b42101561121e5760405162461bcd60e51b8152600401610749906128df565b6001600160a01b0382166112635760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b6044820152606401610749565b806112bb576014546001600160a01b03908116908316036112bb5760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b6044820152606401610749565b6001600160a01b0382165f81815260076020908152604091829020805460ff19168515159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce910161104e565b5f33816113238286611588565b9050838110156113835760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610749565b610c0a828686840361169c565b5f336108fc8185856119d5565b60108054610c4390612a26565b600f8054610c4390612a26565b7f000000000000000000000000eb4ce314540c464754ede63e28111fe91ec4d32d6001600160a01b031633146114255760405162461bcd60e51b815260206004820152601360248201527210d85b1b195c881b9bdd0816995b9d1a5b995b606a1b6044820152606401610749565b6001600160a01b03165f908152601760205260409020805460ff19166001179055565b6005546001600160a01b031633146114725760405162461bcd60e51b815260040161074990612a5e565b60408051606081018252600d54600160801b90046001600160401b03908116928201839052831680825260208201819052909110156114f35760405162461bcd60e51b815260206004820181905260248201527f4b65657020746178206174206f722062656c6f7720496e697469616c205461786044820152606401610749565b6020808201516040516001600160401b0390911681527f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece0508910160405180910390a18051600d805460208401516040909401516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b03199093169190941617179290921617905550565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146115dc5760405162461bcd60e51b815260040161074990612a5e565b6001600160a01b0381166116415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610749565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166116fe5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610749565b6001600160a01b03821661175f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610749565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610749565b6001600160a01b0382166118855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610749565b6001600160a01b0383165f90815260208190526040902054818110156118fc5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610749565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b5f61196e8484611588565b90505f19811461195d57818110156119c85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610749565b61195d848484840361169c565b6001600160a01b0383165f9081526006602052604090205460ff16158015611a1557506001600160a01b0382165f9081526006602052604090205460ff16155b15611a485760125460ff1615611a3057611a30838383611aa5565b611a3b838383611d8c565b611a459082612ad6565b90505b610db98383836117bf565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610db9908490612034565b7f00000000000000000000000000000000000000000000000000000000659837ec421015611b085760405162461bcd60e51b815260206004820152601060248201526f139bdd0813185d5b98da19590816595d60821b6044820152606401610749565b6001600160a01b0382165f9081526008602052604090205460ff16158015611b5b5750611b576104b07f00000000000000000000000000000000000000000000000000000000659837ec6128cc565b4211155b15611bd3576001600160a01b0382165f9081526017602052604090205460ff168015611b8f57506001600160a01b03821632145b611bd35760405162461bcd60e51b815260206004820152601560248201527442757920766961205a65762064617070206f6e6c7960581b6044820152606401610749565b6001600160a01b0383165f9081526008602052604090205460ff168015611c1257506001600160a01b0382165f9081526007602052604090205460ff16155b15611cc557600954811115611c5b5760405162461bcd60e51b815260206004820152600f60248201526e13585e08151e08195e18d959591959608a1b6044820152606401610749565b600a546001600160a01b0383165f908152602081905260409020545b611c8190836128cc565b1115610db95760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610749565b6001600160a01b0382165f9081526008602052604090205460ff168015611d0457506001600160a01b0383165f9081526007602052604090205460ff16155b15611d4d57600954811115610db95760405162461bcd60e51b815260206004820152600f60248201526e13585e08151e08195e18d959591959608a1b6044820152606401610749565b6001600160a01b0382165f9081526007602052604090205460ff16610db957600a546001600160a01b0383165f90815260208190526040902054611c77565b305f9081526020819052604081205460135481108015908190611db75750601254610100900460ff16155b8015611dda57506001600160a01b0385165f9081526008602052604090205460ff165b15611de757611de7612105565b604080516060810182525f80825260208083018290528284018290526001600160a01b0389168252600890529182205460ff1615611e5d575060408051606081018252600e546001600160401b038082168352600160401b820481166020840152600160801b9091041691810191909152611eb7565b6001600160a01b0388165f9081526008602052604090205460ff1615611eb7575060408051606081018252600d546001600160401b038082168352600160401b820481166020840152600160801b90910416918101919091525b60208101516001600160401b0316156120295760408051606081018252600c546001600160701b038082168352600160701b820416602080840191909152600160e01b90910460ff161515928201929092529082015161271090611f24906001600160401b0316896129f0565b611f2e9190612a07565b6fffffffffffffffffffffffffffffffff169250633b9aca00600a611f548560096129f0565b611f5e9190612a07565b611f689190612a07565b69ffffffffffffffffffff16815f01818151611f849190612ae9565b6001600160701b0316905250633b9aca00611fa0600a85612a07565b611faa9190612a07565b69ffffffffffffffffffff1681602001818151611fc79190612ae9565b6001600160701b039081169091528251600c8054602086015160408701511515600160e01b0260ff60e01b19918616600160701b026001600160e01b031990931694909516939093171791909116919091179055506120278930856117bf565b505b509695505050505050565b5f612088826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661233f9092919063ffffffff16565b805190915015610db957808060200190518101906120a69190612b10565b610db95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610749565b305f9081526020819052604081205460408051606081018252600c546001600160701b03808216808452600160701b830490911660208401819052600160e01b90920460ff16151593830193909352929350915f9161216491906128cc565b9050825f0361217257505050565b6013546121809060286129f0565b831115612198576013546121959060286129f0565b92505b6121a183612355565b6016546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156121e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061220b9190612abf565b60208401519091506001600160701b03161561227d57601654602084015161227d916001600160a01b0316907f0000000000000000000000004f013300a0dce6193388cd057108eecb9e1054ac90859061226e906001600160701b0316866129f0565b6122789190612a07565b611a53565b6016546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156122c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122e79190612abf565b9050801561230c57601654600b5461230c916001600160a01b03908116911683611a53565b50505f602082018190528152600c80546040909201511515600160e01b026001600160e81b031990921691909117905550565b606061234d84845f856124ca565b949350505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061238857612388612a93565b6001600160a01b0392831660209182029290920101526016548251911690829060019081106123b9576123b9612a93565b6001600160a01b039283166020918202929092010152601554604051635c11d79560e01b8152911690635c11d7959061241e9085905f9086907f000000000000000000000000b82fd435065c1600077bdc9e61b250067c420a66904290600401612b2b565b5f604051808303815f87803b158015612435575f80fd5b505af1158015612447573d5f803e3d5ffd5b50506016546040516304fa881160e21b81526001600160a01b0391821660048201527f000000000000000000000000b82fd435065c1600077bdc9e61b250067c420a6690911692506313ea204491506024015f604051808303815f87803b1580156124b0575f80fd5b505af11580156124c2573d5f803e3d5ffd5b505050505050565b60608247101561252b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610749565b5f80866001600160a01b031685876040516125469190612b9a565b5f6040518083038185875af1925050503d805f8114612580576040519150601f19603f3d011682016040523d82523d5f602084013e612585565b606091505b5091509150612596878383876125a1565b979650505050505050565b6060831561260f5782515f03612608576001600160a01b0385163b6126085760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610749565b508161234d565b61234d83838151156126245781518083602001fd5b8060405162461bcd60e51b81526004016107499190612677565b5f6020828403121561264e575f80fd5b5035919050565b5f5b8381101561266f578181015183820152602001612657565b50505f910152565b602081525f8251806020840152612695816040850160208701612655565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146126bf575f80fd5b919050565b5f80604083850312156126d5575f80fd5b6126de836126a9565b946020939093013593505050565b5f602082840312156126fc575f80fd5b612705826126a9565b9392505050565b5f8083601f84011261271c575f80fd5b5081356001600160401b03811115612732575f80fd5b6020830191508360208260051b850101111561274c575f80fd5b9250929050565b5f805f8060408587031215612766575f80fd5b84356001600160401b038082111561277c575f80fd5b6127888883890161270c565b909650945060208701359150808211156127a0575f80fd5b506127ad8782880161270c565b95989497509550505050565b5f805f606084860312156127cb575f80fd5b6127d4846126a9565b92506127e2602085016126a9565b9150604084013590509250925092565b5f8060408385031215612803575f80fd5b61280c836126a9565b915061281a602084016126a9565b90509250929050565b8015158114612830575f80fd5b50565b5f8060408385031215612844575f80fd5b61284d836126a9565b9150602083013561285d81612823565b809150509250929050565b5f60208284031215612878575f80fd5b81356001600160401b0381168114612705575f80fd5b60208082526010908201526f31b0b63632b9103737ba1037bbb732b960811b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610902576109026128b8565b602080825260099082015268546f6f206561726c7960b81b604082015260600190565b600181815b8085111561293c57815f1904821115612922576129226128b8565b8085161561292f57918102915b93841c9390800290612907565b509250929050565b5f8261295257506001610902565b8161295e57505f610902565b8160018114612974576002811461297e5761299a565b6001915050610902565b60ff84111561298f5761298f6128b8565b50506001821b610902565b5060208310610133831016604e8410600b84101617156129bd575081810a610902565b6129c78383612902565b805f19048211156129da576129da6128b8565b029392505050565b5f61270560ff841683612944565b8082028115828204841417610902576109026128b8565b5f82612a2157634e487b7160e01b5f52601260045260245ffd5b500490565b600181811c90821680612a3a57607f821691505b602082108103612a5857634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612ab857612ab86128b8565b5060010190565b5f60208284031215612acf575f80fd5b5051919050565b81810381811115610902576109026128b8565b6001600160701b03818116838216019080821115612b0957612b096128b8565b5092915050565b5f60208284031215612b20575f80fd5b815161270581612823565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612b795784516001600160a01b031683529383019391830191600101612b54565b50506001600160a01b03969096166060850152505050608001529392505050565b5f8251612bab818460208701612655565b919091019291505056fea26469706673582212207646ddf79a74e1d8c6ebcabf66c50fec8d787bb618695a0c9d89ce5d1c70a6c964736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000600000000000000000000000004f013300a0dce6193388cd057108eecb9e1054ac000000000000000000000000eb4ce314540c464754ede63e28111fe91ec4d32d000000000000000000000000033282237e1564058c677a417f28b94f07bfe71000000000000000000000000000000000000000000000000000000000659837ec00000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000084595161401484a000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000050000000000000000000000000755d37858406944dcd79f9c8b069dc7a4b60e93000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f40000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000755d37858406944dcd79f9c8b069dc7a4b60e9300000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000007546573745a6576000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007546573745a65760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f54657374776562736974652e636f6d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000974657374582e636f6d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a5465737454472e636f6d00000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : params (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [1] : _zevAddress (address): 0x4f013300A0DcE6193388Cd057108eecB9e1054aC
Arg [2] : _zentinel (address): 0xEb4cE314540c464754eDe63e28111Fe91Ec4D32D
-----Encoded View---------------
33 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 0000000000000000000000004f013300a0dce6193388cd057108eecb9e1054ac
Arg [2] : 000000000000000000000000eb4ce314540c464754ede63e28111fe91ec4d32d
Arg [3] : 000000000000000000000000033282237e1564058c677a417f28b94f07bfe710
Arg [4] : 00000000000000000000000000000000000000000000000000000000659837ec
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000280
Arg [7] : 000000000000000000000000000000000000000000084595161401484a000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [11] : 000000000000000000000000755d37858406944dcd79f9c8b069dc7a4b60e930
Arg [12] : 00000000000000000000000000000000000000000000000000000000000002c0
Arg [13] : 00000000000000000000000000000000000000000000000000000000000002e0
Arg [14] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [15] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [16] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [17] : 000000000000000000000000755d37858406944dcd79f9c8b069dc7a4b60e930
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000300
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000340
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000380
Arg [21] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [22] : 546573745a657600000000000000000000000000000000000000000000000000
Arg [23] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [24] : 546573745a657600000000000000000000000000000000000000000000000000
Arg [25] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [26] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [27] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [28] : 54657374776562736974652e636f6d0000000000000000000000000000000000
Arg [29] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [30] : 74657374582e636f6d0000000000000000000000000000000000000000000000
Arg [31] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [32] : 5465737454472e636f6d00000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
25662:11043:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33966:294;;;;;;:::i;:::-;;:::i;:::-;;4187:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26723:27;;;;;-1:-1:-1;;;;;26723:27:0;;;;;;-1:-1:-1;;;;;1038:32:1;;;1020:51;;1008:2;993:18;26723:27:0;855:222:1;6547:201:0;;;;;;:::i;:::-;;:::i;:::-;;;1684:14:1;;1677:22;1659:41;;1647:2;1632:18;6547:201:0;1519:187:1;36258:174:0;;;;;;:::i;:::-;;:::i;5316:108::-;5404:12;;5316:108;;;2048:25:1;;;2036:2;2021:18;5316:108:0;1902:177:1;26535:42:0;;;;;34268:274;;;;;;:::i;:::-;;:::i;35392:333::-;;;;;;:::i;:::-;;:::i;7328:261::-;;;;;;:::i;:::-;;:::i;5158:93::-;;;5241:2;3938:36:1;;3926:2;3911:18;5158:93:0;3796:184:1;7998:238:0;;;;;;:::i;:::-;;:::i;25984:29::-;;;;;-1:-1:-1;;;;;25984:29:0;;;26695:21;;;;;-1:-1:-1;;;;;26695:21:0;;;26500:22;;;:::i;26586:33::-;;;;;;;;;26389:19;;;;;-1:-1:-1;;;;;26389:19:0;;;;-1:-1:-1;;;26389:19:0;;;;;-1:-1:-1;;;26389:19:0;;;;;;;;;;-1:-1:-1;;;;;4444:15:1;;;4426:34;;4496:15;;;4491:2;4476:18;;4469:43;4548:15;;4528:18;;;4521:43;;;;4377:2;4362:18;26389:19:0;4193:377:1;35733:298:0;;;;;;:::i;:::-;;:::i;25707:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;26890:57;;26937:10;26890:57;;26348:32;;;;;-1:-1:-1;;;;;26348:32:0;;;;-1:-1:-1;;;26348:32:0;;;;;;-1:-1:-1;;;26348:32:0;;;;;;;;;;-1:-1:-1;;;;;5103:15:1;;;5085:34;;5155:15;;;;5150:2;5135:18;;5128:43;5214:14;5207:22;5187:18;;;5180:50;5024:2;5009:18;26348:32:0;4840:396:1;5487:127:0;;;;;;:::i;:::-;-1:-1:-1;;;;;5588:18:0;5561:7;5588:18;;;;;;;;;;;;5487:127;15718:150;;;:::i;35264:120::-;;;:::i;33257:335::-;;;;;;:::i;:::-;;:::i;34905:351::-;;;;;;:::i;:::-;;:::i;25761:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15504:79;15569:6;;-1:-1:-1;;;;;15569:6:0;15504:79;;4406:104;;;:::i;26020:35::-;;;;;26791:42;;26828:5;26791:42;;;;;-1:-1:-1;;;;;6135:31:1;;;6117:50;;6105:2;6090:18;26791:42:0;5973:200:1;33600:358:0;;;;;;:::i;:::-;;:::i;8739:436::-;;;;;;:::i;:::-;;:::i;5820:193::-;;;;;;:::i;:::-;;:::i;26472:21::-;;;:::i;25864:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;25819:36;;;;;26444:21;;;:::i;25915:29::-;;;;;;26656:30;;;;;;36590:112;;;;;;:::i;:::-;;:::i;26415:20::-;;;;;-1:-1:-1;;;;;26415:20:0;;;;-1:-1:-1;;;26415:20:0;;;;;-1:-1:-1;;;26415:20:0;;;;;;34550:347;;;;;;:::i;:::-;;:::i;6076:151::-;;;;;;:::i;:::-;;:::i;15876:244::-;;;;;;:::i;:::-;;:::i;25951:24::-;;;;;;26062:40;;;;;26757:25;;;;;-1:-1:-1;;;;;26757:25:0;;;33966:294;15569:6;;-1:-1:-1;;;;;15569:6:0;175:10;36100:23;36092:52;;;;-1:-1:-1;;;36092:52:0;;;;;;;:::i;:::-;;;;;;;;;36182:34;26937:10;36182:11;:34;:::i;:::-;36163:15;:53;;36155:75;;;;-1:-1:-1;;;36155:75:0;;;;;;;:::i;:::-;34111:14:::1;5241:2:::0;34111::::1;:14;:::i;:::-;34103:5;34082:13;5404:12:::0;;;5316:108;34082:13:::1;:18;::::0;34098:2:::1;34082:18;:::i;:::-;:26;;;;:::i;:::-;34081:45;;;;:::i;:::-;34063:14;:63;;34055:83;;;::::0;-1:-1:-1;;;34055:83:0;;9323:2:1;34055:83:0::1;::::0;::::1;9305:21:1::0;9362:1;9342:18;;;9335:29;-1:-1:-1;;;9380:18:1;;;9373:37;9427:18;;34055:83:0::1;9121:330:1::0;34055:83:0::1;34184:14;5241:2:::0;34184::::1;:14;:::i;:::-;34166:33;::::0;:14;:33:::1;:::i;:::-;34149:14;:50:::0;;;34215:37:::1;::::0;2048:25:1;;;34215:37:0::1;::::0;2036:2:1;2021:18;34215:37:0::1;;;;;;;;33966:294:::0;:::o;4187:100::-;4241:13;4274:5;4267:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4187:100;:::o;6547:201::-;6630:4;175:10;6686:32;175:10;6702:7;6711:6;6686:8;:32::i;:::-;6736:4;6729:11;;;6547:201;;;;;:::o;36258:174::-;15569:6;;-1:-1:-1;;;;;15569:6:0;175:10;36100:23;36092:52;;;;-1:-1:-1;;;36092:52:0;;;;;;;:::i;:::-;36182:34;26937:10;36182:11;:34;:::i;:::-;36163:15;:53;;36155:75;;;;-1:-1:-1;;;36155:75:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36349:22:0;::::1;36341:47;;;::::0;-1:-1:-1;;;36341:47:0;;10043:2:1;36341:47:0::1;::::0;::::1;10025:21:1::0;10082:2;10062:18;;;10055:30;-1:-1:-1;;;10101:18:1;;;10094:42;10153:18;;36341:47:0::1;9841:336:1::0;36341:47:0::1;36399:14;:25:::0;;-1:-1:-1;;;;;;36399:25:0::1;-1:-1:-1::0;;;;;36399:25:0;;;::::1;::::0;;;::::1;::::0;;36258:174::o;34268:274::-;15569:6;;-1:-1:-1;;;;;15569:6:0;175:10;36100:23;36092:52;;;;-1:-1:-1;;;36092:52:0;;;;;;;:::i;:::-;36182:34;26937:10;36182:11;:34;:::i;:::-;36163:15;:53;;36155:75;;;;-1:-1:-1;;;36155:75:0;;;;;;;:::i;:::-;34408:14:::1;5241:2:::0;34408::::1;:14;:::i;:::-;34400:5;34379:13;5404:12:::0;;;5316:108;34379:13:::1;:18;::::0;34395:2:::1;34379:18;:::i;:::-;:26;;;;:::i;:::-;34378:45;;;;:::i;:::-;34360:14;:63;;34352:83;;;::::0;-1:-1:-1;;;34352:83:0;;9323:2:1;34352:83:0::1;::::0;::::1;9305:21:1::0;9362:1;9342:18;;;9335:29;-1:-1:-1;;;9380:18:1;;;9373:37;9427:18;;34352:83:0::1;9121:330:1::0;34352:83:0::1;34476:14;5241:2:::0;34476::::1;:14;:::i;:::-;34458:33;::::0;:14;:33:::1;:::i;:::-;34446:9;:45:::0;;;34507:27:::1;::::0;2048:25:1;;;34507:27:0::1;::::0;2036:2:1;2021:18;34507:27:0::1;1902:177:1::0;35392:333:0;15631:6;;-1:-1:-1;;;;;15631:6:0;175:10;15631:22;15623:67;;;;-1:-1:-1;;;15623:67:0;;;;;;;:::i;:::-;35517:37;;::::1;35509:72;;;::::0;-1:-1:-1;;;35509:72:0;;10745:2:1;35509:72:0::1;::::0;::::1;10727:21:1::0;10784:2;10764:18;;;10757:30;-1:-1:-1;;;10803:18:1;;;10796:52;10865:18;;35509:72:0::1;10543:346:1::0;35509:72:0::1;35596:9;35592:126;35611:18:::0;;::::1;35592:126;;;35650:56;35666:10;35678:7;;35686:1;35678:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;35690:12;;35703:1;35690:15;;;;;;;:::i;:::-;;;;;;;35650;:56::i;:::-;35631:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35592:126;;;;35392:333:::0;;;;:::o;7328:261::-;7425:4;175:10;7483:38;7499:4;175:10;7514:6;7483:15;:38::i;:::-;7532:27;7542:4;7548:2;7552:6;7532:9;:27::i;:::-;-1:-1:-1;7577:4:0;;7328:261;-1:-1:-1;;;;7328:261:0:o;7998:238::-;8086:4;175:10;8142:64;175:10;8158:7;8195:10;8167:25;175:10;8158:7;8167:9;:25::i;:::-;:38;;;;:::i;:::-;8142:8;:64::i;26500:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35733:298::-;15631:6;;-1:-1:-1;;;;;15631:6:0;175:10;15631:22;15623:67;;;;-1:-1:-1;;;15623:67:0;;;;;;;:::i;:::-;35841:39:::1;::::0;-1:-1:-1;;;35841:39:0;;35874:4:::1;35841:39;::::0;::::1;1020:51:1::0;35814:24:0::1;::::0;-1:-1:-1;;;;;35841:24:0;::::1;::::0;::::1;::::0;993:18:1;;35841:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35814:66:::0;-1:-1:-1;35917:4:0::1;-1:-1:-1::0;;;;;35899:23:0;::::1;::::0;35891:61:::1;;;::::0;-1:-1:-1;;;35891:61:0;;11557:2:1;35891:61:0::1;::::0;::::1;11539:21:1::0;11596:2;11576:18;;;11569:30;11635:27;11615:18;;;11608:55;11680:18;;35891:61:0::1;11355:349:1::0;35891:61:0::1;35963:60;35993:6;36001:3;36006:16;35963:22;:60::i;:::-;35803:228;35733:298:::0;;:::o;15718:150::-;15631:6;;-1:-1:-1;;;;;15631:6:0;175:10;15631:22;15623:67;;;;-1:-1:-1;;;15623:67:0;;;;;;;:::i;:::-;15811:6:::1;::::0;15790:40:::1;::::0;15827:1:::1;::::0;-1:-1:-1;;;;;15811:6:0::1;::::0;15790:40:::1;::::0;15827:1;;15790:40:::1;15841:6;:19:::0;;-1:-1:-1;;;;;;15841:19:0::1;::::0;;15718:150::o;35264:120::-;15569:6;;-1:-1:-1;;;;;15569:6:0;175:10;36100:23;36092:52;;;;-1:-1:-1;;;36092:52:0;;;;;;;:::i;:::-;36182:34;26937:10;36182:11;:34;:::i;:::-;36163:15;:53;;36155:75;;;;-1:-1:-1;;;36155:75:0;;;;;;;:::i;:::-;35323:14:::1;:22:::0;;-1:-1:-1;;35323:22:0::1;::::0;;35361:15:::1;::::0;::::1;::::0;35340:5:::1;::::0;35361:15:::1;35264:120::o:0;33257:335::-;15569:6;;-1:-1:-1;;;;;15569:6:0;175:10;36100:23;36092:52;;;;-1:-1:-1;;;36092:52:0;;;;;;;:::i;:::-;36182:34;26937:10;36182:11;:34;:::i;:::-;36163:15;:53;;36155:75;;;;-1:-1:-1;;;36155:75:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33361:22:0;::::1;33353:47;;;::::0;-1:-1:-1;;;33353:47:0;;11911:2:1;33353:47:0::1;::::0;::::1;11893:21:1::0;11950:2;11930:18;;;11923:30;-1:-1:-1;;;11969:18:1;;;11962:42;12021:18;;33353:47:0::1;11709:336:1::0;33353:47:0::1;33439:4;-1:-1:-1::0;;;;;33419:25:0;::::1;::::0;33411:72:::1;;;::::0;-1:-1:-1;;;33411:72:0;;12252:2:1;33411:72:0::1;::::0;::::1;12234:21:1::0;12291:2;12271:18;;;12264:30;12330:34;12310:18;;;12303:62;-1:-1:-1;;;12381:18:1;;;12374:32;12423:19;;33411:72:0::1;12050:398:1::0;33411:72:0::1;-1:-1:-1::0;;;;;33494:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;;;;:36;;-1:-1:-1;;33494:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33546:38;;12621:51:1;;;12688:18;;;12681:50;33546:38:0::1;::::0;12594:18:1;33546:38:0::1;;;;;;;;33257:335:::0;;:::o;34905:351::-;15631:6;;-1:-1:-1;;;;;15631:6:0;175:10;15631:22;15623:67;;;;-1:-1:-1;;;15623:67:0;;;;;;;:::i;:::-;34978:28:::1;::::0;;::::1;::::0;::::1;::::0;;34999:7:::1;34978:28:::0;-1:-1:-1;;;34978:28:0;::::1;-1:-1:-1::0;;;;;34978:28:0;;::::1;::::0;;;;;;35017:30;::::1;::::0;;;34978:28:::1;::::0;::::1;35058::::0;;;34978;;-1:-1:-1;35105:34:0::1;35097:79;;;::::0;-1:-1:-1;;;35097:79:0;;12944:2:1;35097:79:0::1;::::0;::::1;12926:21:1::0;;;12963:18;;;12956:30;13022:34;13002:18;;;12995:62;13074:18;;35097:79:0::1;12742:356:1::0;35097:79:0::1;35207:14;::::0;;::::1;::::0;35192:30:::1;::::0;-1:-1:-1;;;;;6135:31:1;;;6117:50;;35192:30:0::1;::::0;6090:18:1;35192:30:0::1;;;;;;;35233:15:::0;;:7:::1;:15:::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;35233:15:0;;::::1;-1:-1:-1::0;;;35233:15:0::1;-1:-1:-1::0;;;;35233:15:0;;::::1;-1:-1:-1::0;;;35233:15:0::1;-1:-1:-1::0;;;;;;35233:15:0;;;;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;-1:-1:-1;34905:351:0:o;4406:104::-;4462:13;4495:7;4488:14;;;;;:::i;33600:358::-;15569:6;;-1:-1:-1;;;;;15569:6:0;175:10;36100:23;36092:52;;;;-1:-1:-1;;;36092:52:0;;;;;;;:::i;:::-;36182:34;26937:10;36182:11;:34;:::i;:::-;36163:15;:53;;36155:75;;;;-1:-1:-1;;;36155:75:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33706:22:0;::::1;33698:47;;;::::0;-1:-1:-1;;;33698:47:0;;11911:2:1;33698:47:0::1;::::0;::::1;11893:21:1::0;11950:2;11930:18;;;11923:30;-1:-1:-1;;;11969:18:1;;;11962:42;12021:18;;33698:47:0::1;11709:336:1::0;33698:47:0::1;33760:9;33756:90;;33805:6;::::0;-1:-1:-1;;;;;33805:6:0;;::::1;33793:18:::0;;::::1;::::0;33785:49:::1;;;::::0;-1:-1:-1;;;33785:49:0;;13511:2:1;33785:49:0::1;::::0;::::1;13493:21:1::0;13550:2;13530:18;;;13523:30;-1:-1:-1;;;13569:18:1;;;13562:48;13627:18;;33785:49:0::1;13309:342:1::0;33785:49:0::1;-1:-1:-1::0;;;;;33856:26:0;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;;;:38;;-1:-1:-1;;33856:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33910:40;;12621:51:1;;;12688:18;;;12681:50;33910:40:0::1;::::0;12594:18:1;33910:40:0::1;12453:284:1::0;8739:436:0;8832:4;175:10;8832:4;8915:25;175:10;8932:7;8915:9;:25::i;:::-;8888:52;;8979:15;8959:16;:35;;8951:85;;;;-1:-1:-1;;;8951:85:0;;13858:2:1;8951:85:0;;;13840:21:1;13897:2;13877:18;;;13870:30;13936:34;13916:18;;;13909:62;-1:-1:-1;;;13987:18:1;;;13980:35;14032:19;;8951:85:0;13656:401:1;8951:85:0;9072:60;9081:5;9088:7;9116:15;9097:16;:34;9072:8;:60::i;5820:193::-;5899:4;175:10;5955:28;175:10;5972:2;5976:6;5955:9;:28::i;26472:21::-;;;;;;;:::i;26444:::-;;;;;;;:::i;36590:112::-;36481:15;-1:-1:-1;;;;;36481:31:0;175:10;36481:31;36473:63;;;;-1:-1:-1;;;36473:63:0;;14264:2:1;36473:63:0;;;14246:21:1;14303:2;14283:18;;;14276:30;-1:-1:-1;;;14322:18:1;;;14315:49;14381:18;;36473:63:0;14062:343:1;36473:63:0;-1:-1:-1;;;;;36662:25:0::1;;::::0;;;:15:::1;:25;::::0;;;;:32;;-1:-1:-1;;36662:32:0::1;36690:4;36662:32;::::0;;36590:112::o;34550:347::-;15631:6;;-1:-1:-1;;;;;15631:6:0;175:10;15631:22;15623:67;;;;-1:-1:-1;;;15623:67:0;;;;;;;:::i;:::-;34622:27:::1;::::0;;::::1;::::0;::::1;::::0;;34643:6:::1;34622:27:::0;-1:-1:-1;;;34622:27:0;::::1;-1:-1:-1::0;;;;;34622:27:0;;::::1;::::0;;;;;;34660:30;::::1;::::0;;;34622:27:::1;::::0;::::1;34701:28:::0;;;34622:27;;-1:-1:-1;34748:34:0::1;34740:79;;;::::0;-1:-1:-1;;;34740:79:0;;12944:2:1;34740:79:0::1;::::0;::::1;12926:21:1::0;;;12963:18;;;12956:30;13022:34;13002:18;;;12995:62;13074:18;;34740:79:0::1;12742:356:1::0;34740:79:0::1;34849:14;::::0;;::::1;::::0;34835:29:::1;::::0;-1:-1:-1;;;;;6135:31:1;;;6117:50;;34835:29:0::1;::::0;6090:18:1;34835:29:0::1;;;;;;;34875:14:::0;;:6:::1;:14:::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;34875:14:0;;::::1;-1:-1:-1::0;;;34875:14:0::1;-1:-1:-1::0;;;;34875:14:0;;::::1;-1:-1:-1::0;;;34875:14:0::1;-1:-1:-1::0;;;;;;34875:14:0;;;;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;-1:-1:-1;34550:347:0:o;6076:151::-;-1:-1:-1;;;;;6192:18:0;;;6165:7;6192:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6076:151::o;15876:244::-;15631:6;;-1:-1:-1;;;;;15631:6:0;175:10;15631:22;15623:67;;;;-1:-1:-1;;;15623:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15965:22:0;::::1;15957:73;;;::::0;-1:-1:-1;;;15957:73:0;;14612:2:1;15957:73:0::1;::::0;::::1;14594:21:1::0;14651:2;14631:18;;;14624:30;14690:34;14670:18;;;14663:62;-1:-1:-1;;;14741:18:1;;;14734:36;14787:19;;15957:73:0::1;14410:402:1::0;15957:73:0::1;16067:6;::::0;16046:38:::1;::::0;-1:-1:-1;;;;;16046:38:0;;::::1;::::0;16067:6:::1;::::0;16046:38:::1;::::0;16067:6:::1;::::0;16046:38:::1;16095:6;:17:::0;;-1:-1:-1;;;;;;16095:17:0::1;-1:-1:-1::0;;;;;16095:17:0;;;::::1;::::0;;;::::1;::::0;;15876:244::o;12732:346::-;-1:-1:-1;;;;;12834:19:0;;12826:68;;;;-1:-1:-1;;;12826:68:0;;15019:2:1;12826:68:0;;;15001:21:1;15058:2;15038:18;;;15031:30;15097:34;15077:18;;;15070:62;-1:-1:-1;;;15148:18:1;;;15141:34;15192:19;;12826:68:0;14817:400:1;12826:68:0;-1:-1:-1;;;;;12913:21:0;;12905:68;;;;-1:-1:-1;;;12905:68:0;;15424:2:1;12905:68:0;;;15406:21:1;15463:2;15443:18;;;15436:30;15502:34;15482:18;;;15475:62;-1:-1:-1;;;15553:18:1;;;15546:32;15595:19;;12905:68:0;15222:398:1;12905:68:0;-1:-1:-1;;;;;12986:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13038:32;;2048:25:1;;;13038:32:0;;2021:18:1;13038:32:0;;;;;;;12732:346;;;:::o;9645:806::-;-1:-1:-1;;;;;9742:18:0;;9734:68;;;;-1:-1:-1;;;9734:68:0;;15827:2:1;9734:68:0;;;15809:21:1;15866:2;15846:18;;;15839:30;15905:34;15885:18;;;15878:62;-1:-1:-1;;;15956:18:1;;;15949:35;16001:19;;9734:68:0;15625:401:1;9734:68:0;-1:-1:-1;;;;;9821:16:0;;9813:64;;;;-1:-1:-1;;;9813:64:0;;16233:2:1;9813:64:0;;;16215:21:1;16272:2;16252:18;;;16245:30;16311:34;16291:18;;;16284:62;-1:-1:-1;;;16362:18:1;;;16355:33;16405:19;;9813:64:0;16031:399:1;9813:64:0;-1:-1:-1;;;;;9963:15:0;;9941:19;9963:15;;;;;;;;;;;9997:21;;;;9989:72;;;;-1:-1:-1;;;9989:72:0;;16637:2:1;9989:72:0;;;16619:21:1;16676:2;16656:18;;;16649:30;16715:34;16695:18;;;16688:62;-1:-1:-1;;;16766:18:1;;;16759:36;16812:19;;9989:72:0;16435:402:1;9989:72:0;-1:-1:-1;;;;;10097:15:0;;;:9;:15;;;;;;;;;;;10115:20;;;10097:38;;10315:13;;;;;;;;;;:23;;;;;;10367:26;;2048:25:1;;;10315:13:0;;10367:26;;2021:18:1;10367:26:0;;;;;;;10406:37;9723:728;9645:806;;;:::o;13369:419::-;13470:24;13497:25;13507:5;13514:7;13497:9;:25::i;:::-;13470:52;;-1:-1:-1;;13537:16:0;:37;13533:248;;13619:6;13599:16;:26;;13591:68;;;;-1:-1:-1;;;13591:68:0;;17044:2:1;13591:68:0;;;17026:21:1;17083:2;17063:18;;;17056:30;17122:31;17102:18;;;17095:59;17171:18;;13591:68:0;16842:353:1;13591:68:0;13703:51;13712:5;13719:7;13747:6;13728:16;:25;13703:8;:51::i;29230:391::-;-1:-1:-1;;;;;29366:20:0;;;;;;:14;:20;;;;;;;;29365:21;:44;;;;-1:-1:-1;;;;;;29391:18:0;;;;;;:14;:18;;;;;;;;29390:19;29365:44;29362:208;;;29428:14;;;;29425:82;;;29462:29;29474:4;29480:2;29484:6;29462:11;:29::i;:::-;29531:27;29541:4;29547:2;29551:6;29531:9;:27::i;:::-;29521:37;;;;:::i;:::-;;;29362:208;29582:31;29598:4;29603:2;29606:6;29582:15;:31::i;22290:177::-;22400:58;;;-1:-1:-1;;;;;17525:32:1;;22400:58:0;;;17507:51:1;17574:18;;;;17567:34;;;22400:58:0;;;;;;;;;;17480:18:1;;;;22400:58:0;;;;;;;;-1:-1:-1;;;;;22400:58:0;-1:-1:-1;;;22400:58:0;;;22373:86;;22393:5;;22373:19;:86::i;29629:869::-;29744:11;29725:15;:30;;29717:59;;;;-1:-1:-1;;;29717:59:0;;17814:2:1;29717:59:0;;;17796:21:1;17853:2;17833:18;;;17826:30;-1:-1:-1;;;17872:18:1;;;17865:46;17928:18;;29717:59:0;17612:340:1;29717:59:0;-1:-1:-1;;;;;29793:13:0;;;;;;:9;:13;;;;;;;;29792:14;:71;;;;-1:-1:-1;29829:34:0;26937:10;29829:11;:34;:::i;:::-;29810:15;:53;;29792:71;29789:174;;;-1:-1:-1;;;;;29887:19:0;;;;;;:15;:19;;;;;;;;:38;;;;-1:-1:-1;;;;;;29910:15:0;;29916:9;29910:15;29887:38;29879:72;;;;-1:-1:-1;;;29879:72:0;;18159:2:1;29879:72:0;;;18141:21:1;18198:2;18178:18;;;18171:30;-1:-1:-1;;;18217:18:1;;;18210:51;18278:18;;29879:72:0;17957:345:1;29879:72:0;-1:-1:-1;;;;;29995:15:0;;;;;;:9;:15;;;;;;;;:40;;;;-1:-1:-1;;;;;;30015:20:0;;;;;;:16;:20;;;;;;;;30014:21;29995:40;29991:500;;;30070:14;;30060:6;:24;;30052:52;;;;-1:-1:-1;;;30052:52:0;;18509:2:1;30052:52:0;;;18491:21:1;18548:2;18528:18;;;18521:30;-1:-1:-1;;;18567:18:1;;;18560:45;18622:18;;30052:52:0;18307:339:1;30052:52:0;30153:9;;-1:-1:-1;;;;;5588:18:0;;5561:7;5588:18;;;;;;;;;;;30136:13;30127:22;;:6;:22;:::i;:::-;:35;;30119:67;;;;-1:-1:-1;;;30119:67:0;;18853:2:1;30119:67:0;;;18835:21:1;18892:2;18872:18;;;18865:30;-1:-1:-1;;;18911:18:1;;;18904:49;18970:18;;30119:67:0;18651:343:1;29991:500:0;-1:-1:-1;;;;;30235:13:0;;;;;;:9;:13;;;;;;;;:40;;;;-1:-1:-1;;;;;;30253:22:0;;;;;;:16;:22;;;;;;;;30252:23;30235:40;30231:260;;;30310:14;;30300:6;:24;;30292:52;;;;-1:-1:-1;;;30292:52:0;;18509:2:1;30292:52:0;;;18491:21:1;18548:2;18528:18;;;18521:30;-1:-1:-1;;;18567:18:1;;;18560:45;18622:18;;30292:52:0;18307:339:1;30231:260:0;-1:-1:-1;;;;;30375:20:0;;;;;;:16;:20;;;;;;;;30371:120;;30446:9;;-1:-1:-1;;;;;5588:18:0;;5561:7;5588:18;;;;;;;;;;;30429:13;5487:127;30506:990;30653:4;30585:7;5588:18;;;;;;;;;;;30719:15;;30695:39;;;;;;;30750:20;;-1:-1:-1;30762:8:0;;;;;;;30761:9;30750:20;:37;;;;-1:-1:-1;;;;;;30774:13:0;;;;;;:9;:13;;;;;;;;30750:37;30747:79;;;30804:10;:8;:10::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30907:13:0;;;;:9;:13;;;;;;;;30903:126;;;-1:-1:-1;30936:15:0;;;;;;;;30944:7;30936:15;-1:-1:-1;;;;;30936:15:0;;;;;-1:-1:-1;;;30936:15:0;;;;;;;;-1:-1:-1;;;30936:15:0;;;;;;;;;;;30903:126;;;-1:-1:-1;;;;;30972:15:0;;;;;;:9;:15;;;;;;;;30969:60;;;-1:-1:-1;31003:14:0;;;;;;;;31011:6;31003:14;-1:-1:-1;;;;;31003:14:0;;;;;-1:-1:-1;;;31003:14:0;;;;;;;;-1:-1:-1;;;31003:14:0;;;;;;;;;;;30969:60;31044:14;;;;-1:-1:-1;;;;;31044:18:0;;31041:425;;31078:53;;;;;;;;31119:12;31078:53;-1:-1:-1;;;;;31078:53:0;;;;;-1:-1:-1;;;31078:53:0;;;;;;;;;;;-1:-1:-1;;;31078:53:0;;;;;;;;;;;;;;31169:14;;;;26828:5;;31160:23;;-1:-1:-1;;;;;31160:23:0;:6;:23;:::i;:::-;:37;;;;:::i;:::-;31146:52;;;-1:-1:-1;31274:3:0;31269:2;31259:7;31146:52;31265:1;31259:7;:::i;:::-;:12;;;;:::i;:::-;:18;;;;:::i;:::-;31213:65;;:18;:35;;:65;;;;;;;:::i;:::-;-1:-1:-1;;;;;31213:65:0;;;-1:-1:-1;31346:3:0;31335:8;31341:2;31335:3;:8;:::i;:::-;:14;;;;:::i;:::-;31293:57;;:18;:31;;:57;;;;;;;:::i;:::-;-1:-1:-1;;;;;31293:57:0;;;;;;31365:33;;:12;:33;;;;;;;;;;;;-1:-1:-1;;;31365:33:0;-1:-1:-1;;;;31365:33:0;;;-1:-1:-1;;;31365:33:0;-1:-1:-1;;;;;;31365:33:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31413:41:0;31429:4;31443;31450:3;31413:15;:41::i;:::-;31063:403;31041:425;-1:-1:-1;31485:3:0;30506:990;-1:-1:-1;;;;;;30506:990:0:o;22688:333::-;22769:23;22795:69;22823:4;22795:69;;;;;;;;;;;;;;;;;22803:5;-1:-1:-1;;;;;22795:27:0;;;:69;;;;;:::i;:::-;22879:17;;22769:95;;-1:-1:-1;22879:21:0;22875:139;;22936:10;22925:30;;;;;;;;;;;;:::i;:::-;22917:85;;;;-1:-1:-1;;;22917:85:0;;19649:2:1;22917:85:0;;;19631:21:1;19688:2;19668:18;;;19661:30;19727:34;19707:18;;;19700:62;-1:-1:-1;;;19778:18:1;;;19771:40;19828:19;;22917:85:0;19447:406:1;32094:1129:0;32177:4;32133:23;5588:18;;;;;;;;;;;32194:50;;;;;;;;32232:12;32194:50;-1:-1:-1;;;;;32194:50:0;;;;;;-1:-1:-1;;;32194:50:0;;;;;;;;;;;-1:-1:-1;;;32194:50:0;;;;;;;;;;;;;;32133;;-1:-1:-1;32194:50:0;-1:-1:-1;;32283:81:0;;32194:50;32283:81;:::i;:::-;32255:109;;32388:15;32407:1;32388:20;32385:34;;32411:7;;;32094:1129::o;32385:34::-;32452:15;;:20;;32470:2;32452:20;:::i;:::-;32434:15;:38;32431:107;;;32506:15;;:20;;32524:2;32506:20;:::i;:::-;32488:38;;32431:107;32554:41;32579:15;32554:24;:41::i;:::-;32645:11;;:36;;-1:-1:-1;;;32645:36:0;;32675:4;32645:36;;;1020:51:1;32616:26:0;;-1:-1:-1;;;;;32645:11:0;;:21;;993:18:1;;32645:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32697:28;;;;32616:65;;-1:-1:-1;;;;;;32697:32:0;;32694:183;;32768:11;;32815:28;;;;32745:120;;-1:-1:-1;;;;;32768:11:0;;32781:10;;32846:17;;32794:49;;-1:-1:-1;;;;;32794:49:0;:18;:49;:::i;:::-;:69;;;;:::i;:::-;32745:22;:120::i;:::-;32910:11;;:36;;-1:-1:-1;;;32910:36:0;;32940:4;32910:36;;;1020:51:1;-1:-1:-1;;;;;32910:11:0;;;;:21;;993:18:1;;32910:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32889:57;-1:-1:-1;32960:22:0;;32957:124;;33021:11;;33034:14;;32998:71;;-1:-1:-1;;;;;33021:11:0;;;;33034:14;33050:18;32998:22;:71::i;:::-;-1:-1:-1;;33124:1:0;33093:28;;;:32;;;33136:36;;33185:12;:30;;;;;;;;;-1:-1:-1;;;33185:30:0;-1:-1:-1;;;;;;33185:30:0;;;;;;;;;-1:-1:-1;32094:1129:0:o;16793:229::-;16930:12;16962:52;16984:6;16992:4;16998:1;17001:12;16962:21;:52::i;:::-;16955:59;16793:229;-1:-1:-1;;;;16793:229:0:o;31504:582::-;31661:16;;;31675:1;31661:16;;;;;;;;31637:21;;31661:16;;;;;;;;;;-1:-1:-1;31661:16:0;31637:40;;31706:4;31688;31693:1;31688:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31688:23:0;;;:7;;;;;;;;;:23;31740:11;;31722:7;;31740:11;;;31722:4;;31740:11;;31722:7;;;;;;:::i;:::-;-1:-1:-1;;;;;31722:30:0;;;:7;;;;;;;;;:30;31791:9;;:223;;-1:-1:-1;;;31791:223:0;;:9;;;:63;;:223;;31869:8;;31791:9;;31933:4;;31960:12;;31988:15;;31791:223;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32065:11:0;;32027:51;;-1:-1:-1;;;32027:51:0;;-1:-1:-1;;;;;32065:11:0;;;32027:51;;;1020::1;32027:12:0;:29;;;;-1:-1:-1;32027:29:0;;-1:-1:-1;993:18:1;;32027:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31564:522;31504:582;:::o;17913:455::-;18083:12;18141:5;18116:21;:30;;18108:81;;;;-1:-1:-1;;;18108:81:0;;21177:2:1;18108:81:0;;;21159:21:1;21216:2;21196:18;;;21189:30;21255:34;21235:18;;;21228:62;-1:-1:-1;;;21306:18:1;;;21299:36;21352:19;;18108:81:0;20975:402:1;18108:81:0;18201:12;18215:23;18242:6;-1:-1:-1;;;;;18242:11:0;18261:5;18268:4;18242:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18200:73;;;;18291:69;18318:6;18326:7;18335:10;18347:12;18291:26;:69::i;:::-;18284:76;17913:455;-1:-1:-1;;;;;;;17913:455:0:o;20486:644::-;20671:12;20700:7;20696:427;;;20728:10;:17;20749:1;20728:22;20724:290;;-1:-1:-1;;;;;16234:19:0;;;20938:60;;;;-1:-1:-1;;;20938:60:0;;21876:2:1;20938:60:0;;;21858:21:1;21915:2;21895:18;;;21888:30;21954:31;21934:18;;;21927:59;22003:18;;20938:60:0;21674:353:1;20938:60:0;-1:-1:-1;21035:10:0;21028:17;;20696:427;21078:33;21086:10;21098:12;21833:17;;:21;21829:388;;22065:10;22059:17;22122:15;22109:10;22105:2;22101:19;22094:44;21829:388;22192:12;22185:20;;-1:-1:-1;;;22185:20:0;;;;;;;;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:250::-;284:1;294:113;308:6;305:1;302:13;294:113;;;384:11;;;378:18;365:11;;;358:39;330:2;323:10;294:113;;;-1:-1:-1;;441:1:1;423:16;;416:27;199:250::o;454:396::-;603:2;592:9;585:21;566:4;635:6;629:13;678:6;673:2;662:9;658:18;651:34;694:79;766:6;761:2;750:9;746:18;741:2;733:6;729:15;694:79;:::i;:::-;834:2;813:15;-1:-1:-1;;809:29:1;794:45;;;;841:2;790:54;;454:396;-1:-1:-1;;454:396:1:o;1082:173::-;1150:20;;-1:-1:-1;;;;;1199:31:1;;1189:42;;1179:70;;1245:1;1242;1235:12;1179:70;1082:173;;;:::o;1260:254::-;1328:6;1336;1389:2;1377:9;1368:7;1364:23;1360:32;1357:52;;;1405:1;1402;1395:12;1357:52;1428:29;1447:9;1428:29;:::i;:::-;1418:39;1504:2;1489:18;;;;1476:32;;-1:-1:-1;;;1260:254:1:o;1711:186::-;1770:6;1823:2;1811:9;1802:7;1798:23;1794:32;1791:52;;;1839:1;1836;1829:12;1791:52;1862:29;1881:9;1862:29;:::i;:::-;1852:39;1711:186;-1:-1:-1;;;1711:186:1:o;2313:367::-;2376:8;2386:6;2440:3;2433:4;2425:6;2421:17;2417:27;2407:55;;2458:1;2455;2448:12;2407:55;-1:-1:-1;2481:20:1;;-1:-1:-1;;;;;2513:30:1;;2510:50;;;2556:1;2553;2546:12;2510:50;2593:4;2585:6;2581:17;2569:29;;2653:3;2646:4;2636:6;2633:1;2629:14;2621:6;2617:27;2613:38;2610:47;2607:67;;;2670:1;2667;2660:12;2607:67;2313:367;;;;;:::o;2685:773::-;2807:6;2815;2823;2831;2884:2;2872:9;2863:7;2859:23;2855:32;2852:52;;;2900:1;2897;2890:12;2852:52;2940:9;2927:23;-1:-1:-1;;;;;3010:2:1;3002:6;2999:14;2996:34;;;3026:1;3023;3016:12;2996:34;3065:70;3127:7;3118:6;3107:9;3103:22;3065:70;:::i;:::-;3154:8;;-1:-1:-1;3039:96:1;-1:-1:-1;3242:2:1;3227:18;;3214:32;;-1:-1:-1;3258:16:1;;;3255:36;;;3287:1;3284;3277:12;3255:36;;3326:72;3390:7;3379:8;3368:9;3364:24;3326:72;:::i;:::-;2685:773;;;;-1:-1:-1;3417:8:1;-1:-1:-1;;;;2685:773:1:o;3463:328::-;3540:6;3548;3556;3609:2;3597:9;3588:7;3584:23;3580:32;3577:52;;;3625:1;3622;3615:12;3577:52;3648:29;3667:9;3648:29;:::i;:::-;3638:39;;3696:38;3730:2;3719:9;3715:18;3696:38;:::i;:::-;3686:48;;3781:2;3770:9;3766:18;3753:32;3743:42;;3463:328;;;;;:::o;4575:260::-;4643:6;4651;4704:2;4692:9;4683:7;4679:23;4675:32;4672:52;;;4720:1;4717;4710:12;4672:52;4743:29;4762:9;4743:29;:::i;:::-;4733:39;;4791:38;4825:2;4814:9;4810:18;4791:38;:::i;:::-;4781:48;;4575:260;;;;;:::o;5241:118::-;5327:5;5320:13;5313:21;5306:5;5303:32;5293:60;;5349:1;5346;5339:12;5293:60;5241:118;:::o;5364:315::-;5429:6;5437;5490:2;5478:9;5469:7;5465:23;5461:32;5458:52;;;5506:1;5503;5496:12;5458:52;5529:29;5548:9;5529:29;:::i;:::-;5519:39;;5608:2;5597:9;5593:18;5580:32;5621:28;5643:5;5621:28;:::i;:::-;5668:5;5658:15;;;5364:315;;;;;:::o;5684:284::-;5742:6;5795:2;5783:9;5774:7;5770:23;5766:32;5763:52;;;5811:1;5808;5801:12;5763:52;5850:9;5837:23;-1:-1:-1;;;;;5893:5:1;5889:30;5882:5;5879:41;5869:69;;5934:1;5931;5924:12;6399:340;6601:2;6583:21;;;6640:2;6620:18;;;6613:30;-1:-1:-1;;;6674:2:1;6659:18;;6652:46;6730:2;6715:18;;6399:340::o;6744:127::-;6805:10;6800:3;6796:20;6793:1;6786:31;6836:4;6833:1;6826:15;6860:4;6857:1;6850:15;6876:125;6941:9;;;6962:10;;;6959:36;;;6975:18;;:::i;7006:332::-;7208:2;7190:21;;;7247:1;7227:18;;;7220:29;-1:-1:-1;;;7280:2:1;7265:18;;7258:39;7329:2;7314:18;;7006:332::o;7343:422::-;7432:1;7475:5;7432:1;7489:270;7510:7;7500:8;7497:21;7489:270;;;7569:4;7565:1;7561:6;7557:17;7551:4;7548:27;7545:53;;;7578:18;;:::i;:::-;7628:7;7618:8;7614:22;7611:55;;;7648:16;;;;7611:55;7727:22;;;;7687:15;;;;7489:270;;;7493:3;7343:422;;;;;:::o;7770:806::-;7819:5;7849:8;7839:80;;-1:-1:-1;7890:1:1;7904:5;;7839:80;7938:4;7928:76;;-1:-1:-1;7975:1:1;7989:5;;7928:76;8020:4;8038:1;8033:59;;;;8106:1;8101:130;;;;8013:218;;8033:59;8063:1;8054:10;;8077:5;;;8101:130;8138:3;8128:8;8125:17;8122:43;;;8145:18;;:::i;:::-;-1:-1:-1;;8201:1:1;8187:16;;8216:5;;8013:218;;8315:2;8305:8;8302:16;8296:3;8290:4;8287:13;8283:36;8277:2;8267:8;8264:16;8259:2;8253:4;8250:12;8246:35;8243:77;8240:159;;;-1:-1:-1;8352:19:1;;;8384:5;;8240:159;8431:34;8456:8;8450:4;8431:34;:::i;:::-;8501:6;8497:1;8493:6;8489:19;8480:7;8477:32;8474:58;;;8512:18;;:::i;:::-;8550:20;;7770:806;-1:-1:-1;;;7770:806:1:o;8581:140::-;8639:5;8668:47;8709:4;8699:8;8695:19;8689:4;8668:47;:::i;8726:168::-;8799:9;;;8830;;8847:15;;;8841:22;;8827:37;8817:71;;8868:18;;:::i;8899:217::-;8939:1;8965;8955:132;;9009:10;9004:3;9000:20;8997:1;8990:31;9044:4;9041:1;9034:15;9072:4;9069:1;9062:15;8955:132;-1:-1:-1;9101:9:1;;8899:217::o;9456:380::-;9535:1;9531:12;;;;9578;;;9599:61;;9653:4;9645:6;9641:17;9631:27;;9599:61;9706:2;9698:6;9695:14;9675:18;9672:38;9669:161;;9752:10;9747:3;9743:20;9740:1;9733:31;9787:4;9784:1;9777:15;9815:4;9812:1;9805:15;9669:161;;9456:380;;;:::o;10182:356::-;10384:2;10366:21;;;10403:18;;;10396:30;10462:34;10457:2;10442:18;;10435:62;10529:2;10514:18;;10182:356::o;10894:127::-;10955:10;10950:3;10946:20;10943:1;10936:31;10986:4;10983:1;10976:15;11010:4;11007:1;11000:15;11026:135;11065:3;11086:17;;;11083:43;;11106:18;;:::i;:::-;-1:-1:-1;11153:1:1;11142:13;;11026:135::o;11166:184::-;11236:6;11289:2;11277:9;11268:7;11264:23;11260:32;11257:52;;;11305:1;11302;11295:12;11257:52;-1:-1:-1;11328:16:1;;11166:184;-1:-1:-1;11166:184:1:o;17200:128::-;17267:9;;;17288:11;;;17285:37;;;17302:18;;:::i;18999:193::-;-1:-1:-1;;;;;19117:10:1;;;19129;;;19113:27;;19152:11;;;19149:37;;;19166:18;;:::i;:::-;19149:37;18999:193;;;;:::o;19197:245::-;19264:6;19317:2;19305:9;19296:7;19292:23;19288:32;19285:52;;;19333:1;19330;19323:12;19285:52;19365:9;19359:16;19384:28;19406:5;19384:28;:::i;19990:980::-;20252:4;20300:3;20289:9;20285:19;20331:6;20320:9;20313:25;20357:2;20395:6;20390:2;20379:9;20375:18;20368:34;20438:3;20433:2;20422:9;20418:18;20411:31;20462:6;20497;20491:13;20528:6;20520;20513:22;20566:3;20555:9;20551:19;20544:26;;20605:2;20597:6;20593:15;20579:29;;20626:1;20636:195;20650:6;20647:1;20644:13;20636:195;;;20715:13;;-1:-1:-1;;;;;20711:39:1;20699:52;;20806:15;;;;20771:12;;;;20747:1;20665:9;20636:195;;;-1:-1:-1;;;;;;;20887:32:1;;;;20882:2;20867:18;;20860:60;-1:-1:-1;;;20951:3:1;20936:19;20929:35;20848:3;19990:980;-1:-1:-1;;;19990:980:1:o;21382:287::-;21511:3;21549:6;21543:13;21565:66;21624:6;21619:3;21612:4;21604:6;21600:17;21565:66;:::i;:::-;21647:16;;;;;21382:287;-1:-1:-1;;21382:287:1:o
Swarm Source
ipfs://e313f4c18bb02b3e034f24eefa8116771017200997f5dbfd28a94be05b3b5368
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.