Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Tfrenzy
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 9999 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity 0.8.26; // 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 IERC20Metadata is IERC20{ /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * 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"); 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); } /** @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"); _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); } /** * @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); } } } } 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)); } } 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; } interface IDexFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } contract Tfrenzy is ERC20, Ownable { mapping (address => bool) public exemptFromFees; mapping (address => bool) public exemptFromLimits; bool public tradingAllowed; mapping (address => bool) public isAMMPair; address public marketingAddress; address public devAddress; address private _mod; address public operationsAddress; Taxes public buyTax; Taxes public sellTax; TokensForTax public tokensForTax; mapping(address => uint256) private _holderLastTransferBlock; // MEV protection bool public antiMevEnabled = false; bool public limited = true; uint256 public swapTokensAtAmt; uint256 public lastSwapBackBlock; address public immutable lpPair; IDexRouter public immutable dexRouter; address public immutable WETH; TxLimits public txLimits; uint64 public constant FEE_DIVISOR = 10000; uint256 public launchBlock; bool public transferDelayEnabled = false; mapping (address => bool) private bots; // structs struct TxLimits { uint128 transactionLimit; uint128 walletLimit; } struct Taxes { uint64 marketingTax; uint64 devTax; uint64 liquidityTax; uint64 totalTax; } struct TokensForTax { uint80 tokensForMarketing; uint80 tokensForLiquidity; uint80 tokensForDev; bool gasSaver; } // events event UpdatedTransactionLimit(uint newMax); event UpdatedWalletLimit(uint newMax); event SetExemptFromFees(address _address, bool _isExempt); event SetExemptFromLimits(address _address, bool _isExempt); event RemovedLimits(); event UpdatedBuyTax(uint newAmt); event UpdatedSellTax(uint newAmt); // constructor constructor() ERC20("TRUMP FRENZY", "TFRNZY") { _mint(msg.sender, 100000000 * (10 ** 18)); address _v2Router; // @dev assumes WETH pair if(block.chainid == 1){ _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; } else if(block.chainid == 11155111){ _v2Router = 0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008; } else if(block.chainid == 8453){ _v2Router = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24; } else { revert("Chain not configured"); } dexRouter = IDexRouter(_v2Router); txLimits.transactionLimit = uint128(totalSupply() * 10 / 1000); txLimits.walletLimit = uint128(totalSupply() * 10 / 1000); swapTokensAtAmt = totalSupply() * 25 / 100000; marketingAddress = msg.sender; // update devAddress = msg.sender; // update operationsAddress = msg.sender; _mod = msg.sender; buyTax.marketingTax = 1000; // 1% = 100 buyTax.liquidityTax = 0; buyTax.devTax = 0; buyTax.totalTax = buyTax.marketingTax + buyTax.liquidityTax + buyTax.devTax; sellTax.marketingTax = 3500; sellTax.liquidityTax = 0; sellTax.devTax = 0; sellTax.totalTax = sellTax.marketingTax + sellTax.liquidityTax + sellTax.devTax; tokensForTax.gasSaver = true; WETH = dexRouter.WETH(); lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), WETH); isAMMPair[lpPair] = true; exemptFromLimits[lpPair] = true; exemptFromLimits[msg.sender] = true; exemptFromLimits[address(this)] = true; exemptFromFees[msg.sender] = true; exemptFromFees[address(this)] = true; exemptFromFees[address(dexRouter)] = true; _approve(address(this), address(dexRouter), type(uint256).max); _approve(address(msg.sender), address(dexRouter), totalSupply()); } function isBot(address a) public view returns (bool){ return bots[a]; } function _transfer( address from, address to, uint256 amount ) internal virtual override { if(!exemptFromFees[from] && !exemptFromFees[to]){ require(!bots[from] && !bots[to], "Bot"); require(tradingAllowed, "Trading not active"); amount -= handleTax(from, to, amount); checkLimits(from, to, amount); } super._transfer(from,to,amount); } function checkLimits(address from, address to, uint256 amount) internal { if(limited){ bool exFromLimitsTo = exemptFromLimits[to]; uint256 balanceOfTo = balanceOf(to); TxLimits memory _txLimits = txLimits; // buy if (isAMMPair[from] && !exFromLimitsTo) { require(amount <= _txLimits.transactionLimit, "Max Txn"); require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet"); } // sell else if (isAMMPair[to] && !exemptFromLimits[from]) { require(amount <= _txLimits.transactionLimit, "Max Txn"); } else if(!exFromLimitsTo) { require(amount + balanceOfTo <= _txLimits.walletLimit, "Max Wallet"); } if(transferDelayEnabled){ if (to != address(dexRouter) && to != address(lpPair)){ require(_holderLastTransferBlock[tx.origin] + 30 < block.number, "Transfer Delay"); _holderLastTransferBlock[to] = block.number; _holderLastTransferBlock[tx.origin] = block.number; if(from == address(lpPair)){ require(tx.origin == to, "no buying to external wallets yet"); } } } } } function handleTax(address from, address to, uint256 amount) internal returns (uint256){ if(balanceOf(address(this)) >= swapTokensAtAmt && !isAMMPair[from] && lastSwapBackBlock + 2 <= block.number) { convertTaxes(); } uint128 tax = 0; Taxes memory taxes; if (isAMMPair[to]){ taxes = sellTax; } else if(isAMMPair[from]){ taxes = buyTax; } if(taxes.totalTax > 0){ TokensForTax memory tokensForTaxUpdate = tokensForTax; if(launchBlock == block.number){ if (isAMMPair[from]){ tax = uint128(amount * 123 / FEE_DIVISOR); } else if (isAMMPair[to]) { tax = uint128(amount * 9999 / FEE_DIVISOR); } } else { tax = uint128(amount * taxes.totalTax / FEE_DIVISOR); } tokensForTaxUpdate.tokensForLiquidity += uint80(tax * taxes.liquidityTax / taxes.totalTax / 1e9); tokensForTaxUpdate.tokensForMarketing += uint80(tax * taxes.marketingTax / taxes.totalTax / 1e9); tokensForTaxUpdate.tokensForDev += uint80(tax * taxes.devTax / taxes.totalTax / 1e9); tokensForTax = tokensForTaxUpdate; super._transfer(from, address(this), tax); } return tax; } function swapTokensForETH(uint256 tokenAmt) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH; dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmt, 0, path, address(this), block.timestamp ); } function convertTaxes() private { uint256 contractBalance = balanceOf(address(this)); TokensForTax memory tokensForTaxMem = tokensForTax; uint256 totalTokensToSwap = tokensForTaxMem.tokensForLiquidity + tokensForTaxMem.tokensForMarketing + tokensForTaxMem.tokensForDev; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmt * 10){ contractBalance = swapTokensAtAmt * 10; } if(tokensForTaxMem.tokensForLiquidity > 0){ uint256 liquidityTokens = contractBalance * tokensForTaxMem.tokensForLiquidity / totalTokensToSwap; super._transfer(address(this), lpPair, liquidityTokens); try ILpPair(lpPair).sync(){} catch {} contractBalance -= liquidityTokens; totalTokensToSwap -= tokensForTaxMem.tokensForLiquidity; } if(contractBalance > 0){ swapTokensForETH(contractBalance); uint256 ethBalance = address(this).balance; bool success; if(tokensForTaxMem.tokensForDev > 0){ (success,) = devAddress.call{value: ethBalance * tokensForTaxMem.tokensForDev / totalTokensToSwap}(""); } ethBalance = address(this).balance; if(ethBalance > 0){ (success,) = marketingAddress.call{value: ethBalance}(""); } } tokensForTaxMem.tokensForLiquidity = 0; tokensForTaxMem.tokensForMarketing = 0; tokensForTaxMem.tokensForDev = 0; tokensForTax = tokensForTaxMem; lastSwapBackBlock = block.number; } // owner functions function setExemptFromFee(address[] memory addresses, bool _isExempt) external onlyOwnerOrMod { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; require(addr != address(0), "Zero Address"); require(addr != address(this), "Cannot unexempt contract"); exemptFromFees[addr] = _isExempt; emit SetExemptFromFees(addr, _isExempt); } } function setExemptFromLimit(address[] memory addresses, bool _isExempt) external onlyOwnerOrMod { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; require(addr != address(0), "Zero Address"); if (!_isExempt) { require(addr != lpPair, "Cannot remove pair"); } exemptFromLimits[addr] = _isExempt; emit SetExemptFromLimits(addr, _isExempt); } } function updateTransactionLimit(uint128 newNumInTokens) external onlyOwner { require(newNumInTokens >= (totalSupply() * 1 / 1000)/(10**decimals()), "Too low"); txLimits.transactionLimit = uint128(newNumInTokens * (10**decimals())); emit UpdatedTransactionLimit(txLimits.transactionLimit); } function updateWalletLimit(uint128 newNumInTokens) external onlyOwner { require(newNumInTokens >= (totalSupply() * 1 / 1000)/(10**decimals()), "Too low"); txLimits.walletLimit = uint128(newNumInTokens * (10**decimals())); emit UpdatedWalletLimit(txLimits.walletLimit); } function updateSwapTokensAmt(uint256 newAmount) external onlyOwnerOrMod { require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmt = newAmount; } function updateBuyTax(uint64 _marketingTax, uint64 _liquidityTax, uint64 _devTax) external onlyOwnerOrMod { Taxes memory taxes; taxes.marketingTax = _marketingTax; taxes.liquidityTax = _liquidityTax; taxes.devTax = _devTax; taxes.totalTax = _marketingTax + _liquidityTax + _devTax; require(taxes.totalTax <= 2000 || taxes.totalTax <= buyTax.totalTax, "Keep tax below 10%"); emit UpdatedBuyTax(taxes.totalTax); buyTax = taxes; } function updateSellTax(uint64 _marketingTax, uint64 _liquidityTax, uint64 _devTax) external onlyOwnerOrMod { Taxes memory taxes; taxes.marketingTax = _marketingTax; taxes.liquidityTax = _liquidityTax; taxes.devTax = _devTax; taxes.totalTax = _marketingTax + _liquidityTax + _devTax; require(taxes.totalTax <= 2000 || taxes.totalTax <= sellTax.totalTax, "Keep tax below 10%"); emit UpdatedSellTax(taxes.totalTax); sellTax = taxes; } function winwinwin() external onlyOwnerOrMod { require(!tradingAllowed, "Trading already enabled"); tradingAllowed = true; launchBlock = block.number; lastSwapBackBlock = block.number; } function removeLimits() external onlyOwnerOrMod { limited = false; TxLimits memory _txLimits; uint256 supply = totalSupply(); _txLimits.transactionLimit = uint128(supply); _txLimits.walletLimit = uint128(supply); txLimits = _txLimits; emit RemovedLimits(); } function removeTransferDelay() external onlyOwnerOrMod { require(transferDelayEnabled, "Already disabled!"); transferDelayEnabled = false; } function withdrawStuckETH() external { bool success; (success,) = address(devAddress).call{value: address(this).balance}(""); } function rescueAnything(address _token) external { require(_token != address(0), "_token address cannot be 0"); require(msg.sender == marketingAddress || msg.sender == devAddress, "Not dev"); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); SafeERC20.safeTransfer(IERC20(_token),address(devAddress), _contractBalance); } function updateMarketingAddress(address _address) external onlyOwnerOrMod { require(_address != address(0), "zero address"); marketingAddress = _address; } function updateDevAddress(address _address) external onlyOwnerOrMod { require(_address != address(0), "zero address"); devAddress = _address; } function mint(address to, uint256 amount) external onlyOwner { _mint(to, amount); } function updateOperationsAddress(address _address) external onlyOwnerOrMod { require(_address != address(0), "zero address"); operationsAddress = _address; } function updateModAddress(address _address) external onlyOwnerOrMod { require(_address != address(0), "zero address"); operationsAddress = _address; } function addBots(address[] memory bots_) public onlyOwner { for (uint i = 0; i < bots_.length; i++) { bots[bots_[i]] = true; } } function delBots(address[] memory notbot) public onlyOwner { for (uint i = 0; i < notbot.length; i++) { bots[notbot[i]] = false; } } function rescueTether() external { address tokenAdd = address(0xdAC17F958D2ee523a2206206994597C13D831ec7); // USDT ADDRESS uint256 tokenBalance = IERC20(tokenAdd).balanceOf(address(this)); require(tokenBalance > 0, "Amount should be greater than zero"); IERC20(tokenAdd).transfer(devAddress, tokenBalance); } modifier onlyOwnerOrMod() { require(owner() == msg.sender || _mod == msg.sender, "Not owner or mod"); _; } receive() payable external {} }
{ "optimizer": { "enabled": true, "runs": 9999 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdatedWalletLimit","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"addBots","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":[],"name":"antiMevEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint64","name":"marketingTax","type":"uint64"},{"internalType":"uint64","name":"devTax","type":"uint64"},{"internalType":"uint64","name":"liquidityTax","type":"uint64"},{"internalType":"uint64","name":"totalTax","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":[{"internalType":"address[]","name":"notbot","type":"address[]"}],"name":"delBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"address","name":"a","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSwapBackBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","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":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"rescueAnything","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueTether","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint64","name":"marketingTax","type":"uint64"},{"internalType":"uint64","name":"devTax","type":"uint64"},{"internalType":"uint64","name":"liquidityTax","type":"uint64"},{"internalType":"uint64","name":"totalTax","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"setExemptFromLimit","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":"tokensForTax","outputs":[{"internalType":"uint80","name":"tokensForMarketing","type":"uint80"},{"internalType":"uint80","name":"tokensForLiquidity","type":"uint80"},{"internalType":"uint80","name":"tokensForDev","type":"uint80"},{"internalType":"bool","name":"gasSaver","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"txLimits","outputs":[{"internalType":"uint128","name":"transactionLimit","type":"uint128"},{"internalType":"uint128","name":"walletLimit","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"_marketingTax","type":"uint64"},{"internalType":"uint64","name":"_liquidityTax","type":"uint64"},{"internalType":"uint64","name":"_devTax","type":"uint64"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateModAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_marketingTax","type":"uint64"},{"internalType":"uint64","name":"_liquidityTax","type":"uint64"},{"internalType":"uint64","name":"_devTax","type":"uint64"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"updateTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newNumInTokens","type":"uint128"}],"name":"updateWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"winwinwin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040526012805461ffff19166101001790556017805460ff1916905534801561002957600080fd5b506040518060400160405280600c81526020016b5452554d50204652454e5a5960a01b815250604051806040016040528060068152602001655446524e5a5960d01b815250816003908161007d919061083d565b50600461008a828261083d565b505050600061009d6105b160201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610100336a52b7d2dcc80cd2e40000006105b5565b6000466001036101255750737a250d5630b4cf539739df2c5dacb4c659f2488d6101bb565b4662aa36a70361014a575073c532a74256d3db42d0bf7a0400fefdbad76940086101bb565b466121050361016e5750734752ba5dbc23f44d87826276bf6fd6b1c372ad246101bb565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b03811660a0526103e86101d460025490565b6101df90600a610911565b6101e9919061092e565b601580546001600160801b0319166001600160801b03929092169190911790556103e861021560025490565b61022090600a610911565b61022a919061092e565b601580546001600160801b03928316600160801b029216919091179055620186a061025460025490565b61025f906019610911565b610269919061092e565b601355600a8054336001600160a01b03199182168117909255600b8054821683179055600d8054821683179055600c80549091169091179055600e80546103e86001600160c01b03199091168117918290556001600160401b036801000000000000000083048116926102e792600160801b90910490911690610950565b6102f19190610950565b600e80546001600160c01b0316600160c01b6001600160401b0393841602179055600f8054610dac6001600160c01b031990911681179182905568010000000000000000820483169261034c92600160801b90041690610950565b6103569190610950565b600f80546001600160401b0392909216600160c01b026001600160c01b039092169190911790556010805460ff60f01b1916600160f01b17905560a051604080516315ab88c960e31b815290516001600160a01b039092169163ad5c4648916004808201926020929091908290030181865afa1580156103da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fe919061096f565b6001600160a01b031660c0816001600160a01b03168152505060a0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047b919061096f565b60c0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af11580156104cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f0919061096f565b6001600160a01b03908116608081905260009081526009602090815260408083208054600160ff19918216811790925560078452828520805482168317905533808652838620805483168417905530808752848720805484168517905590865260069094528285208054821683179055838552828520805482168317905560a05195861685529190932080549091169092179091556105919160001961067a565b6105ab3360a0516105a661067460201b60201c565b61067a565b506109b2565b3390565b6001600160a01b03821661060b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016101b2565b806002600082825461061d919061099f565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60025490565b6001600160a01b0383166106dc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016101b2565b6001600160a01b03821661073d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016101b2565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806107c857607f821691505b6020821081036107e857634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561083857806000526020600020601f840160051c810160208510156108155750805b601f840160051c820191505b818110156108355760008155600101610821565b50505b505050565b81516001600160401b038111156108565761085661079e565b61086a8161086484546107b4565b846107ee565b6020601f82116001811461089e57600083156108865750848201515b600019600385901b1c1916600184901b178455610835565b600084815260208120601f198516915b828110156108ce57878501518255602094850194600190920191016108ae565b50848210156108ec5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610928576109286108fb565b92915050565b60008261094b57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160401b038181168382160190811115610928576109286108fb565b60006020828403121561098157600080fd5b81516001600160a01b038116811461099857600080fd5b9392505050565b80820180821115610928576109286108fb565b60805160a05160c0516147b4610a19600039600081816109fc0152613db70152600081816103b8015281816135470152613e2701526000818161061501528181611527015281816135840152818161364f01528181613b100152613b3701526147b46000f3fe60806040526004361061036f5760003560e01c8063717b382b116101c6578063c78d0fa0116100f7578063e7e3437211610095578063f270fde41161006f578063f270fde414610bc1578063f2fde38b14610c2b578063f5648a4f14610c4b578063f8686f0714610c6057600080fd5b8063e7e3437214610b81578063ea4cfe1214610ba1578063ea6debd014610b6157600080fd5b8063d00efb2f116100d1578063d00efb2f14610ae5578063d34628cc14610afb578063dd62ed3e14610b1b578063e79c890614610b6157600080fd5b8063c78d0fa014610a4e578063c876d0b914610a64578063cc1776d314610a7e57600080fd5b806395d89b4111610164578063a5ece9411161013e578063a5ece941146109aa578063a9059cbb146109ca578063ad5c4648146109ea578063b0249cc614610a1e57600080fd5b806395d89b41146109465780639e93ad8e1461095b578063a457c2d71461098a57600080fd5b8063860a32ec116101a0578063860a32ec146108b95780638becc57d146108d85780638d3e6e40146108f85780638da5cb5b1461092857600080fd5b8063717b382b1461086f578063751039fc14610884578063850337621461089957600080fd5b80633ad10ef6116102a05780635a90a49e1161023e57806366ebd39a1161021857806366ebd39a146107565780636d7adcad1461077657806370a0823114610824578063715018a61461085a57600080fd5b80635a90a49e146106ec5780635b5af6c51461071c578063627e9d8e1461073c57600080fd5b8063432e95a51161027a578063432e95a5146105ed578063452ed4f1146106035780634f7041a51461063757806353371be0146106d257600080fd5b80633ad10ef6146105745780633bbac5791461059457806340c10f19146105cd57600080fd5b8063286965a71161030d578063313ce567116102e7578063313ce567146104f857806331c2d8471461051457806336e18e1914610534578063395093511461055457600080fd5b8063286965a7146104a357806329c26951146104c35780632a4c78db146104d857600080fd5b806318160ddd1161034957806318160ddd1461042257806321045918146104415780632369bf831461046357806323b872dd1461048357600080fd5b806306fdde031461037b5780630758d924146103a6578063095ea7b3146103f257600080fd5b3661037657005b600080fd5b34801561038757600080fd5b50610390610c75565b60405161039d9190614049565b60405180910390f35b3480156103b257600080fd5b506103da7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161039d565b3480156103fe57600080fd5b5061041261040d3660046140b6565b610d07565b604051901515815260200161039d565b34801561042e57600080fd5b506002545b60405190815260200161039d565b34801561044d57600080fd5b5061046161045c3660046140e0565b610d21565b005b34801561046f57600080fd5b5061046161047e3660046140f9565b610ed6565b34801561048f57600080fd5b5061041261049e36600461411b565b610fe4565b3480156104af57600080fd5b506104616104be366004614170565b611008565b3480156104cf57600080fd5b50610461611278565b3480156104e457600080fd5b506104616104f33660046142b7565b611416565b34801561050457600080fd5b506040516012815260200161039d565b34801561052057600080fd5b5061046161052f366004614309565b61160e565b34801561054057600080fd5b5061046161054f36600461433e565b6116ca565b34801561056057600080fd5b5061041261056f3660046140b6565b61185b565b34801561058057600080fd5b50600b546103da906001600160a01b031681565b3480156105a057600080fd5b506104126105af3660046140f9565b6001600160a01b031660009081526018602052604090205460ff1690565b3480156105d957600080fd5b506104616105e83660046140b6565b61189a565b3480156105f957600080fd5b5061043360145481565b34801561060f57600080fd5b506103da7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064357600080fd5b50600e5461069e9067ffffffffffffffff808216916801000000000000000081048216917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041684565b6040805167ffffffffffffffff9586168152938516602085015291841691830191909152909116606082015260800161039d565b3480156106de57600080fd5b506008546104129060ff1681565b3480156106f857600080fd5b506104126107073660046140f9565b60066020526000908152604090205460ff1681565b34801561072857600080fd5b506104616107373660046142b7565b6118fe565b34801561074857600080fd5b506012546104129060ff1681565b34801561076257600080fd5b5061046161077136600461433e565b611ac8565b34801561078257600080fd5b506010546107ec9069ffffffffffffffffffff808216916a0100000000000000000000810482169174010000000000000000000000000000000000000000820416907e01000000000000000000000000000000000000000000000000000000000000900460ff1684565b60405161039d949392919069ffffffffffffffffffff9485168152928416602084015292166040820152901515606082015260800190565b34801561083057600080fd5b5061043361083f3660046140f9565b6001600160a01b031660009081526020819052604090205490565b34801561086657600080fd5b50610461611c4a565b34801561087b57600080fd5b50610461611d06565b34801561089057600080fd5b50610461611def565b3480156108a557600080fd5b506104616108b43660046140f9565b611f19565b3480156108c557600080fd5b5060125461041290610100900460ff1681565b3480156108e457600080fd5b506104616108f3366004614170565b612027565b34801561090457600080fd5b506104126109133660046140f9565b60076020526000908152604090205460ff1681565b34801561093457600080fd5b506005546001600160a01b03166103da565b34801561095257600080fd5b50610390612297565b34801561096757600080fd5b5061097161271081565b60405167ffffffffffffffff909116815260200161039d565b34801561099657600080fd5b506104126109a53660046140b6565b6122a6565b3480156109b657600080fd5b50600a546103da906001600160a01b031681565b3480156109d657600080fd5b506104126109e53660046140b6565b612350565b3480156109f657600080fd5b506103da7f000000000000000000000000000000000000000000000000000000000000000081565b348015610a2a57600080fd5b50610412610a393660046140f9565b60096020526000908152604090205460ff1681565b348015610a5a57600080fd5b5061043360135481565b348015610a7057600080fd5b506017546104129060ff1681565b348015610a8a57600080fd5b50600f5461069e9067ffffffffffffffff808216916801000000000000000081048216917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041684565b348015610af157600080fd5b5061043360165481565b348015610b0757600080fd5b50610461610b16366004614309565b61235e565b348015610b2757600080fd5b50610433610b36366004614370565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b6d57600080fd5b50610461610b7c3660046140f9565b612416565b348015610b8d57600080fd5b50610461610b9c3660046140f9565b612524565b348015610bad57600080fd5b50600d546103da906001600160a01b031681565b348015610bcd57600080fd5b50601554610c02906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff93841681529290911660208301520161039d565b348015610c3757600080fd5b50610461610c463660046140f9565b612688565b348015610c5757600080fd5b506104616127d2565b348015610c6c57600080fd5b5061046161282a565b606060038054610c84906143a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb0906143a3565b8015610cfd5780601f10610cd257610100808354040283529160200191610cfd565b820191906000526020600020905b815481529060010190602001808311610ce057829003601f168201915b5050505050905090565b600033610d15818585612906565b60019150505b92915050565b33610d346005546001600160a01b031690565b6001600160a01b03161480610d535750600c546001600160a01b031633145b610da45760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f640000000000000000000000000000000060448201526064015b60405180910390fd5b620186a0610db160025490565b610dbc906001614425565b610dc6919061446b565b811015610e3b5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610d9b565b6103e8610e4760025490565b610e52906005614425565b610e5c919061446b565b811115610ed15760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e352520746f74616c20737570706c792e0000000000000000000000006064820152608401610d9b565b601355565b33610ee96005546001600160a01b031690565b6001600160a01b03161480610f085750600c546001600160a01b031633145b610f545760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b6001600160a01b038116610faa5760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610d9b565b600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600033610ff2858285612a5e565b610ffd858585612b08565b506001949350505050565b3361101b6005546001600160a01b031690565b6001600160a01b0316148061103a5750600c546001600160a01b031633145b6110865760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b604080516080810182526000606082015267ffffffffffffffff8581168252848116928201929092529082166020820152816110c2848661447f565b6110cc919061447f565b67ffffffffffffffff16606082018190526107d010158061111d5750600f54606082015167ffffffffffffffff78010000000000000000000000000000000000000000000000009092048216911611155b6111695760405162461bcd60e51b815260206004820152601260248201527f4b656570207461782062656c6f772031302500000000000000000000000000006044820152606401610d9b565b606081015160405167ffffffffffffffff90911681527fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c979060200160405180910390a18051600f80546020840151604085015160609095015167ffffffffffffffff90811678010000000000000000000000000000000000000000000000000277ffffffffffffffffffffffffffffffffffffffffffffffff96821670010000000000000000000000000000000002969096166fffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117919091179055505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273dac17f958d2ee523a2206206994597c13d831ec79060009082906370a0823190602401602060405180830381865afa1580156112e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611309919061449f565b9050600081116113815760405162461bcd60e51b815260206004820152602260248201527f416d6f756e742073686f756c642062652067726561746572207468616e207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152608401610d9b565b600b546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af11580156113ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141191906144b8565b505050565b336114296005546001600160a01b031690565b6001600160a01b031614806114485750600c546001600160a01b031633145b6114945760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b60005b82518110156114115760008382815181106114b4576114b46144d5565b6020026020010151905060006001600160a01b0316816001600160a01b0316036115205760405162461bcd60e51b815260206004820152600c60248201527f5a65726f204164647265737300000000000000000000000000000000000000006044820152606401610d9b565b826115a6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036115a65760405162461bcd60e51b815260206004820152601260248201527f43616e6e6f742072656d6f7665207061697200000000000000000000000000006044820152606401610d9b565b6001600160a01b038116600081815260076020908152604091829020805460ff19168715159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce910160405180910390a150600101611497565b6005546001600160a01b031633146116685760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d9b565b60005b81518110156116c65760006018600084848151811061168c5761168c6144d5565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010161166b565b5050565b6005546001600160a01b031633146117245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d9b565b6117306012600a614627565b6103e861173c60025490565b611747906001614425565b611751919061446b565b61175b919061446b565b816fffffffffffffffffffffffffffffffff1610156117bc5760405162461bcd60e51b815260206004820152600760248201527f546f6f206c6f77000000000000000000000000000000000000000000000000006044820152606401610d9b565b6117c86012600a614627565b6117e4906fffffffffffffffffffffffffffffffff8316614425565b601580547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691821790556040519081527f6710da7d4acedae09cb83751ae24c150719ef67dcbc1e02049f171d13c6b44e6906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610d159082908690611895908790614636565b612906565b6005546001600160a01b031633146118f45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d9b565b6116c68282612c5c565b336119116005546001600160a01b031690565b6001600160a01b031614806119305750600c546001600160a01b031633145b61197c5760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b60005b825181101561141157600083828151811061199c5761199c6144d5565b6020026020010151905060006001600160a01b0316816001600160a01b031603611a085760405162461bcd60e51b815260206004820152600c60248201527f5a65726f204164647265737300000000000000000000000000000000000000006044820152606401610d9b565b306001600160a01b03821603611a605760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420756e6578656d707420636f6e747261637400000000000000006044820152606401610d9b565b6001600160a01b038116600081815260066020908152604091829020805460ff19168715159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d910160405180910390a15060010161197f565b6005546001600160a01b03163314611b225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d9b565b611b2e6012600a614627565b6103e8611b3a60025490565b611b45906001614425565b611b4f919061446b565b611b59919061446b565b816fffffffffffffffffffffffffffffffff161015611bba5760405162461bcd60e51b815260206004820152600760248201527f546f6f206c6f77000000000000000000000000000000000000000000000000006044820152606401610d9b565b611bc66012600a614627565b611be2906fffffffffffffffffffffffffffffffff8316614425565b601580546fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000093821684021791829055604051929091041681527fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade078890602001611850565b6005546001600160a01b03163314611ca45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d9b565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b33611d196005546001600160a01b031690565b6001600160a01b03161480611d385750600c546001600160a01b031633145b611d845760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b60085460ff1615611dd75760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610d9b565b6008805460ff19166001179055436016819055601455565b33611e026005546001600160a01b031690565b6001600160a01b03161480611e215750600c546001600160a01b031633145b611e6d5760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b601280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560408051808201909152600080825260208201526000611eb460025490565b6fffffffffffffffffffffffffffffffff8116808452602084018190527001000000000000000000000000000000008102176015556040519091507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a15050565b33611f2c6005546001600160a01b031690565b6001600160a01b03161480611f4b5750600c546001600160a01b031633145b611f975760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b6001600160a01b038116611fed5760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610d9b565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b3361203a6005546001600160a01b031690565b6001600160a01b031614806120595750600c546001600160a01b031633145b6120a55760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b604080516080810182526000606082015267ffffffffffffffff8581168252848116928201929092529082166020820152816120e1848661447f565b6120eb919061447f565b67ffffffffffffffff16606082018190526107d010158061213c5750600e54606082015167ffffffffffffffff78010000000000000000000000000000000000000000000000009092048216911611155b6121885760405162461bcd60e51b815260206004820152601260248201527f4b656570207461782062656c6f772031302500000000000000000000000000006044820152606401610d9b565b606081015160405167ffffffffffffffff90911681527f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05089060200160405180910390a18051600e80546020840151604085015160609095015167ffffffffffffffff90811678010000000000000000000000000000000000000000000000000277ffffffffffffffffffffffffffffffffffffffffffffffff96821670010000000000000000000000000000000002969096166fffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117919091179055505050565b606060048054610c84906143a3565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156123435760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610d9b565b610ffd8286868403612906565b600033610d15818585612b08565b6005546001600160a01b031633146123b85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d9b565b60005b81518110156116c6576001601860008484815181106123dc576123dc6144d5565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016123bb565b336124296005546001600160a01b031690565b6001600160a01b031614806124485750600c546001600160a01b031633145b6124945760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b6001600160a01b0381166124ea5760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610d9b565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6001600160a01b03811661257a5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d9b565b600a546001600160a01b031633148061259d5750600b546001600160a01b031633145b6125e95760405162461bcd60e51b815260206004820152600760248201527f4e6f7420646576000000000000000000000000000000000000000000000000006044820152606401610d9b565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015612649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266d919061449f565b600b549091506116c69083906001600160a01b031683612d1b565b6005546001600160a01b031633146126e25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d9b565b6001600160a01b03811661275e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610d9b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600b546040516000916001600160a01b03169047908381818185875af1925050503d806000811461281f576040519150601f19603f3d011682016040523d82523d6000602084013e612824565b606091505b50505050565b3361283d6005546001600160a01b031690565b6001600160a01b0316148061285c5750600c546001600160a01b031633145b6128a85760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b60175460ff166128fa5760405162461bcd60e51b815260206004820152601160248201527f416c72656164792064697361626c6564210000000000000000000000000000006044820152606401610d9b565b6017805460ff19169055565b6001600160a01b0383166129815760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610d9b565b6001600160a01b0382166129fd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610d9b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146128245781811015612afb5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d9b565b6128248484848403612906565b6001600160a01b03831660009081526006602052604090205460ff16158015612b4a57506001600160a01b03821660009081526006602052604090205460ff16155b15612c51576001600160a01b03831660009081526018602052604090205460ff16158015612b9157506001600160a01b03821660009081526018602052604090205460ff16155b612bdd5760405162461bcd60e51b815260206004820152600360248201527f426f7400000000000000000000000000000000000000000000000000000000006044820152606401610d9b565b60085460ff16612c2f5760405162461bcd60e51b815260206004820152601260248201527f54726164696e67206e6f742061637469766500000000000000000000000000006044820152606401610d9b565b612c3a838383612d9b565b612c449082614649565b9050612c518383836132b3565b6114118383836136fe565b6001600160a01b038216612cb25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610d9b565b8060026000828254612cc49190614636565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526114119084906138ec565b60135430600090815260208190526040812054909111158015612dd757506001600160a01b03841660009081526009602052604090205460ff16155b8015612df15750436014546002612dee9190614636565b11155b15612dfe57612dfe6139d1565b6040805160808101825260008082526020808301829052828401829052606083018290526001600160a01b0387168252600990529182205460ff1615612eb3575060408051608081018252600f5467ffffffffffffffff8082168352680100000000000000008204811660208401527001000000000000000000000000000000008204811693830193909352780100000000000000000000000000000000000000000000000090049091166060820152612f45565b6001600160a01b03861660009081526009602052604090205460ff1615612f45575060408051608081018252600e5467ffffffffffffffff80821683526801000000000000000082048116602084015270010000000000000000000000000000000082048116938301939093527801000000000000000000000000000000000000000000000000900490911660608201525b606081015167ffffffffffffffff1615613298576040805160808101825260105469ffffffffffffffffffff80821683526a010000000000000000000082048116602084015274010000000000000000000000000000000000000000820416928201929092527e0100000000000000000000000000000000000000000000000000000000000090910460ff1615156060820152601654439003613057576001600160a01b03871660009081526009602052604090205460ff16156130225761271061301186607b614425565b61301b919061446b565b9250613081565b6001600160a01b03861660009081526009602052604090205460ff1615613052576127106130118661270f614425565b613081565b6060820151612710906130749067ffffffffffffffff1687614425565b61307e919061446b565b92505b633b9aca00826060015167ffffffffffffffff16836040015167ffffffffffffffff16856130af919061465c565b6130b9919061468e565b6130c3919061468e565b816020018181516130d491906146ce565b69ffffffffffffffffffff1690525060608201518251633b9aca009167ffffffffffffffff9081169161310891168661465c565b613112919061468e565b61311c919061468e565b8151829061312b9083906146ce565b69ffffffffffffffffffff1690525060608201516020830151633b9aca009167ffffffffffffffff9081169161316291168661465c565b61316c919061468e565b613176919061468e565b8160400181815161318791906146ce565b69ffffffffffffffffffff90811690915282516010805460208601516040870151606088015115157e01000000000000000000000000000000000000000000000000000000000000027fff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9187167401000000000000000000000000000000000000000002919091167fff0000000000000000000000ffffffffffffffffffffffffffffffffffffffff9287166a0100000000000000000000027fffffffffffffffffffffffff000000000000000000000000000000000000000090941695909616949094179190911716929092171790555061329687306fffffffffffffffffffffffffffffffff86166136fe565b505b506fffffffffffffffffffffffffffffffff16949350505050565b601254610100900460ff1615611411576001600160a01b0382811660009081526007602090815260408083205483835281842054825180840184526015546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000090910416818601529589168552600990935292205460ff928316939192168015613341575082155b1561341d5780516fffffffffffffffffffffffffffffffff168411156133a95760405162461bcd60e51b815260206004820152600760248201527f4d61782054786e000000000000000000000000000000000000000000000000006044820152606401610d9b565b60208101516fffffffffffffffffffffffffffffffff166133ca8386614636565b11156134185760405162461bcd60e51b815260206004820152600a60248201527f4d61782057616c6c6574000000000000000000000000000000000000000000006044820152606401610d9b565b61353a565b6001600160a01b03851660009081526009602052604090205460ff16801561345e57506001600160a01b03861660009081526007602052604090205460ff16155b156134c65780516fffffffffffffffffffffffffffffffff168411156134185760405162461bcd60e51b815260206004820152600760248201527f4d61782054786e000000000000000000000000000000000000000000000000006044820152606401610d9b565b8261353a5760208101516fffffffffffffffffffffffffffffffff166134ec8386614636565b111561353a5760405162461bcd60e51b815260206004820152600a60248201527f4d61782057616c6c6574000000000000000000000000000000000000000000006044820152606401610d9b565b60175460ff16156136f6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316141580156135b957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b156136f6573260009081526011602052604090205443906135db90601e614636565b106136285760405162461bcd60e51b815260206004820152600e60248201527f5472616e736665722044656c61790000000000000000000000000000000000006044820152606401610d9b565b6001600160a01b0380861660009081526011602052604080822043908190553283529120557f00000000000000000000000000000000000000000000000000000000000000008116908716036136f657326001600160a01b038616146136f65760405162461bcd60e51b815260206004820152602160248201527f6e6f20627579696e6720746f2065787465726e616c2077616c6c65747320796560448201527f74000000000000000000000000000000000000000000000000000000000000006064820152608401610d9b565b505050505050565b6001600160a01b03831661377a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d9b565b6001600160a01b0382166137f65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d9b565b6001600160a01b038316600090815260208190526040902054818110156138855760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610d9b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b6000613941826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613d499092919063ffffffff16565b805190915015611411578080602001905181019061395f91906144b8565b6114115760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610d9b565b306000908152602081905260408120546040805160808101825260105469ffffffffffffffffffff8082168084526a010000000000000000000083048216602085018190527401000000000000000000000000000000000000000084049092169484018590527e0100000000000000000000000000000000000000000000000000000000000090920460ff1615156060840152939450909260009291613a76916146ce565b613a8091906146ce565b69ffffffffffffffffffff169050821580613a99575080155b15613aa357505050565b601354613ab190600a614425565b831115613ac957601354613ac690600a614425565b92505b602082015169ffffffffffffffffffff1615613bce57600081836020015169ffffffffffffffffffff1685613afe9190614425565b613b08919061446b565b9050613b35307f0000000000000000000000000000000000000000000000000000000000000000836136fe565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613b9057600080fd5b505af1925050508015613ba1575060015b50613bac8185614649565b9350826020015169ffffffffffffffffffff1682613bca9190614649565b9150505b8215613cd957613bdd83613d60565b6040820151479060009069ffffffffffffffffffff1615613c7557600b5460408501516001600160a01b03909116908490613c249069ffffffffffffffffffff1685614425565b613c2e919061446b565b604051600081818185875af1925050503d8060008114613c6a576040519150601f19603f3d011682016040523d82523d6000602084013e613c6f565b606091505b50909150505b4791508115613cd657600a546040516001600160a01b03909116908390600081818185875af1925050503d8060008114613ccb576040519150601f19603f3d011682016040523d82523d6000602084013e613cd0565b606091505b50909150505b50505b5060006020820181905280825260408201526010805460609092015115157e01000000000000000000000000000000000000000000000000000000000000027fff000000000000000000000000000000000000000000000000000000000000009092169190911790555043601455565b6060613d588484600085613e95565b949350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d9557613d956144d5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110613de957613de96144d5565b6001600160a01b0392831660209182029290920101526040517f791ac9470000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac94790613e679085906000908690309042906004016146f0565b600060405180830381600087803b158015613e8157600080fd5b505af11580156136f6573d6000803e3d6000fd5b606082471015613f0d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610d9b565b600080866001600160a01b03168587604051613f299190614762565b60006040518083038185875af1925050503d8060008114613f66576040519150601f19603f3d011682016040523d82523d6000602084013e613f6b565b606091505b5091509150613f7c87838387613f87565b979650505050505050565b60608315613ff6578251600003613fef576001600160a01b0385163b613fef5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d9b565b5081613d58565b613d58838381511561400b5781518083602001fd5b8060405162461bcd60e51b8152600401610d9b9190614049565b60005b83811015614040578181015183820152602001614028565b50506000910152565b6020815260008251806020840152614068816040850160208701614025565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b80356001600160a01b03811681146140b157600080fd5b919050565b600080604083850312156140c957600080fd5b6140d28361409a565b946020939093013593505050565b6000602082840312156140f257600080fd5b5035919050565b60006020828403121561410b57600080fd5b6141148261409a565b9392505050565b60008060006060848603121561413057600080fd5b6141398461409a565b92506141476020850161409a565b929592945050506040919091013590565b803567ffffffffffffffff811681146140b157600080fd5b60008060006060848603121561418557600080fd5b61418e84614158565b925061419c60208501614158565b91506141aa60408501614158565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126141f357600080fd5b813567ffffffffffffffff81111561420d5761420d6141b3565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811067ffffffffffffffff82111715614258576142586141b3565b60405291825260208185018101929081018684111561427657600080fd5b6020860192505b8383101561429c5761428e8361409a565b81526020928301920161427d565b5095945050505050565b80151581146142b457600080fd5b50565b600080604083850312156142ca57600080fd5b823567ffffffffffffffff8111156142e157600080fd5b6142ed858286016141e2565b92505060208301356142fe816142a6565b809150509250929050565b60006020828403121561431b57600080fd5b813567ffffffffffffffff81111561433257600080fd5b613d58848285016141e2565b60006020828403121561435057600080fd5b81356fffffffffffffffffffffffffffffffff8116811461411457600080fd5b6000806040838503121561438357600080fd5b61438c8361409a565b915061439a6020840161409a565b90509250929050565b600181811c908216806143b757607f821691505b6020821081036143f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610d1b57610d1b6143f6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261447a5761447a61443c565b500490565b67ffffffffffffffff8181168382160190811115610d1b57610d1b6143f6565b6000602082840312156144b157600080fd5b5051919050565b6000602082840312156144ca57600080fd5b8151614114816142a6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6001815b600184111561453f57808504811115614523576145236143f6565b600184161561453157908102905b60019390931c928002614508565b935093915050565b60008261455657506001610d1b565b8161456357506000610d1b565b816001811461457957600281146145835761459f565b6001915050610d1b565b60ff841115614594576145946143f6565b50506001821b610d1b565b5060208310610133831016604e8410600b84101617156145c2575081810a610d1b565b6145ed7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614504565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561461f5761461f6143f6565b029392505050565b600061411460ff841683614547565b80820180821115610d1b57610d1b6143f6565b81810381811115610d1b57610d1b6143f6565b6fffffffffffffffffffffffffffffffff8181168382160290811690818114614687576146876143f6565b5092915050565b60006fffffffffffffffffffffffffffffffff8316806146b0576146b061443c565b806fffffffffffffffffffffffffffffffff84160491505092915050565b69ffffffffffffffffffff8181168382160190811115610d1b57610d1b6143f6565b600060a0820187835286602084015260a0604084015280865180835260c08501915060208801925060005b818110156147425783516001600160a01b031683526020938401939092019160010161471b565b50506001600160a01b039590951660608401525050608001529392505050565b60008251614774818460208701614025565b919091019291505056fea264697066735822122076f448e7b3ea19cf9b1b633dfc2f7d53c6abce5d78b6b4722a55e395e30319db64736f6c634300081a0033
Deployed Bytecode
0x60806040526004361061036f5760003560e01c8063717b382b116101c6578063c78d0fa0116100f7578063e7e3437211610095578063f270fde41161006f578063f270fde414610bc1578063f2fde38b14610c2b578063f5648a4f14610c4b578063f8686f0714610c6057600080fd5b8063e7e3437214610b81578063ea4cfe1214610ba1578063ea6debd014610b6157600080fd5b8063d00efb2f116100d1578063d00efb2f14610ae5578063d34628cc14610afb578063dd62ed3e14610b1b578063e79c890614610b6157600080fd5b8063c78d0fa014610a4e578063c876d0b914610a64578063cc1776d314610a7e57600080fd5b806395d89b4111610164578063a5ece9411161013e578063a5ece941146109aa578063a9059cbb146109ca578063ad5c4648146109ea578063b0249cc614610a1e57600080fd5b806395d89b41146109465780639e93ad8e1461095b578063a457c2d71461098a57600080fd5b8063860a32ec116101a0578063860a32ec146108b95780638becc57d146108d85780638d3e6e40146108f85780638da5cb5b1461092857600080fd5b8063717b382b1461086f578063751039fc14610884578063850337621461089957600080fd5b80633ad10ef6116102a05780635a90a49e1161023e57806366ebd39a1161021857806366ebd39a146107565780636d7adcad1461077657806370a0823114610824578063715018a61461085a57600080fd5b80635a90a49e146106ec5780635b5af6c51461071c578063627e9d8e1461073c57600080fd5b8063432e95a51161027a578063432e95a5146105ed578063452ed4f1146106035780634f7041a51461063757806353371be0146106d257600080fd5b80633ad10ef6146105745780633bbac5791461059457806340c10f19146105cd57600080fd5b8063286965a71161030d578063313ce567116102e7578063313ce567146104f857806331c2d8471461051457806336e18e1914610534578063395093511461055457600080fd5b8063286965a7146104a357806329c26951146104c35780632a4c78db146104d857600080fd5b806318160ddd1161034957806318160ddd1461042257806321045918146104415780632369bf831461046357806323b872dd1461048357600080fd5b806306fdde031461037b5780630758d924146103a6578063095ea7b3146103f257600080fd5b3661037657005b600080fd5b34801561038757600080fd5b50610390610c75565b60405161039d9190614049565b60405180910390f35b3480156103b257600080fd5b506103da7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161039d565b3480156103fe57600080fd5b5061041261040d3660046140b6565b610d07565b604051901515815260200161039d565b34801561042e57600080fd5b506002545b60405190815260200161039d565b34801561044d57600080fd5b5061046161045c3660046140e0565b610d21565b005b34801561046f57600080fd5b5061046161047e3660046140f9565b610ed6565b34801561048f57600080fd5b5061041261049e36600461411b565b610fe4565b3480156104af57600080fd5b506104616104be366004614170565b611008565b3480156104cf57600080fd5b50610461611278565b3480156104e457600080fd5b506104616104f33660046142b7565b611416565b34801561050457600080fd5b506040516012815260200161039d565b34801561052057600080fd5b5061046161052f366004614309565b61160e565b34801561054057600080fd5b5061046161054f36600461433e565b6116ca565b34801561056057600080fd5b5061041261056f3660046140b6565b61185b565b34801561058057600080fd5b50600b546103da906001600160a01b031681565b3480156105a057600080fd5b506104126105af3660046140f9565b6001600160a01b031660009081526018602052604090205460ff1690565b3480156105d957600080fd5b506104616105e83660046140b6565b61189a565b3480156105f957600080fd5b5061043360145481565b34801561060f57600080fd5b506103da7f00000000000000000000000048336d13aff6adf76c1cd4a008eb346cce663ed281565b34801561064357600080fd5b50600e5461069e9067ffffffffffffffff808216916801000000000000000081048216917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041684565b6040805167ffffffffffffffff9586168152938516602085015291841691830191909152909116606082015260800161039d565b3480156106de57600080fd5b506008546104129060ff1681565b3480156106f857600080fd5b506104126107073660046140f9565b60066020526000908152604090205460ff1681565b34801561072857600080fd5b506104616107373660046142b7565b6118fe565b34801561074857600080fd5b506012546104129060ff1681565b34801561076257600080fd5b5061046161077136600461433e565b611ac8565b34801561078257600080fd5b506010546107ec9069ffffffffffffffffffff808216916a0100000000000000000000810482169174010000000000000000000000000000000000000000820416907e01000000000000000000000000000000000000000000000000000000000000900460ff1684565b60405161039d949392919069ffffffffffffffffffff9485168152928416602084015292166040820152901515606082015260800190565b34801561083057600080fd5b5061043361083f3660046140f9565b6001600160a01b031660009081526020819052604090205490565b34801561086657600080fd5b50610461611c4a565b34801561087b57600080fd5b50610461611d06565b34801561089057600080fd5b50610461611def565b3480156108a557600080fd5b506104616108b43660046140f9565b611f19565b3480156108c557600080fd5b5060125461041290610100900460ff1681565b3480156108e457600080fd5b506104616108f3366004614170565b612027565b34801561090457600080fd5b506104126109133660046140f9565b60076020526000908152604090205460ff1681565b34801561093457600080fd5b506005546001600160a01b03166103da565b34801561095257600080fd5b50610390612297565b34801561096757600080fd5b5061097161271081565b60405167ffffffffffffffff909116815260200161039d565b34801561099657600080fd5b506104126109a53660046140b6565b6122a6565b3480156109b657600080fd5b50600a546103da906001600160a01b031681565b3480156109d657600080fd5b506104126109e53660046140b6565b612350565b3480156109f657600080fd5b506103da7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b348015610a2a57600080fd5b50610412610a393660046140f9565b60096020526000908152604090205460ff1681565b348015610a5a57600080fd5b5061043360135481565b348015610a7057600080fd5b506017546104129060ff1681565b348015610a8a57600080fd5b50600f5461069e9067ffffffffffffffff808216916801000000000000000081048216917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041684565b348015610af157600080fd5b5061043360165481565b348015610b0757600080fd5b50610461610b16366004614309565b61235e565b348015610b2757600080fd5b50610433610b36366004614370565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b6d57600080fd5b50610461610b7c3660046140f9565b612416565b348015610b8d57600080fd5b50610461610b9c3660046140f9565b612524565b348015610bad57600080fd5b50600d546103da906001600160a01b031681565b348015610bcd57600080fd5b50601554610c02906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff93841681529290911660208301520161039d565b348015610c3757600080fd5b50610461610c463660046140f9565b612688565b348015610c5757600080fd5b506104616127d2565b348015610c6c57600080fd5b5061046161282a565b606060038054610c84906143a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb0906143a3565b8015610cfd5780601f10610cd257610100808354040283529160200191610cfd565b820191906000526020600020905b815481529060010190602001808311610ce057829003601f168201915b5050505050905090565b600033610d15818585612906565b60019150505b92915050565b33610d346005546001600160a01b031690565b6001600160a01b03161480610d535750600c546001600160a01b031633145b610da45760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f640000000000000000000000000000000060448201526064015b60405180910390fd5b620186a0610db160025490565b610dbc906001614425565b610dc6919061446b565b811015610e3b5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610d9b565b6103e8610e4760025490565b610e52906005614425565b610e5c919061446b565b811115610ed15760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e352520746f74616c20737570706c792e0000000000000000000000006064820152608401610d9b565b601355565b33610ee96005546001600160a01b031690565b6001600160a01b03161480610f085750600c546001600160a01b031633145b610f545760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b6001600160a01b038116610faa5760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610d9b565b600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600033610ff2858285612a5e565b610ffd858585612b08565b506001949350505050565b3361101b6005546001600160a01b031690565b6001600160a01b0316148061103a5750600c546001600160a01b031633145b6110865760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b604080516080810182526000606082015267ffffffffffffffff8581168252848116928201929092529082166020820152816110c2848661447f565b6110cc919061447f565b67ffffffffffffffff16606082018190526107d010158061111d5750600f54606082015167ffffffffffffffff78010000000000000000000000000000000000000000000000009092048216911611155b6111695760405162461bcd60e51b815260206004820152601260248201527f4b656570207461782062656c6f772031302500000000000000000000000000006044820152606401610d9b565b606081015160405167ffffffffffffffff90911681527fa02824f65350567bc405e202b741e7ca6274004a9feeb44149df72b8bd599c979060200160405180910390a18051600f80546020840151604085015160609095015167ffffffffffffffff90811678010000000000000000000000000000000000000000000000000277ffffffffffffffffffffffffffffffffffffffffffffffff96821670010000000000000000000000000000000002969096166fffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117919091179055505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273dac17f958d2ee523a2206206994597c13d831ec79060009082906370a0823190602401602060405180830381865afa1580156112e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611309919061449f565b9050600081116113815760405162461bcd60e51b815260206004820152602260248201527f416d6f756e742073686f756c642062652067726561746572207468616e207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152608401610d9b565b600b546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af11580156113ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141191906144b8565b505050565b336114296005546001600160a01b031690565b6001600160a01b031614806114485750600c546001600160a01b031633145b6114945760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b60005b82518110156114115760008382815181106114b4576114b46144d5565b6020026020010151905060006001600160a01b0316816001600160a01b0316036115205760405162461bcd60e51b815260206004820152600c60248201527f5a65726f204164647265737300000000000000000000000000000000000000006044820152606401610d9b565b826115a6577f00000000000000000000000048336d13aff6adf76c1cd4a008eb346cce663ed26001600160a01b0316816001600160a01b0316036115a65760405162461bcd60e51b815260206004820152601260248201527f43616e6e6f742072656d6f7665207061697200000000000000000000000000006044820152606401610d9b565b6001600160a01b038116600081815260076020908152604091829020805460ff19168715159081179091558251938452908301527f8f9f40630a1d139e6cf69b4f447ca47a36f10a017524efaa38252e516fa227ce910160405180910390a150600101611497565b6005546001600160a01b031633146116685760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d9b565b60005b81518110156116c65760006018600084848151811061168c5761168c6144d5565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010161166b565b5050565b6005546001600160a01b031633146117245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d9b565b6117306012600a614627565b6103e861173c60025490565b611747906001614425565b611751919061446b565b61175b919061446b565b816fffffffffffffffffffffffffffffffff1610156117bc5760405162461bcd60e51b815260206004820152600760248201527f546f6f206c6f77000000000000000000000000000000000000000000000000006044820152606401610d9b565b6117c86012600a614627565b6117e4906fffffffffffffffffffffffffffffffff8316614425565b601580547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691821790556040519081527f6710da7d4acedae09cb83751ae24c150719ef67dcbc1e02049f171d13c6b44e6906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610d159082908690611895908790614636565b612906565b6005546001600160a01b031633146118f45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d9b565b6116c68282612c5c565b336119116005546001600160a01b031690565b6001600160a01b031614806119305750600c546001600160a01b031633145b61197c5760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b60005b825181101561141157600083828151811061199c5761199c6144d5565b6020026020010151905060006001600160a01b0316816001600160a01b031603611a085760405162461bcd60e51b815260206004820152600c60248201527f5a65726f204164647265737300000000000000000000000000000000000000006044820152606401610d9b565b306001600160a01b03821603611a605760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420756e6578656d707420636f6e747261637400000000000000006044820152606401610d9b565b6001600160a01b038116600081815260066020908152604091829020805460ff19168715159081179091558251938452908301527f998cce27cbf44405c67eb636a634d5e2f2e6ff248b3d71fbbbb022f3c4c6dd2d910160405180910390a15060010161197f565b6005546001600160a01b03163314611b225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d9b565b611b2e6012600a614627565b6103e8611b3a60025490565b611b45906001614425565b611b4f919061446b565b611b59919061446b565b816fffffffffffffffffffffffffffffffff161015611bba5760405162461bcd60e51b815260206004820152600760248201527f546f6f206c6f77000000000000000000000000000000000000000000000000006044820152606401610d9b565b611bc66012600a614627565b611be2906fffffffffffffffffffffffffffffffff8316614425565b601580546fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000093821684021791829055604051929091041681527fde064515fae8f8bb6d8ff19d2c6ba704322def7494147d8a971266430ade078890602001611850565b6005546001600160a01b03163314611ca45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d9b565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b33611d196005546001600160a01b031690565b6001600160a01b03161480611d385750600c546001600160a01b031633145b611d845760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b60085460ff1615611dd75760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610d9b565b6008805460ff19166001179055436016819055601455565b33611e026005546001600160a01b031690565b6001600160a01b03161480611e215750600c546001600160a01b031633145b611e6d5760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b601280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560408051808201909152600080825260208201526000611eb460025490565b6fffffffffffffffffffffffffffffffff8116808452602084018190527001000000000000000000000000000000008102176015556040519091507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a15050565b33611f2c6005546001600160a01b031690565b6001600160a01b03161480611f4b5750600c546001600160a01b031633145b611f975760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b6001600160a01b038116611fed5760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610d9b565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b3361203a6005546001600160a01b031690565b6001600160a01b031614806120595750600c546001600160a01b031633145b6120a55760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b604080516080810182526000606082015267ffffffffffffffff8581168252848116928201929092529082166020820152816120e1848661447f565b6120eb919061447f565b67ffffffffffffffff16606082018190526107d010158061213c5750600e54606082015167ffffffffffffffff78010000000000000000000000000000000000000000000000009092048216911611155b6121885760405162461bcd60e51b815260206004820152601260248201527f4b656570207461782062656c6f772031302500000000000000000000000000006044820152606401610d9b565b606081015160405167ffffffffffffffff90911681527f5380a61520019ce8270d583f62f1b2b9f4f4372e1acaaf708f4865cecece05089060200160405180910390a18051600e80546020840151604085015160609095015167ffffffffffffffff90811678010000000000000000000000000000000000000000000000000277ffffffffffffffffffffffffffffffffffffffffffffffff96821670010000000000000000000000000000000002969096166fffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117919091179055505050565b606060048054610c84906143a3565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156123435760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610d9b565b610ffd8286868403612906565b600033610d15818585612b08565b6005546001600160a01b031633146123b85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d9b565b60005b81518110156116c6576001601860008484815181106123dc576123dc6144d5565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016123bb565b336124296005546001600160a01b031690565b6001600160a01b031614806124485750600c546001600160a01b031633145b6124945760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b6001600160a01b0381166124ea5760405162461bcd60e51b815260206004820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152606401610d9b565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6001600160a01b03811661257a5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d9b565b600a546001600160a01b031633148061259d5750600b546001600160a01b031633145b6125e95760405162461bcd60e51b815260206004820152600760248201527f4e6f7420646576000000000000000000000000000000000000000000000000006044820152606401610d9b565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015612649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266d919061449f565b600b549091506116c69083906001600160a01b031683612d1b565b6005546001600160a01b031633146126e25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d9b565b6001600160a01b03811661275e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610d9b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600b546040516000916001600160a01b03169047908381818185875af1925050503d806000811461281f576040519150601f19603f3d011682016040523d82523d6000602084013e612824565b606091505b50505050565b3361283d6005546001600160a01b031690565b6001600160a01b0316148061285c5750600c546001600160a01b031633145b6128a85760405162461bcd60e51b815260206004820152601060248201527f4e6f74206f776e6572206f72206d6f64000000000000000000000000000000006044820152606401610d9b565b60175460ff166128fa5760405162461bcd60e51b815260206004820152601160248201527f416c72656164792064697361626c6564210000000000000000000000000000006044820152606401610d9b565b6017805460ff19169055565b6001600160a01b0383166129815760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610d9b565b6001600160a01b0382166129fd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610d9b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146128245781811015612afb5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d9b565b6128248484848403612906565b6001600160a01b03831660009081526006602052604090205460ff16158015612b4a57506001600160a01b03821660009081526006602052604090205460ff16155b15612c51576001600160a01b03831660009081526018602052604090205460ff16158015612b9157506001600160a01b03821660009081526018602052604090205460ff16155b612bdd5760405162461bcd60e51b815260206004820152600360248201527f426f7400000000000000000000000000000000000000000000000000000000006044820152606401610d9b565b60085460ff16612c2f5760405162461bcd60e51b815260206004820152601260248201527f54726164696e67206e6f742061637469766500000000000000000000000000006044820152606401610d9b565b612c3a838383612d9b565b612c449082614649565b9050612c518383836132b3565b6114118383836136fe565b6001600160a01b038216612cb25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610d9b565b8060026000828254612cc49190614636565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526114119084906138ec565b60135430600090815260208190526040812054909111158015612dd757506001600160a01b03841660009081526009602052604090205460ff16155b8015612df15750436014546002612dee9190614636565b11155b15612dfe57612dfe6139d1565b6040805160808101825260008082526020808301829052828401829052606083018290526001600160a01b0387168252600990529182205460ff1615612eb3575060408051608081018252600f5467ffffffffffffffff8082168352680100000000000000008204811660208401527001000000000000000000000000000000008204811693830193909352780100000000000000000000000000000000000000000000000090049091166060820152612f45565b6001600160a01b03861660009081526009602052604090205460ff1615612f45575060408051608081018252600e5467ffffffffffffffff80821683526801000000000000000082048116602084015270010000000000000000000000000000000082048116938301939093527801000000000000000000000000000000000000000000000000900490911660608201525b606081015167ffffffffffffffff1615613298576040805160808101825260105469ffffffffffffffffffff80821683526a010000000000000000000082048116602084015274010000000000000000000000000000000000000000820416928201929092527e0100000000000000000000000000000000000000000000000000000000000090910460ff1615156060820152601654439003613057576001600160a01b03871660009081526009602052604090205460ff16156130225761271061301186607b614425565b61301b919061446b565b9250613081565b6001600160a01b03861660009081526009602052604090205460ff1615613052576127106130118661270f614425565b613081565b6060820151612710906130749067ffffffffffffffff1687614425565b61307e919061446b565b92505b633b9aca00826060015167ffffffffffffffff16836040015167ffffffffffffffff16856130af919061465c565b6130b9919061468e565b6130c3919061468e565b816020018181516130d491906146ce565b69ffffffffffffffffffff1690525060608201518251633b9aca009167ffffffffffffffff9081169161310891168661465c565b613112919061468e565b61311c919061468e565b8151829061312b9083906146ce565b69ffffffffffffffffffff1690525060608201516020830151633b9aca009167ffffffffffffffff9081169161316291168661465c565b61316c919061468e565b613176919061468e565b8160400181815161318791906146ce565b69ffffffffffffffffffff90811690915282516010805460208601516040870151606088015115157e01000000000000000000000000000000000000000000000000000000000000027fff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9187167401000000000000000000000000000000000000000002919091167fff0000000000000000000000ffffffffffffffffffffffffffffffffffffffff9287166a0100000000000000000000027fffffffffffffffffffffffff000000000000000000000000000000000000000090941695909616949094179190911716929092171790555061329687306fffffffffffffffffffffffffffffffff86166136fe565b505b506fffffffffffffffffffffffffffffffff16949350505050565b601254610100900460ff1615611411576001600160a01b0382811660009081526007602090815260408083205483835281842054825180840184526015546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000090910416818601529589168552600990935292205460ff928316939192168015613341575082155b1561341d5780516fffffffffffffffffffffffffffffffff168411156133a95760405162461bcd60e51b815260206004820152600760248201527f4d61782054786e000000000000000000000000000000000000000000000000006044820152606401610d9b565b60208101516fffffffffffffffffffffffffffffffff166133ca8386614636565b11156134185760405162461bcd60e51b815260206004820152600a60248201527f4d61782057616c6c6574000000000000000000000000000000000000000000006044820152606401610d9b565b61353a565b6001600160a01b03851660009081526009602052604090205460ff16801561345e57506001600160a01b03861660009081526007602052604090205460ff16155b156134c65780516fffffffffffffffffffffffffffffffff168411156134185760405162461bcd60e51b815260206004820152600760248201527f4d61782054786e000000000000000000000000000000000000000000000000006044820152606401610d9b565b8261353a5760208101516fffffffffffffffffffffffffffffffff166134ec8386614636565b111561353a5760405162461bcd60e51b815260206004820152600a60248201527f4d61782057616c6c6574000000000000000000000000000000000000000000006044820152606401610d9b565b60175460ff16156136f6577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316856001600160a01b0316141580156135b957507f00000000000000000000000048336d13aff6adf76c1cd4a008eb346cce663ed26001600160a01b0316856001600160a01b031614155b156136f6573260009081526011602052604090205443906135db90601e614636565b106136285760405162461bcd60e51b815260206004820152600e60248201527f5472616e736665722044656c61790000000000000000000000000000000000006044820152606401610d9b565b6001600160a01b0380861660009081526011602052604080822043908190553283529120557f00000000000000000000000048336d13aff6adf76c1cd4a008eb346cce663ed28116908716036136f657326001600160a01b038616146136f65760405162461bcd60e51b815260206004820152602160248201527f6e6f20627579696e6720746f2065787465726e616c2077616c6c65747320796560448201527f74000000000000000000000000000000000000000000000000000000000000006064820152608401610d9b565b505050505050565b6001600160a01b03831661377a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d9b565b6001600160a01b0382166137f65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d9b565b6001600160a01b038316600090815260208190526040902054818110156138855760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610d9b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b6000613941826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613d499092919063ffffffff16565b805190915015611411578080602001905181019061395f91906144b8565b6114115760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610d9b565b306000908152602081905260408120546040805160808101825260105469ffffffffffffffffffff8082168084526a010000000000000000000083048216602085018190527401000000000000000000000000000000000000000084049092169484018590527e0100000000000000000000000000000000000000000000000000000000000090920460ff1615156060840152939450909260009291613a76916146ce565b613a8091906146ce565b69ffffffffffffffffffff169050821580613a99575080155b15613aa357505050565b601354613ab190600a614425565b831115613ac957601354613ac690600a614425565b92505b602082015169ffffffffffffffffffff1615613bce57600081836020015169ffffffffffffffffffff1685613afe9190614425565b613b08919061446b565b9050613b35307f00000000000000000000000048336d13aff6adf76c1cd4a008eb346cce663ed2836136fe565b7f00000000000000000000000048336d13aff6adf76c1cd4a008eb346cce663ed26001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613b9057600080fd5b505af1925050508015613ba1575060015b50613bac8185614649565b9350826020015169ffffffffffffffffffff1682613bca9190614649565b9150505b8215613cd957613bdd83613d60565b6040820151479060009069ffffffffffffffffffff1615613c7557600b5460408501516001600160a01b03909116908490613c249069ffffffffffffffffffff1685614425565b613c2e919061446b565b604051600081818185875af1925050503d8060008114613c6a576040519150601f19603f3d011682016040523d82523d6000602084013e613c6f565b606091505b50909150505b4791508115613cd657600a546040516001600160a01b03909116908390600081818185875af1925050503d8060008114613ccb576040519150601f19603f3d011682016040523d82523d6000602084013e613cd0565b606091505b50909150505b50505b5060006020820181905280825260408201526010805460609092015115157e01000000000000000000000000000000000000000000000000000000000000027fff000000000000000000000000000000000000000000000000000000000000009092169190911790555043601455565b6060613d588484600085613e95565b949350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d9557613d956144d5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110613de957613de96144d5565b6001600160a01b0392831660209182029290920101526040517f791ac9470000000000000000000000000000000000000000000000000000000081527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac94790613e679085906000908690309042906004016146f0565b600060405180830381600087803b158015613e8157600080fd5b505af11580156136f6573d6000803e3d6000fd5b606082471015613f0d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610d9b565b600080866001600160a01b03168587604051613f299190614762565b60006040518083038185875af1925050503d8060008114613f66576040519150601f19603f3d011682016040523d82523d6000602084013e613f6b565b606091505b5091509150613f7c87838387613f87565b979650505050505050565b60608315613ff6578251600003613fef576001600160a01b0385163b613fef5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d9b565b5081613d58565b613d58838381511561400b5781518083602001fd5b8060405162461bcd60e51b8152600401610d9b9190614049565b60005b83811015614040578181015183820152602001614028565b50506000910152565b6020815260008251806020840152614068816040850160208701614025565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b80356001600160a01b03811681146140b157600080fd5b919050565b600080604083850312156140c957600080fd5b6140d28361409a565b946020939093013593505050565b6000602082840312156140f257600080fd5b5035919050565b60006020828403121561410b57600080fd5b6141148261409a565b9392505050565b60008060006060848603121561413057600080fd5b6141398461409a565b92506141476020850161409a565b929592945050506040919091013590565b803567ffffffffffffffff811681146140b157600080fd5b60008060006060848603121561418557600080fd5b61418e84614158565b925061419c60208501614158565b91506141aa60408501614158565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126141f357600080fd5b813567ffffffffffffffff81111561420d5761420d6141b3565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811067ffffffffffffffff82111715614258576142586141b3565b60405291825260208185018101929081018684111561427657600080fd5b6020860192505b8383101561429c5761428e8361409a565b81526020928301920161427d565b5095945050505050565b80151581146142b457600080fd5b50565b600080604083850312156142ca57600080fd5b823567ffffffffffffffff8111156142e157600080fd5b6142ed858286016141e2565b92505060208301356142fe816142a6565b809150509250929050565b60006020828403121561431b57600080fd5b813567ffffffffffffffff81111561433257600080fd5b613d58848285016141e2565b60006020828403121561435057600080fd5b81356fffffffffffffffffffffffffffffffff8116811461411457600080fd5b6000806040838503121561438357600080fd5b61438c8361409a565b915061439a6020840161409a565b90509250929050565b600181811c908216806143b757607f821691505b6020821081036143f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610d1b57610d1b6143f6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261447a5761447a61443c565b500490565b67ffffffffffffffff8181168382160190811115610d1b57610d1b6143f6565b6000602082840312156144b157600080fd5b5051919050565b6000602082840312156144ca57600080fd5b8151614114816142a6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6001815b600184111561453f57808504811115614523576145236143f6565b600184161561453157908102905b60019390931c928002614508565b935093915050565b60008261455657506001610d1b565b8161456357506000610d1b565b816001811461457957600281146145835761459f565b6001915050610d1b565b60ff841115614594576145946143f6565b50506001821b610d1b565b5060208310610133831016604e8410600b84101617156145c2575081810a610d1b565b6145ed7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614504565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561461f5761461f6143f6565b029392505050565b600061411460ff841683614547565b80820180821115610d1b57610d1b6143f6565b81810381811115610d1b57610d1b6143f6565b6fffffffffffffffffffffffffffffffff8181168382160290811690818114614687576146876143f6565b5092915050565b60006fffffffffffffffffffffffffffffffff8316806146b0576146b061443c565b806fffffffffffffffffffffffffffffffff84160491505092915050565b69ffffffffffffffffffff8181168382160190811115610d1b57610d1b6143f6565b600060a0820187835286602084015260a0604084015280865180835260c08501915060208801925060005b818110156147425783516001600160a01b031683526020938401939092019160010161471b565b50506001600160a01b039590951660608401525050608001529392505050565b60008251614774818460208701614025565b919091019291505056fea264697066735822122076f448e7b3ea19cf9b1b633dfc2f7d53c6abce5d78b6b4722a55e395e30319db64736f6c634300081a0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.