Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
0x60808060 | 21767470 | 34 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
DeflationaryToken
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // Factory: CreateMyToken (https://www.createmytoken.com) pragma solidity 0.8.28; import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import { ERC20TokenMetadata } from "@src/tokens/extensions/ERC20TokenMetadata.sol"; import { ERC20Base } from "@src/vendor/oz/token/ERC20/ERC20.sol"; import { Pausable } from "@src/vendor/oz/utils/Pausable.sol"; import { Ownable } from "@src/vendor/oz/access/Ownable.sol"; import { IUniswapV2Router02 } from "@vendor/uniswap/v2/IUniswapV2Router02.sol"; import { IUniswapV2Factory } from "@vendor/uniswap/v2/IUniswapV2Factory.sol"; uint256 constant DENOMINATOR = 100_00; contract DeflationaryToken is Initializable, ERC20TokenMetadata, ERC20Base, Ownable { IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; uint256 public maxWalletAmount; uint256 public maxTxAmount; uint256 public minimumTokensBeforeSwap; address private liquidityWallet; address private operationsWallet; address private burnWallet; struct FeeDataStorage { // Liquidity Fee uint8 liquidityFeeOnBuy; uint8 liquidityFeeOnSell; // Marketing/Operations Fee uint8 operationsFeeOnBuy; uint8 operationsFeeOnSell; // Burn Fee uint8 burnFeeOnBuy; uint8 burnFeeOnSell; // Apply fee on transfers? bool applyTaxOnTransfer; } // Base taxes FeeDataStorage public baseFeeData; mapping(address => bool) private _isBlocked; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcludedFromMaxTransactionLimit; mapping(address => bool) private _isExcludedFromMaxWalletLimit; mapping(address => bool) public automatedMarketMakerPairs; // Ephemeral START bool private _swapping; uint8 private _liquidityFee; uint8 private _operationsFee; uint8 private _burnFee; uint8 private _totalFee; // Ephemeral END receive() external payable {} function initialize( address _owner, address _mintTarget, string memory _name, string memory _symbol, uint8 _decimals, uint256 _initialSupply, address _routerV2, FeeDataStorage calldata baseTaxes, address liquidityWallet_, address operationsWallet_, address burnWallet_, uint256 maxWalletPct, uint256 maxTxPct, address[] calldata _prep, string calldata tokenUri_ ) external initializer { _transferOwnership(_owner); ERC20Base.__ERC20_init(_name, _symbol, _decimals); maxWalletAmount = (_initialSupply * maxWalletPct) / DENOMINATOR; maxTxAmount = (_initialSupply * maxTxPct) / DENOMINATOR; minimumTokensBeforeSwap = (_initialSupply) / (DENOMINATOR * 100); // 0.0001% baseFeeData = baseTaxes; liquidityWallet = liquidityWallet_; operationsWallet = operationsWallet_; burnWallet = burnWallet_; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_routerV2); address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair( address(this), _uniswapV2Router.WETH() ); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; automatedMarketMakerPairs[_uniswapV2Pair] = true; _isExcludedFromFee[_owner] = true; _isExcludedFromFee[_mintTarget] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromMaxTransactionLimit[address(this)] = true; _isExcludedFromMaxTransactionLimit[_owner] = true; _isExcludedFromMaxTransactionLimit[_mintTarget] = true; _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[_owner] = true; _isExcludedFromMaxWalletLimit[_mintTarget] = true; for (uint256 i = 0; i < _prep.length; ++i) { _isExcludedFromMaxWalletLimit[_prep[i]] = true; _isExcludedFromMaxTransactionLimit[_prep[i]] = true; _isExcludedFromFee[_prep[i]] = true; } _mint(_mintTarget, _initialSupply); _setTokenUri(tokenUri_); } function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner { require( automatedMarketMakerPairs[pair] != value, "TOKEN: Automated market maker pair is already set to that value" ); automatedMarketMakerPairs[pair] = value; } function excludeFromFees(address account, bool excluded) external onlyOwner { require(_isExcludedFromFee[account] != excluded, "TOKEN: Account is already the value of 'excluded'"); _isExcludedFromFee[account] = excluded; } function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner { require( _isExcludedFromMaxTransactionLimit[account] != excluded, "TOKEN: Account is already the value of 'excluded'" ); _isExcludedFromMaxTransactionLimit[account] = excluded; } function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner { require( _isExcludedFromMaxWalletLimit[account] != excluded, "TOKEN: Account is already the value of 'excluded'" ); _isExcludedFromMaxWalletLimit[account] = excluded; } function blockAccount(address account) external onlyOwner { require(!_isBlocked[account], "TOKEN: Account is already blocked"); _isBlocked[account] = true; } function unblockAccount(address account) external onlyOwner { require(_isBlocked[account], "TOKEN: Account is not blocked"); _isBlocked[account] = false; } function setWallets(address newLiquidityWallet, address newOperationsWallet) external onlyOwner { if (liquidityWallet != newLiquidityWallet) { require(newLiquidityWallet != address(0), "TOKEN: The liquidityWallet cannot be 0"); liquidityWallet = newLiquidityWallet; } if (operationsWallet != newOperationsWallet) { require(newOperationsWallet != address(0), "TOKEN: The operationsWallet cannot be 0"); operationsWallet = newOperationsWallet; } } function setFeesData(FeeDataStorage calldata taxData) external onlyOwner { require( (taxData.liquidityFeeOnBuy + taxData.operationsFeeOnBuy + taxData.burnFeeOnBuy) <= 25, "TOKEN: Tax exceeds maximum value of 30%" ); require( (taxData.liquidityFeeOnSell + taxData.operationsFeeOnSell + taxData.burnFeeOnSell) <= 25, "TOKEN: Tax exceeds maximum value of 30%" ); baseFeeData = taxData; } function setMaxTransactionAmount(uint256 newValue) external onlyOwner { require(newValue != maxTxAmount, "TOKEN: Cannot update maxTxAmount to same value"); maxTxAmount = newValue; } function setMaxWalletAmount(uint256 newValue) external onlyOwner { require(newValue != maxWalletAmount, "TOKEN: Cannot update maxWalletAmount to same value"); maxWalletAmount = newValue; } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require(newValue != minimumTokensBeforeSwap, "TOKEN: Cannot update minimumTokensBeforeSwap to same value"); minimumTokensBeforeSwap = newValue; } function setTokenURI(string calldata tokenUri_) public onlyOwner { _setTokenUri(tokenUri_); } function _update(address from, address to, uint256 amount) internal override { if (amount == 0) { super._update(from, to, 0); return; } bool isBuyFromLp = automatedMarketMakerPairs[from]; bool isSellToLp = automatedMarketMakerPairs[to]; require(!_isBlocked[to], "TOKEN: Account is blocked"); require(!_isBlocked[from], "TOKEN: Account is blocked"); if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) { require(amount <= maxTxAmount, "TOKEN: Buy amount exceeds the maxTxBuyAmount."); } if (!_isExcludedFromMaxWalletLimit[to]) { require( (balanceOf(to) + amount) <= maxWalletAmount, "TOKEN: Expected wallet amount exceeds the maxWalletAmount." ); } _adjustTaxes(isBuyFromLp, isSellToLp); bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap; if (canSwap && !_swapping && _totalFee > 0 && isSellToLp) { _swapping = true; _swapAndLiquify(); _swapping = false; } bool takeFee = !_swapping; if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } if (takeFee && _totalFee > 0) { uint256 _liquidityFeeAmount = (amount * _liquidityFee) / 100; uint256 _operationsFeeAmount = (amount * _operationsFee) / 100; uint256 _burnFeeAmount = (amount * _burnFee) / 100; if (_liquidityFeeAmount > 0) { super._update(from, address(this), _liquidityFeeAmount); } if (_operationsFeeAmount > 0) { super._update(from, operationsWallet, _operationsFeeAmount); } if (_burnFeeAmount > 0) { super._update(from, burnWallet, _burnFeeAmount); } amount = amount - _liquidityFeeAmount - _operationsFeeAmount - _burnFeeAmount; } super._update(from, to, amount); } function _adjustTaxes(bool isBuyFromLp, bool isSellToLp) private { _liquidityFee = 0; _operationsFee = 0; _burnFee = 0; if (isBuyFromLp) { _liquidityFee = baseFeeData.liquidityFeeOnBuy; _operationsFee = baseFeeData.operationsFeeOnBuy; _burnFee = baseFeeData.burnFeeOnBuy; } if (isSellToLp) { _liquidityFee = baseFeeData.liquidityFeeOnSell; _operationsFee = baseFeeData.operationsFeeOnSell; _burnFee = baseFeeData.burnFeeOnSell; } if (!isSellToLp && !isBuyFromLp && baseFeeData.applyTaxOnTransfer) { _liquidityFee = baseFeeData.liquidityFeeOnBuy; _operationsFee = baseFeeData.operationsFeeOnBuy; _burnFee = baseFeeData.burnFeeOnBuy; } _totalFee = _liquidityFee + _operationsFee + _burnFee; } function _swapAndLiquify() private { uint256 contractBalance = balanceOf(address(this)); uint256 amountToLiquify = contractBalance / 2; uint256 amountToSwap = contractBalance - amountToLiquify; if (amountToLiquify > 0) { _swapTokensForETH(amountToSwap); _addLiquidity(amountToLiquify, address(this).balance); } } function _swapTokensForETH(uint256 tokenAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 1, // accept any amount of ETH path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{ value: ethAmount }( address(this), tokenAmount, 1, // slippage is unavoidable 1, // slippage is unavoidable liquidityWallet, block.timestamp ); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol) pragma solidity ^0.8.20; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in * case an upgrade adds a module that needs to be initialized. * * For example: * * [.hljs-theme-light.nopadding] * ```solidity * contract MyToken is ERC20Upgradeable { * function initialize() initializer public { * __ERC20_init("MyToken", "MTK"); * } * } * * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { * function initializeV2() reinitializer(2) public { * __ERC20Permit_init("MyToken"); * } * } * ``` * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() { * _disableInitializers(); * } * ``` * ==== */ abstract contract Initializable { /** * @dev Storage of the initializable contract. * * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions * when using with upgradeable contracts. * * @custom:storage-location erc7201:openzeppelin.storage.Initializable */ struct InitializableStorage { /** * @dev Indicates that the contract has been initialized. */ uint64 _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool _initializing; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00; /** * @dev The contract is already initialized. */ error InvalidInitialization(); /** * @dev The contract is not initializing. */ error NotInitializing(); /** * @dev Triggered when the contract has been initialized or reinitialized. */ event Initialized(uint64 version); /** * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, * `onlyInitializing` functions can be used to initialize parent contracts. * * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in * production. * * Emits an {Initialized} event. */ modifier initializer() { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); // Cache values to avoid duplicated sloads bool isTopLevelCall = !$._initializing; uint64 initialized = $._initialized; // Allowed calls: // - initialSetup: the contract is not in the initializing state and no previous version was // initialized // - construction: the contract is initialized at version 1 (no reininitialization) and the // current contract is just being deployed bool initialSetup = initialized == 0 && isTopLevelCall; bool construction = initialized == 1 && address(this).code.length == 0; if (!initialSetup && !construction) { revert InvalidInitialization(); } $._initialized = 1; if (isTopLevelCall) { $._initializing = true; } _; if (isTopLevelCall) { $._initializing = false; emit Initialized(1); } } /** * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be * used to initialize parent contracts. * * A reinitializer may be used after the original initialization step. This is essential to configure modules that * are added through upgrades and that require initialization. * * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer` * cannot be nested. If one is invoked in the context of another, execution will revert. * * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in * a contract, executing them in the right order is up to the developer or operator. * * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization. * * Emits an {Initialized} event. */ modifier reinitializer(uint64 version) { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); if ($._initializing || $._initialized >= version) { revert InvalidInitialization(); } $._initialized = version; $._initializing = true; _; $._initializing = false; emit Initialized(version); } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} and {reinitializer} modifiers, directly or indirectly. */ modifier onlyInitializing() { _checkInitializing(); _; } /** * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}. */ function _checkInitializing() internal view virtual { if (!_isInitializing()) { revert NotInitializing(); } } /** * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized * to any version. It is recommended to use this to lock implementation contracts that are designed to be called * through proxies. * * Emits an {Initialized} event the first time it is successfully executed. */ function _disableInitializers() internal virtual { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); if ($._initializing) { revert InvalidInitialization(); } if ($._initialized != type(uint64).max) { $._initialized = type(uint64).max; emit Initialized(type(uint64).max); } } /** * @dev Returns the highest version that has been initialized. See {reinitializer}. */ function _getInitializedVersion() internal view returns (uint64) { return _getInitializableStorage()._initialized; } /** * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}. */ function _isInitializing() internal view returns (bool) { return _getInitializableStorage()._initializing; } /** * @dev Returns a pointer to the storage namespace. */ // solhint-disable-next-line var-name-mixedcase function _getInitializableStorage() private pure returns (InitializableStorage storage $) { assembly { $.slot := INITIALIZABLE_STORAGE } } }
// SPDX-License-Identifier: MIT // CreateMyToken Contracts (v2.0.0) pragma solidity ^0.8.20; import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; /** * @dev Extension of {ERC20} that adds token metadata. */ abstract contract ERC20TokenMetadata is Initializable { /// @custom:storage-location erc7201:createmytoken.storage.ERC20TokenMetadata struct ERC20TokenMetadataStorage { string _tokenUri; } // keccak256(abi.encode(uint256(keccak256("createmytoken.storage.ERC20TokenMetadata")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant ERC20TokenMetadataStorageLocation = 0x7400605485a8d5e38130aac5d816159438528233b60839d2fedb32e71a453600; function _getERC20TokenMetadataStorage() private pure returns (ERC20TokenMetadataStorage storage $) { assembly { $.slot := ERC20TokenMetadataStorageLocation } } function __ERC20TokenMetadata_init(string calldata tokenUri_) internal onlyInitializing { _setTokenUri(tokenUri_); } function tokenURI() public view virtual returns (string memory) { ERC20TokenMetadataStorage storage $ = _getERC20TokenMetadataStorage(); return $._tokenUri; } function contractURI() public view virtual returns (string memory) { ERC20TokenMetadataStorage storage $ = _getERC20TokenMetadataStorage(); return $._tokenUri; } function _setTokenUri(string calldata tokenUri_) internal { ERC20TokenMetadataStorage storage $ = _getERC20TokenMetadataStorage(); $._tokenUri = tokenUri_; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/ERC20.sol) // Modified by CreateMyToken pragma solidity ^0.8.20; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import { IERC20Metadata } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import { IERC20Errors } from "@openzeppelin/contracts/interfaces/draft-IERC6093.sol"; import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import { Context } from "@openzeppelin/contracts/utils/Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC-20 * applications. * * @dev Modified to include custom decimals */ abstract contract ERC20Base is Initializable, Context, IERC20, IERC20Metadata, IERC20Errors { /// @custom:storage-location erc7201:openzeppelin.storage.ERC20 struct ERC20Storage { mapping(address account => uint256) _balances; mapping(address account => mapping(address spender => uint256)) _allowances; uint256 _totalSupply; string _name; string _symbol; uint8 _decimals; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.ERC20")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant ERC20StorageLocation = 0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00; function _getERC20Storage() private pure returns (ERC20Storage storage $) { assembly { $.slot := ERC20StorageLocation } } function __ERC20_init(string memory name_, string memory symbol_, uint8 decimals_) internal onlyInitializing { ERC20Storage storage $ = _getERC20Storage(); $._name = name_; $._symbol = symbol_; $._decimals = decimals_; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { ERC20Storage storage $ = _getERC20Storage(); return $._name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { ERC20Storage storage $ = _getERC20Storage(); 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 returns (uint8) { ERC20Storage storage $ = _getERC20Storage(); return $._decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { ERC20Storage storage $ = _getERC20Storage(); return $._totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual returns (uint256) { ERC20Storage storage $ = _getERC20Storage(); return $._balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { ERC20Storage storage $ = _getERC20Storage(); return $._allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` 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 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * Skips emitting an {Approval} event indicating an allowance update. This is not * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. * * 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 `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` 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. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { ERC20Storage storage $ = _getERC20Storage(); if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows $._totalSupply += value; } else { uint256 fromBalance = $._balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. $._balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. $._totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. $._balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` 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. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * * ```solidity * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { ERC20Storage storage $ = _getERC20Storage(); if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } $._allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner` s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance < type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol) pragma solidity ^0.8.20; import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import { Context } from "@openzeppelin/contracts/utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Initializable, Context { /// @custom:storage-location erc7201:openzeppelin.storage.Pausable struct PausableStorage { bool _paused; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Pausable")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant PausableStorageLocation = 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300; function _getPausableStorage() private pure returns (PausableStorage storage $) { assembly { $.slot := PausableStorageLocation } } /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); /** * @dev The operation failed because the contract is paused. */ error EnforcedPause(); /** * @dev The operation failed because the contract is not paused. */ error ExpectedPause(); /** * @dev Initializes the contract in unpaused state. */ function __Pausable_init() internal onlyInitializing { __Pausable_init_unchained(); } function __Pausable_init_unchained() internal onlyInitializing { PausableStorage storage $ = _getPausableStorage(); $._paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { PausableStorage storage $ = _getPausableStorage(); return $._paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { if (paused()) { revert EnforcedPause(); } } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { if (!paused()) { revert ExpectedPause(); } } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { PausableStorage storage $ = _getPausableStorage(); $._paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { PausableStorage storage $ = _getPausableStorage(); $._paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import { Context } from "@openzeppelin/contracts/utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Initializable, Context { /// @custom:storage-location erc7201:openzeppelin.storage.Ownable struct OwnableStorage { address _owner; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Ownable")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300; function _getOwnableStorage() private pure returns (OwnableStorage storage $) { assembly { $.slot := OwnableStorageLocation } } /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ function __Ownable_init(address initialOwner) internal onlyInitializing { __Ownable_init_unchained(initialOwner); } function __Ownable_init_unchained(address initialOwner) internal onlyInitializing { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { OwnableStorage storage $ = _getOwnableStorage(); return $._owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { OwnableStorage storage $ = _getOwnableStorage(); address oldOwner = $._owner; $._owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function swapTokensForExactETH( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactTokensForETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapETHForExactTokens( uint amountOut, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.20; import {IERC20} from "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC-20 standard. */ 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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol) pragma solidity ^0.8.20; /** * @dev Standard ERC-20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Standard ERC-721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. * Used in balance queries. * @param owner Address of the current owner of a token. */ error ERC721InvalidOwner(address owner); /** * @dev Indicates a `tokenId` whose `owner` is the zero address. * @param tokenId Identifier number of a token. */ error ERC721NonexistentToken(uint256 tokenId); /** * @dev Indicates an error related to the ownership over a particular token. Used in transfers. * @param sender Address whose tokens are being transferred. * @param tokenId Identifier number of a token. * @param owner Address of the current owner of a token. */ error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC721InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC721InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param tokenId Identifier number of a token. */ error ERC721InsufficientApproval(address operator, uint256 tokenId); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC721InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC721InvalidOperator(address operator); } /** * @dev Standard ERC-1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens. */ interface IERC1155Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. * @param tokenId Identifier number of a token. */ error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC1155InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC1155InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param owner Address of the current owner of a token. */ error ERC1155MissingApprovalForAll(address operator, address owner); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC1155InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC1155InvalidOperator(address operator); /** * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. * Used in batch transfers. * @param idsLength Length of the array of token identifiers * @param valuesLength Length of the array of token amounts */ error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
{ "remappings": [ "forge-std/=node_modules/forge-std/src/", "@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/", "@solady/=node_modules/solady/src/", "@src/=contracts/", "@vendor/=contracts/vendor/", "@superchain/=contracts/superchain/", "solady/=node_modules/solady/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": true, "bytecodeHash": "none", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "evmVersion": "paris", "viaIR": true, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseFeeData","outputs":[{"internalType":"uint8","name":"liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"operationsFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"operationsFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"burnFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"burnFeeOnSell","type":"uint8"},{"internalType":"bool","name":"applyTaxOnTransfer","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_mintTarget","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"address","name":"_routerV2","type":"address"},{"components":[{"internalType":"uint8","name":"liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"operationsFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"operationsFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"burnFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"burnFeeOnSell","type":"uint8"},{"internalType":"bool","name":"applyTaxOnTransfer","type":"bool"}],"internalType":"struct DeflationaryToken.FeeDataStorage","name":"baseTaxes","type":"tuple"},{"internalType":"address","name":"liquidityWallet_","type":"address"},{"internalType":"address","name":"operationsWallet_","type":"address"},{"internalType":"address","name":"burnWallet_","type":"address"},{"internalType":"uint256","name":"maxWalletPct","type":"uint256"},{"internalType":"uint256","name":"maxTxPct","type":"uint256"},{"internalType":"address[]","name":"_prep","type":"address[]"},{"internalType":"string","name":"tokenUri_","type":"string"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint8","name":"liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"operationsFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"operationsFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"burnFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"burnFeeOnSell","type":"uint8"},{"internalType":"bool","name":"applyTaxOnTransfer","type":"bool"}],"internalType":"struct DeflationaryToken.FeeDataStorage","name":"taxData","type":"tuple"}],"name":"setFeesData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tokenUri_","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newOperationsWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080806040523460155761311c908161001b8239f35b600080fdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806306fdde031461194c578063095ea7b3146119265780631694505e146118fd57806318160ddd146118d25780631e293c101461184c57806323b872dd1461176857806327a14fc2146116de578063313ce5671461169e5780633453985c146116395780633c130d90146101ea57806349bd5a5e146116105780634d78fdc61461157257806370a082311461152b578063715018a6146114c1578063781edb3c1461145e5780637c0a893d146113b457806384b92c5e1461124c578063880bcbc1146111e95780638c0b5e22146111cb5780638da5cb5b1461119557806395d89b411461109e5780639a7a23d614610fd2578063a9059cbb14610fa1578063aa4bde2814610f83578063aee50b1e14610eee578063b62496f514610eaf578063c024666814610e4c578063cc3f2cf7146103d0578063d2d7ad83146103b2578063d3f6a15714610279578063dd62ed3e14610230578063e0df5b6f146101ef578063e8a3d485146101ea5763f2fde38b0361000e57346101e55760203660031901126101e5576101af611a57565b6101b7611e43565b6001600160a01b038116156101cf5761001990611eba565b631e4fbdf760e01b600052600060045260246000fd5b600080fd5b611a83565b346101e55760203660031901126101e5576004356001600160401b0381116101e557610222610019913690600401611c24565b9061022b611e43565b611f10565b346101e55760403660031901126101e557610249611a57565b61025a610254611a6d565b91611b74565b9060018060a01b03166000526020526020604060002054604051908152f35b346101e55760403660031901126101e557610292611a57565b61029a611a6d565b906102a3611e43565b6005546001600160a01b03918216918116829003610343575b50506006546001600160a01b039182169181168290036102d857005b81156102ee576001600160a01b03191617600655005b60405162461bcd60e51b815260206004820152602760248201527f544f4b454e3a20546865206f7065726174696f6e7357616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608490fd5b811561035e576001600160a01b0319161760055581806102bc565b60405162461bcd60e51b815260206004820152602660248201527f544f4b454e3a20546865206c697175696469747957616c6c65742063616e6e6f60448201526507420626520360d41b6064820152608490fd5b346101e55760003660031901126101e5576020600454604051908152f35b346101e5576102a03660031901126101e5576103ea611a57565b6103f2611a6d565b6044356001600160401b0381116101e557610411903690600401611bce565b906064356001600160401b0381116101e557610431903690600401611bce565b926084359060ff821682036101e55760c4356001600160a01b03811681036101e55760e03660e31901126101e5576101c435906001600160a01b03821682036101e5576101e435906001600160a01b03821682036101e557610204356001600160a01b03811681036101e55761026435926001600160401b0384116101e557366023850112156101e5576001600160401b038460040135116101e5576024840194366024866004013560051b870101116101e557610284356001600160401b0381116101e557610505903690600401611c24565b98909b6000805160206130f0833981519152549b8c6001600160401b038116159081610e3c575b6001600160401b03166001149081610e32575b159081610e29575b50610e185760018d6001600160401b031916176000805160206130f08339815191525560ff8d60401c1615610deb575b6105808a611eba565b60ff6000805160206130f08339815191525460401c1615610dda578051906001600160401b038211610ccf576105c460008051602061303083398151915254611c51565b601f8111610d68575b50602090601f8311600114610ce5576105ff929160009183610bcc575b50508160011b916000199060031b1c19161790565b600080516020613030833981519152555b8051906001600160401b038211610ccf5761063960008051602061307083398151915254611c51565b601f8111610c5d575b50602090601f8311600114610bd75791806106779260ff9594600092610bcc5750508160011b916000199060031b1c19161790565b600080516020613070833981519152555b1660ff197f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace055416177f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace05556127106106e46102243560a435611dd7565b046002556127106106fa6102443560a435611dd7565b04600355620f424060a4350460045560e43560ff811681036101e5578061072c915060ff1660ff196008541617600855565b6101043560ff811681036101e5576008805461ff00191691811b61ff00169190911790556101243560ff811681036101e5578061077d915062ff00006008549160101b169062ff0000191617600855565b6101443560ff811681036101e557806107ac915063ff0000006008549160181b169063ff000000191617600855565b6101643560ff811681036101e557806107db915060ff60201b6008549160201b169060ff60201b191617600855565b6101843560ff811681036101e5576008546101a4358015158091036101e55766ff00000000000065ff00000000009160301b169260281b169066ffff00000000001916171760085560018060a01b03166001600160601b0360a01b600554161760055560018060a01b03166001600160601b0360a01b600654161760065560018060a01b03166001600160601b0360a01b60075416176007556040519063c45a015560e01b825260208260048160018060a01b0385165afa918215610b8257600092610bab575b506040516315ab88c960e31b8152916020836004816001600160a01b0386165afa908115610b825760446020926000958691610b8e575b506040516364e329cb60e11b81523060048201526001600160a01b0391821660248201529586938492165af1918215610b8257600092610b51575b50600080546001600160a01b03199081166001600160a01b03938416178255600180549091169383169384178155838252600d60209081526040808420805460ff199081168517909155988516808552600a835281852080548b16851790558b861680865282862080548c16861790553080875283872080548d1687179055600b855283872080548d168717905582875283872080548d168717905581875283872080548d1687179055978652600c90935281852080548b16851790558454909516845280842080548a16841790559483528483208054891683179055928252838220805488168217905582825292812080549096169092179094555b81600401358110610ab15750505015610a9b5760ff9361022b610a379360a43590612164565b60401c1615610a4257005b68ff0000000000000000196000805160206130f083398151915254166000805160206130f0833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b600052600060045260246000fd5b6001906001600160a01b03610ad3610ace83600487013588611e09565b611e2f565b16600052600c60205260406000208260ff19825416179055818060a01b03610b03610ace83866004013588611e09565b16600052600b60205260406000208260ff19825416179055818060a01b03610b33610ace83866004013588611e09565b16600052600a60205260406000208260ff1982541617905501610a11565b610b7491925060203d602011610b7b575b610b6c8183611bad565b810190611dea565b9089610914565b503d610b62565b6040513d6000823e3d90fd5b610ba59150843d8611610b7b57610b6c8183611bad565b8d6108d9565b610bc591925060203d602011610b7b57610b6c8183611bad565b90896108a2565b0151905038806105ea565b90601f19831691600080516020613070833981519152600052816000209260005b818110610c45575091600193918560ff97969410610c2c575b505050811b0160008051602061307083398151915255610688565b015160001960f88460031b161c191690558f8080610c11565b92936020600181928786015181550195019301610bf8565b6000805160206130708339815191526000527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f840160051c81019160208510610cc5575b601f0160051c01905b818110610cb95750610642565b60008155600101610cac565b9091508190610ca3565b634e487b7160e01b600052604160045260246000fd5b90601f19831691600080516020613030833981519152600052816000209260005b818110610d505750908460019594939210610d37575b505050811b0160008051602061303083398151915255610610565b015160001960f88460031b161c191690558f8080610d1c565b92936020600181928786015181550195019301610d06565b6000805160206130308339815191526000527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f840160051c81019160208510610dd0575b601f0160051c01905b818110610dc457506105cd565b60008155600101610db7565b9091508190610dae565b631afcd79f60e31b60005260046000fd5b68ffffffffffffffffff198d1668010000000000000001176000805160206130f083398151915255610577565b63f92ee8a960e01b60005260046000fd5b9050158f610547565b303b15915061053f565b604081901c60ff1615915061052c565b346101e557610019610e5d36611b45565b90610e66611e43565b6001600160a01b03166000818152600a6020526040902054610e919060ff1615158315151415611c8b565b600052600a60205260406000209060ff801983541691151516179055565b346101e55760203660031901126101e5576001600160a01b03610ed0611a57565b16600052600d602052602060ff604060002054166040519015158152f35b346101e55760203660031901126101e557600435610f0a611e43565b6004548114610f1857600455005b60405162461bcd60e51b815260206004820152603a60248201527f544f4b454e3a2043616e6e6f7420757064617465206d696e696d756d546f6b6560448201527f6e734265666f72655377617020746f2073616d652076616c75650000000000006064820152608490fd5b346101e55760003660031901126101e5576020600254604051908152f35b346101e55760403660031901126101e557610fc7610fbd611a57565b6024359033611e79565b602060405160018152f35b346101e557610fe036611b45565b90610fe9611e43565b6001600160a01b03166000818152600d602052604090205490919060ff161515811515146110335761001991600052600d60205260406000209060ff801983541691151516179055565b60405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c7565006064820152608490fd5b346101e55760003660031901126101e5576040516000600080516020613070833981519152546110cd81611c51565b80845290600181169081156111715750600114611105575b611101836110f581850382611bad565b60405191829182611a0e565b0390f35b60008051602061307083398151915260009081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210611157575090915081016020016110f56110e5565b91926001816020925483858801015201910190929161113f565b60ff191660208086019190915291151560051b840190910191506110f590506110e5565b346101e55760003660031901126101e557600080516020613090833981519152546040516001600160a01b039091168152602090f35b346101e55760003660031901126101e5576020600354604051908152f35b346101e5576100196111fa36611b45565b90611203611e43565b6001600160a01b03166000818152600b602052604090205461122e9060ff1615158315151415611c8b565b600052600b60205260406000209060ff801983541691151516179055565b346101e55760e03660031901126101e5576000611267611e43565b61129a601960ff61129261128a61127c611cf1565b611284611d01565b90611d51565b611284611d11565b161115611d7b565b6112bf601960ff6112926112b76112af611d21565b611284611d31565b611284611d41565b6112da6112ca611cf1565b60ff1660ff196008541617600855565b6112fc6112e5611d21565b61ff006008549160081b169061ff00191617600855565b611320611307611d01565b62ff00006008549160101b169062ff0000191617600855565b61134661132b611d31565b63ff0000006008549160181b169063ff000000191617600855565b61136c611351611d11565b60ff60201b6008549160201b169060ff60201b191617600855565b611374611d41565b60085460c4358015158091036113b05766ff00000000000065ff00000000009160301b169260281b169066ffff00000000001916171760085580f35b8380fd5b346101e55760203660031901126101e5576113cd611a57565b6113d5611e43565b6001600160a01b031660008181526009602052604090205460ff1661140f576000908152600960205260409020805460ff19166001179055005b60405162461bcd60e51b815260206004820152602160248201527f544f4b454e3a204163636f756e7420697320616c726561647920626c6f636b656044820152601960fa1b6064820152608490fd5b346101e55761001961146f36611b45565b90611478611e43565b6001600160a01b03166000818152600c60205260409020546114a39060ff1615158315151415611c8b565b600052600c60205260406000209060ff801983541691151516179055565b346101e55760003660031901126101e5576114da611e43565b60008051602061309083398151915280546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101e55760203660031901126101e5576001600160a01b0361154c611a57565b166000526000805160206130508339815191526020526020604060002054604051908152f35b346101e55760203660031901126101e55761158b611a57565b611593611e43565b6001600160a01b031660008181526009602052604090205460ff16156115cb576000908152600960205260409020805460ff19169055005b60405162461bcd60e51b815260206004820152601d60248201527f544f4b454e3a204163636f756e74206973206e6f7420626c6f636b65640000006044820152606490fd5b346101e55760003660031901126101e5576001546040516001600160a01b039091168152602090f35b346101e55760003660031901126101e55760e060085460ff604051918181168352818160081c166020840152818160101c166040840152818160181c166060840152818160201c166080840152818160281c1660a084015260301c16151560c0820152f35b346101e55760003660031901126101e557602060ff7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace055416604051908152f35b346101e55760203660031901126101e5576004356116fa611e43565b600254811461170857600255005b60405162461bcd60e51b815260206004820152603260248201527f544f4b454e3a2043616e6e6f7420757064617465206d617857616c6c6574416d6044820152716f756e7420746f2073616d652076616c756560701b6064820152608490fd5b346101e55760603660031901126101e557611781611a57565b611789611a6d565b6044359061179683611b74565b33600090815260209190915260409020549260001984106117bc575b610fc79350611e79565b82841061182f576001600160a01b0381161561181957331561180357610fc7936117e582611b74565b60018060a01b033316600052602052836040600020910390556117b2565b634a1406b160e11b600052600060045260246000fd5b63e602df0560e01b600052600060045260246000fd5b8284637dc7a0d960e11b6000523360045260245260445260646000fd5b346101e55760203660031901126101e557600435611868611e43565b600354811461187657600355005b60405162461bcd60e51b815260206004820152602e60248201527f544f4b454e3a2043616e6e6f7420757064617465206d61785478416d6f756e7460448201526d20746f2073616d652076616c756560901b6064820152608490fd5b346101e55760003660031901126101e55760206000805160206130b083398151915254604051908152f35b346101e55760003660031901126101e5576000546040516001600160a01b039091168152602090f35b346101e55760403660031901126101e557610fc7611942611a57565b6024359033612099565b346101e55760003660031901126101e55760405160006000805160206130308339815191525461197b81611c51565b808452906001811690811561117157506001146119a257611101836110f581850382611bad565b60008051602061303083398151915260009081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106119f4575090915081016020016110f56110e5565b9192600181602092548385880101520191019092916119dc565b91909160208152825180602083015260005b818110611a41575060409293506000838284010152601f8019910116010190565b8060208092870101516040828601015201611a20565b600435906001600160a01b03821682036101e557565b602435906001600160a01b03821682036101e557565b346101e55760003660031901126101e55760405160006000805160206130d083398151915254611ab281611c51565b80845290600181169081156111715750600114611ad957611101836110f581850382611bad565b6000805160206130d083398151915260009081527fdba4f51a509eb7e84b4c35f3d80cc355baceab7492ef35c580c20c6533c708e1939250905b808210611b2b575090915081016020016110f56110e5565b919260018160209254838588010152019101909291611b13565b60409060031901126101e5576004356001600160a01b03811681036101e5579060243580151581036101e55790565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b90601f801991011681019081106001600160401b03821117610ccf57604052565b81601f820112156101e5578035906001600160401b038211610ccf5760405192611c02601f8401601f191660200185611bad565b828452602083830101116101e557816000926020809301838601378301015290565b9181601f840112156101e5578235916001600160401b0383116101e557602083818601950101116101e557565b90600182811c92168015611c81575b6020831014611c6b57565b634e487b7160e01b600052602260045260246000fd5b91607f1691611c60565b15611c9257565b60405162461bcd60e51b815260206004820152603160248201527f544f4b454e3a204163636f756e7420697320616c7265616479207468652076616044820152706c7565206f6620276578636c756465642760781b6064820152608490fd5b60043560ff811681036101e55790565b60443560ff811681036101e55790565b60843560ff811681036101e55790565b60243560ff811681036101e55790565b60643560ff811681036101e55790565b60a43560ff811681036101e55790565b9060ff8091169116019060ff8211611d6557565b634e487b7160e01b600052601160045260246000fd5b15611d8257565b60405162461bcd60e51b815260206004820152602760248201527f544f4b454e3a205461782065786365656473206d6178696d756d2076616c7565604482015266206f662033302560c81b6064820152608490fd5b81810292918115918404141715611d6557565b908160209103126101e557516001600160a01b03811681036101e55790565b9190811015611e195760051b0190565b634e487b7160e01b600052603260045260246000fd5b356001600160a01b03811681036101e55790565b600080516020613090833981519152546001600160a01b03163303611e6457565b63118cdaa760e01b6000523360045260246000fd5b91906001600160a01b03831615611ea4576001600160a01b03811615610a9b57611ea29261280f565b565b634b637e8f60e11b600052600060045260246000fd5b60008051602061309083398151915280546001600160a01b039283166001600160a01b0319821681179092559091167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b91906001600160401b038111610ccf57611f386000805160206130d083398151915254611c51565b601f8111612027575b506000601f8211600114611f8f578190611f729394600092611f845750508160011b916000199060031b1c19161790565b6000805160206130d083398151915255565b0135905038806105ea565b6000805160206130d08339815191528152601f198216937fdba4f51a509eb7e84b4c35f3d80cc355baceab7492ef35c580c20c6533c708e191805b86811061200f5750836001959610611ff5575b505050811b016000805160206130d083398151915255565b0135600019600384901b60f8161c19169055388080611fdd565b90926020600181928686013581550194019101611fca565b6000805160206130d08339815191526000527fdba4f51a509eb7e84b4c35f3d80cc355baceab7492ef35c580c20c6533c708e1601f830160051c8101916020841061208f575b601f0160051c01905b8181106120835750611f41565b60008155600101612076565b909150819061206d565b916001600160a01b038316918215611819576001600160a01b0316928315611803577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916120e8602092611b74565b85600052825280604060002055604051908152a3565b1561210557565b60405162461bcd60e51b815260206004820152601960248201527f544f4b454e3a204163636f756e7420697320626c6f636b6564000000000000006044820152606490fd5b91908201809211611d6557565b91908203918211611d6557565b9190600092811561280357838052600d60205260ff60408520541660018060a01b03821690818652600d60205260ff6040872054169082875260096020526121b360ff604089205416156120fe565b86805260096020526121cc60ff604089205416156120fe565b828752600b60205260ff60408820541615806127ec575b612787575b828752600c60205260ff604088205416156126f0575b8163ffffff0019600e54168281600e556126c8575b50612695575b8115908161268c575b508061267d575b61264a575b600e5460ff60201b61225c61224f60ff8460101c1660ff8560081c16611d51565b60ff8460181c1690611d51565b60201b16918260ff60201b198316179081600e5530895260008051602061305083398151915260205260408920546004541115918261263e575b8261262e575b5081612626575b506123c1575b505093611ea29394600e549060ff82161590838052600a60205260ff6040852054169081156123ab575b506123a4575b80612395575b6122ea575b50612ecf565b9261234484612344606461230860ff612349979960081c1686611dd7565b04606461232c60ff82612320828860101c168a611dd7565b049560181c1687611dd7565b049481612385575b83612368575b8561235057612157565b612157565b91386122e4565b6007546123449087906001600160a01b03168b612ecf565b6006546123809085906001600160a01b03168b612ecf565b61233a565b61239082308b612ecf565b612334565b5060ff8160201c1615156122df565b50816122d9565b845250600a602052604083205460ff16386122d3565b9060019164ff000000ff19161717600e5530855260008051602061305083398151915260205260408520546123fa8160011c8092612157565b9080612416575b5050600e805460ff19169055611ea2386122a9565b865461242d9083906001600160a01b031630612099565b60405160609261243d8483611bad565b6002825260208201601f1985013682373061245784613012565b5289546040516315ab88c960e31b81526001600160a01b039091169290602081600481875afa90811561261b578c916125fc575b506124958561301f565b6001600160a01b039091169052823b156125f85760405163791ac94760e01b815260048101919091526001602482015260a06044820152925160a484018190528a928492909160c484019190855b8181106125d3575050508383809230606483015242608483015203925af180156125c8576125b4575b5081476125238360018060a01b038b541630612099565b885460055460405163f305d71960e01b8152306004820152602481019590955260016044860181905260648601526001600160a01b0390811660848601524260a4860152849260c4928492165af180156125a9571561240157813d83116125a2575b61258f8183611bad565b8101031261259e573880612401565b8480fd5b503d612585565b6040513d89823e3d90fd5b876125c191989298611bad565b953861250c565b6040513d8a823e3d90fd5b82516001600160a01b031684528e9650879550602093840193909201916001016124e3565b8a80fd5b612615915060203d602011610b7b57610b6c8183611bad565b3861248b565b6040513d8e823e3d90fd5b9050386122a3565b60201c60ff16151591503861229c565b60ff8416159250612296565b600854600e549062ff000063ff0000008260081c169261ff008360081b169063ffffff0019161791161717600e5561222e565b5060ff60085460301c16612229565b90501538612222565b600854600e549062ff000063ff0000008260101c169261ff0083169063ffffff001916179160081c161717600e55612219565b60085462ff000063ff0000008260081c169261ff008360081b161791161717600e5538612213565b82875260008051602061305083398151915260205261271385604089205461214a565b60025410156121fe5760405162461bcd60e51b815260206004820152603a60248201527f544f4b454e3a2045787065637465642077616c6c657420616d6f756e7420657860448201527f636565647320746865206d617857616c6c6574416d6f756e742e0000000000006064820152608490fd5b6003548511156121e85760405162461bcd60e51b815260206004820152602d60248201527f544f4b454e3a2042757920616d6f756e74206578636565647320746865206d6160448201526c3c2a3c213abca0b6b7bab73a1760991b6064820152608490fd5b50868052600b60205260ff604088205416156121e3565b9050611ea29192612e01565b9291906000938215612df75760018060a01b038116808652600d60205260ff6040872054169060018060a01b03841691828852600d60205260ff60408920541690838952600960205261286960ff60408b205416156120fe565b828952600960205261288260ff60408b205416156120fe565b838952600b60205260ff60408a2054161580612de0575b612d7b575b838952600c60205260ff60408a20541615612ce4575b8163ffffff0019600e54168281600e55612cbc575b50612c89575b81159081612c80575b5080612c71575b612c3e575b600e5460ff60201b61290561224f60ff8460101c1660ff8560081c16611d51565b60201b16918260ff60201b198316179081600e55308b5260008051602061305083398151915260205260408b205460045411159182612c32575b82612c22575b5081612c1a575b506129ae575b5050611ea29596600e549260ff841615928252600a60205260ff604083205416908115612998575b50612990575b5080612395576122ea5750612ecf565b905038612980565b825250600a602052604081205460ff163861297a565b9060019164ff000000ff19161717600e5530875260008051602061305083398151915260205260408720546129e78160011c8092612157565b9080612a03575b5050600e805460ff19169055611ea238612952565b8854612a1a9083906001600160a01b031630612099565b604051606092612a2a8483611bad565b6002825260208201601f19850136823730612a4484613012565b528b546040516315ab88c960e31b81526001600160a01b0390911692908d90602081600481885afa918215612c0e5791612bef575b50612a838561301f565b6001600160a01b039091169052823b15612beb5760405163791ac94760e01b815260048101919091526001602482015260a06044820152925160a484018190528c928492909160c484019190855b818110612bc1575050508383809230606483015242608483015203925af18015612bb657612ba2575b508147612b118360018060a01b038d541630612099565b8a5460055460405163f305d71960e01b8152306004820152602481019590955260016044860181905260648601526001600160a01b0390811660848601524260a4860152849260c4928492165af18015612b9757156129ee57813d8311612b90575b612b7d8183611bad565b81010312612b8c5738806129ee565b8680fd5b503d612b73565b6040513d8b823e3d90fd5b89612baf919a929a611bad565b9738612afa565b6040513d8c823e3d90fd5b9260209194965060019295508190838060a01b0387511681520194019101908e9492869492612ad1565b8c80fd5b612c08915060203d602011610b7b57610b6c8183611bad565b38612a79565b604051903d90823e3d90fd5b90503861294c565b60201c60ff161515915038612945565b60ff841615925061293f565b600854600e549062ff000063ff0000008260081c169261ff008360081b169063ffffff0019161791161717600e556128e4565b5060ff60085460301c166128df565b905015386128d8565b600854600e549062ff000063ff0000008260101c169261ff0083169063ffffff001916179160081c161717600e556128cf565b60085462ff000063ff0000008260081c169261ff008360081b161791161717600e55386128c9565b838952600080516020613050833981519152602052612d078760408b205461214a565b60025410156128b45760405162461bcd60e51b815260206004820152603a60248201527f544f4b454e3a2045787065637465642077616c6c657420616d6f756e7420657860448201527f636565647320746865206d617857616c6c6574416d6f756e742e0000000000006064820152608490fd5b60035487111561289e5760405162461bcd60e51b815260206004820152602d60248201527f544f4b454e3a2042757920616d6f756e74206578636565647320746865206d6160448201526c3c2a3c213abca0b6b7bab73a1760991b6064820152608490fd5b50828952600b60205260ff60408a20541615612899565b909150611ea29293505b6000916001600160a01b03909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060209083612e9657612e53856000805160206130b08339815191525461214a565b6000805160206130b0833981519152555b6001600160a01b03169384612e7d575b604051908152a3565b8481526000805160206130508339815191528252612e74565b83855260008051602061305083398151915282526040852054846000526000805160206130508339815191528352604060002055612e64565b6001600160a01b03169081612f8b5760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91612f1b856000805160206130b08339815191525461214a565b6000805160206130b0833981519152555b6001600160a01b03169384612f6657806000805160206130b083398151915254036000805160206130b083398151915255604051908152a3565b8460005260008051602061305083398151915282526040600020818154019055612e74565b81600052600080516020613050833981519152602052604060002054838110612ff5577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef918460209285600052600080516020613050833981519152845203604060002055612f2c565b91905063391434e360e21b60005260045260245260445260646000fd5b805115611e195760200190565b805160011015611e19576040019056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace027400605485a8d5e38130aac5d816159438528233b60839d2fedb32e71a453600f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a164736f6c634300081c000a
Deployed Bytecode
0x6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806306fdde031461194c578063095ea7b3146119265780631694505e146118fd57806318160ddd146118d25780631e293c101461184c57806323b872dd1461176857806327a14fc2146116de578063313ce5671461169e5780633453985c146116395780633c130d90146101ea57806349bd5a5e146116105780634d78fdc61461157257806370a082311461152b578063715018a6146114c1578063781edb3c1461145e5780637c0a893d146113b457806384b92c5e1461124c578063880bcbc1146111e95780638c0b5e22146111cb5780638da5cb5b1461119557806395d89b411461109e5780639a7a23d614610fd2578063a9059cbb14610fa1578063aa4bde2814610f83578063aee50b1e14610eee578063b62496f514610eaf578063c024666814610e4c578063cc3f2cf7146103d0578063d2d7ad83146103b2578063d3f6a15714610279578063dd62ed3e14610230578063e0df5b6f146101ef578063e8a3d485146101ea5763f2fde38b0361000e57346101e55760203660031901126101e5576101af611a57565b6101b7611e43565b6001600160a01b038116156101cf5761001990611eba565b631e4fbdf760e01b600052600060045260246000fd5b600080fd5b611a83565b346101e55760203660031901126101e5576004356001600160401b0381116101e557610222610019913690600401611c24565b9061022b611e43565b611f10565b346101e55760403660031901126101e557610249611a57565b61025a610254611a6d565b91611b74565b9060018060a01b03166000526020526020604060002054604051908152f35b346101e55760403660031901126101e557610292611a57565b61029a611a6d565b906102a3611e43565b6005546001600160a01b03918216918116829003610343575b50506006546001600160a01b039182169181168290036102d857005b81156102ee576001600160a01b03191617600655005b60405162461bcd60e51b815260206004820152602760248201527f544f4b454e3a20546865206f7065726174696f6e7357616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608490fd5b811561035e576001600160a01b0319161760055581806102bc565b60405162461bcd60e51b815260206004820152602660248201527f544f4b454e3a20546865206c697175696469747957616c6c65742063616e6e6f60448201526507420626520360d41b6064820152608490fd5b346101e55760003660031901126101e5576020600454604051908152f35b346101e5576102a03660031901126101e5576103ea611a57565b6103f2611a6d565b6044356001600160401b0381116101e557610411903690600401611bce565b906064356001600160401b0381116101e557610431903690600401611bce565b926084359060ff821682036101e55760c4356001600160a01b03811681036101e55760e03660e31901126101e5576101c435906001600160a01b03821682036101e5576101e435906001600160a01b03821682036101e557610204356001600160a01b03811681036101e55761026435926001600160401b0384116101e557366023850112156101e5576001600160401b038460040135116101e5576024840194366024866004013560051b870101116101e557610284356001600160401b0381116101e557610505903690600401611c24565b98909b6000805160206130f0833981519152549b8c6001600160401b038116159081610e3c575b6001600160401b03166001149081610e32575b159081610e29575b50610e185760018d6001600160401b031916176000805160206130f08339815191525560ff8d60401c1615610deb575b6105808a611eba565b60ff6000805160206130f08339815191525460401c1615610dda578051906001600160401b038211610ccf576105c460008051602061303083398151915254611c51565b601f8111610d68575b50602090601f8311600114610ce5576105ff929160009183610bcc575b50508160011b916000199060031b1c19161790565b600080516020613030833981519152555b8051906001600160401b038211610ccf5761063960008051602061307083398151915254611c51565b601f8111610c5d575b50602090601f8311600114610bd75791806106779260ff9594600092610bcc5750508160011b916000199060031b1c19161790565b600080516020613070833981519152555b1660ff197f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace055416177f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace05556127106106e46102243560a435611dd7565b046002556127106106fa6102443560a435611dd7565b04600355620f424060a4350460045560e43560ff811681036101e5578061072c915060ff1660ff196008541617600855565b6101043560ff811681036101e5576008805461ff00191691811b61ff00169190911790556101243560ff811681036101e5578061077d915062ff00006008549160101b169062ff0000191617600855565b6101443560ff811681036101e557806107ac915063ff0000006008549160181b169063ff000000191617600855565b6101643560ff811681036101e557806107db915060ff60201b6008549160201b169060ff60201b191617600855565b6101843560ff811681036101e5576008546101a4358015158091036101e55766ff00000000000065ff00000000009160301b169260281b169066ffff00000000001916171760085560018060a01b03166001600160601b0360a01b600554161760055560018060a01b03166001600160601b0360a01b600654161760065560018060a01b03166001600160601b0360a01b60075416176007556040519063c45a015560e01b825260208260048160018060a01b0385165afa918215610b8257600092610bab575b506040516315ab88c960e31b8152916020836004816001600160a01b0386165afa908115610b825760446020926000958691610b8e575b506040516364e329cb60e11b81523060048201526001600160a01b0391821660248201529586938492165af1918215610b8257600092610b51575b50600080546001600160a01b03199081166001600160a01b03938416178255600180549091169383169384178155838252600d60209081526040808420805460ff199081168517909155988516808552600a835281852080548b16851790558b861680865282862080548c16861790553080875283872080548d1687179055600b855283872080548d168717905582875283872080548d168717905581875283872080548d1687179055978652600c90935281852080548b16851790558454909516845280842080548a16841790559483528483208054891683179055928252838220805488168217905582825292812080549096169092179094555b81600401358110610ab15750505015610a9b5760ff9361022b610a379360a43590612164565b60401c1615610a4257005b68ff0000000000000000196000805160206130f083398151915254166000805160206130f0833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b600052600060045260246000fd5b6001906001600160a01b03610ad3610ace83600487013588611e09565b611e2f565b16600052600c60205260406000208260ff19825416179055818060a01b03610b03610ace83866004013588611e09565b16600052600b60205260406000208260ff19825416179055818060a01b03610b33610ace83866004013588611e09565b16600052600a60205260406000208260ff1982541617905501610a11565b610b7491925060203d602011610b7b575b610b6c8183611bad565b810190611dea565b9089610914565b503d610b62565b6040513d6000823e3d90fd5b610ba59150843d8611610b7b57610b6c8183611bad565b8d6108d9565b610bc591925060203d602011610b7b57610b6c8183611bad565b90896108a2565b0151905038806105ea565b90601f19831691600080516020613070833981519152600052816000209260005b818110610c45575091600193918560ff97969410610c2c575b505050811b0160008051602061307083398151915255610688565b015160001960f88460031b161c191690558f8080610c11565b92936020600181928786015181550195019301610bf8565b6000805160206130708339815191526000527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f840160051c81019160208510610cc5575b601f0160051c01905b818110610cb95750610642565b60008155600101610cac565b9091508190610ca3565b634e487b7160e01b600052604160045260246000fd5b90601f19831691600080516020613030833981519152600052816000209260005b818110610d505750908460019594939210610d37575b505050811b0160008051602061303083398151915255610610565b015160001960f88460031b161c191690558f8080610d1c565b92936020600181928786015181550195019301610d06565b6000805160206130308339815191526000527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f840160051c81019160208510610dd0575b601f0160051c01905b818110610dc457506105cd565b60008155600101610db7565b9091508190610dae565b631afcd79f60e31b60005260046000fd5b68ffffffffffffffffff198d1668010000000000000001176000805160206130f083398151915255610577565b63f92ee8a960e01b60005260046000fd5b9050158f610547565b303b15915061053f565b604081901c60ff1615915061052c565b346101e557610019610e5d36611b45565b90610e66611e43565b6001600160a01b03166000818152600a6020526040902054610e919060ff1615158315151415611c8b565b600052600a60205260406000209060ff801983541691151516179055565b346101e55760203660031901126101e5576001600160a01b03610ed0611a57565b16600052600d602052602060ff604060002054166040519015158152f35b346101e55760203660031901126101e557600435610f0a611e43565b6004548114610f1857600455005b60405162461bcd60e51b815260206004820152603a60248201527f544f4b454e3a2043616e6e6f7420757064617465206d696e696d756d546f6b6560448201527f6e734265666f72655377617020746f2073616d652076616c75650000000000006064820152608490fd5b346101e55760003660031901126101e5576020600254604051908152f35b346101e55760403660031901126101e557610fc7610fbd611a57565b6024359033611e79565b602060405160018152f35b346101e557610fe036611b45565b90610fe9611e43565b6001600160a01b03166000818152600d602052604090205490919060ff161515811515146110335761001991600052600d60205260406000209060ff801983541691151516179055565b60405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c7565006064820152608490fd5b346101e55760003660031901126101e5576040516000600080516020613070833981519152546110cd81611c51565b80845290600181169081156111715750600114611105575b611101836110f581850382611bad565b60405191829182611a0e565b0390f35b60008051602061307083398151915260009081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210611157575090915081016020016110f56110e5565b91926001816020925483858801015201910190929161113f565b60ff191660208086019190915291151560051b840190910191506110f590506110e5565b346101e55760003660031901126101e557600080516020613090833981519152546040516001600160a01b039091168152602090f35b346101e55760003660031901126101e5576020600354604051908152f35b346101e5576100196111fa36611b45565b90611203611e43565b6001600160a01b03166000818152600b602052604090205461122e9060ff1615158315151415611c8b565b600052600b60205260406000209060ff801983541691151516179055565b346101e55760e03660031901126101e5576000611267611e43565b61129a601960ff61129261128a61127c611cf1565b611284611d01565b90611d51565b611284611d11565b161115611d7b565b6112bf601960ff6112926112b76112af611d21565b611284611d31565b611284611d41565b6112da6112ca611cf1565b60ff1660ff196008541617600855565b6112fc6112e5611d21565b61ff006008549160081b169061ff00191617600855565b611320611307611d01565b62ff00006008549160101b169062ff0000191617600855565b61134661132b611d31565b63ff0000006008549160181b169063ff000000191617600855565b61136c611351611d11565b60ff60201b6008549160201b169060ff60201b191617600855565b611374611d41565b60085460c4358015158091036113b05766ff00000000000065ff00000000009160301b169260281b169066ffff00000000001916171760085580f35b8380fd5b346101e55760203660031901126101e5576113cd611a57565b6113d5611e43565b6001600160a01b031660008181526009602052604090205460ff1661140f576000908152600960205260409020805460ff19166001179055005b60405162461bcd60e51b815260206004820152602160248201527f544f4b454e3a204163636f756e7420697320616c726561647920626c6f636b656044820152601960fa1b6064820152608490fd5b346101e55761001961146f36611b45565b90611478611e43565b6001600160a01b03166000818152600c60205260409020546114a39060ff1615158315151415611c8b565b600052600c60205260406000209060ff801983541691151516179055565b346101e55760003660031901126101e5576114da611e43565b60008051602061309083398151915280546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101e55760203660031901126101e5576001600160a01b0361154c611a57565b166000526000805160206130508339815191526020526020604060002054604051908152f35b346101e55760203660031901126101e55761158b611a57565b611593611e43565b6001600160a01b031660008181526009602052604090205460ff16156115cb576000908152600960205260409020805460ff19169055005b60405162461bcd60e51b815260206004820152601d60248201527f544f4b454e3a204163636f756e74206973206e6f7420626c6f636b65640000006044820152606490fd5b346101e55760003660031901126101e5576001546040516001600160a01b039091168152602090f35b346101e55760003660031901126101e55760e060085460ff604051918181168352818160081c166020840152818160101c166040840152818160181c166060840152818160201c166080840152818160281c1660a084015260301c16151560c0820152f35b346101e55760003660031901126101e557602060ff7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace055416604051908152f35b346101e55760203660031901126101e5576004356116fa611e43565b600254811461170857600255005b60405162461bcd60e51b815260206004820152603260248201527f544f4b454e3a2043616e6e6f7420757064617465206d617857616c6c6574416d6044820152716f756e7420746f2073616d652076616c756560701b6064820152608490fd5b346101e55760603660031901126101e557611781611a57565b611789611a6d565b6044359061179683611b74565b33600090815260209190915260409020549260001984106117bc575b610fc79350611e79565b82841061182f576001600160a01b0381161561181957331561180357610fc7936117e582611b74565b60018060a01b033316600052602052836040600020910390556117b2565b634a1406b160e11b600052600060045260246000fd5b63e602df0560e01b600052600060045260246000fd5b8284637dc7a0d960e11b6000523360045260245260445260646000fd5b346101e55760203660031901126101e557600435611868611e43565b600354811461187657600355005b60405162461bcd60e51b815260206004820152602e60248201527f544f4b454e3a2043616e6e6f7420757064617465206d61785478416d6f756e7460448201526d20746f2073616d652076616c756560901b6064820152608490fd5b346101e55760003660031901126101e55760206000805160206130b083398151915254604051908152f35b346101e55760003660031901126101e5576000546040516001600160a01b039091168152602090f35b346101e55760403660031901126101e557610fc7611942611a57565b6024359033612099565b346101e55760003660031901126101e55760405160006000805160206130308339815191525461197b81611c51565b808452906001811690811561117157506001146119a257611101836110f581850382611bad565b60008051602061303083398151915260009081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106119f4575090915081016020016110f56110e5565b9192600181602092548385880101520191019092916119dc565b91909160208152825180602083015260005b818110611a41575060409293506000838284010152601f8019910116010190565b8060208092870101516040828601015201611a20565b600435906001600160a01b03821682036101e557565b602435906001600160a01b03821682036101e557565b346101e55760003660031901126101e55760405160006000805160206130d083398151915254611ab281611c51565b80845290600181169081156111715750600114611ad957611101836110f581850382611bad565b6000805160206130d083398151915260009081527fdba4f51a509eb7e84b4c35f3d80cc355baceab7492ef35c580c20c6533c708e1939250905b808210611b2b575090915081016020016110f56110e5565b919260018160209254838588010152019101909291611b13565b60409060031901126101e5576004356001600160a01b03811681036101e5579060243580151581036101e55790565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b90601f801991011681019081106001600160401b03821117610ccf57604052565b81601f820112156101e5578035906001600160401b038211610ccf5760405192611c02601f8401601f191660200185611bad565b828452602083830101116101e557816000926020809301838601378301015290565b9181601f840112156101e5578235916001600160401b0383116101e557602083818601950101116101e557565b90600182811c92168015611c81575b6020831014611c6b57565b634e487b7160e01b600052602260045260246000fd5b91607f1691611c60565b15611c9257565b60405162461bcd60e51b815260206004820152603160248201527f544f4b454e3a204163636f756e7420697320616c7265616479207468652076616044820152706c7565206f6620276578636c756465642760781b6064820152608490fd5b60043560ff811681036101e55790565b60443560ff811681036101e55790565b60843560ff811681036101e55790565b60243560ff811681036101e55790565b60643560ff811681036101e55790565b60a43560ff811681036101e55790565b9060ff8091169116019060ff8211611d6557565b634e487b7160e01b600052601160045260246000fd5b15611d8257565b60405162461bcd60e51b815260206004820152602760248201527f544f4b454e3a205461782065786365656473206d6178696d756d2076616c7565604482015266206f662033302560c81b6064820152608490fd5b81810292918115918404141715611d6557565b908160209103126101e557516001600160a01b03811681036101e55790565b9190811015611e195760051b0190565b634e487b7160e01b600052603260045260246000fd5b356001600160a01b03811681036101e55790565b600080516020613090833981519152546001600160a01b03163303611e6457565b63118cdaa760e01b6000523360045260246000fd5b91906001600160a01b03831615611ea4576001600160a01b03811615610a9b57611ea29261280f565b565b634b637e8f60e11b600052600060045260246000fd5b60008051602061309083398151915280546001600160a01b039283166001600160a01b0319821681179092559091167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b91906001600160401b038111610ccf57611f386000805160206130d083398151915254611c51565b601f8111612027575b506000601f8211600114611f8f578190611f729394600092611f845750508160011b916000199060031b1c19161790565b6000805160206130d083398151915255565b0135905038806105ea565b6000805160206130d08339815191528152601f198216937fdba4f51a509eb7e84b4c35f3d80cc355baceab7492ef35c580c20c6533c708e191805b86811061200f5750836001959610611ff5575b505050811b016000805160206130d083398151915255565b0135600019600384901b60f8161c19169055388080611fdd565b90926020600181928686013581550194019101611fca565b6000805160206130d08339815191526000527fdba4f51a509eb7e84b4c35f3d80cc355baceab7492ef35c580c20c6533c708e1601f830160051c8101916020841061208f575b601f0160051c01905b8181106120835750611f41565b60008155600101612076565b909150819061206d565b916001600160a01b038316918215611819576001600160a01b0316928315611803577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916120e8602092611b74565b85600052825280604060002055604051908152a3565b1561210557565b60405162461bcd60e51b815260206004820152601960248201527f544f4b454e3a204163636f756e7420697320626c6f636b6564000000000000006044820152606490fd5b91908201809211611d6557565b91908203918211611d6557565b9190600092811561280357838052600d60205260ff60408520541660018060a01b03821690818652600d60205260ff6040872054169082875260096020526121b360ff604089205416156120fe565b86805260096020526121cc60ff604089205416156120fe565b828752600b60205260ff60408820541615806127ec575b612787575b828752600c60205260ff604088205416156126f0575b8163ffffff0019600e54168281600e556126c8575b50612695575b8115908161268c575b508061267d575b61264a575b600e5460ff60201b61225c61224f60ff8460101c1660ff8560081c16611d51565b60ff8460181c1690611d51565b60201b16918260ff60201b198316179081600e5530895260008051602061305083398151915260205260408920546004541115918261263e575b8261262e575b5081612626575b506123c1575b505093611ea29394600e549060ff82161590838052600a60205260ff6040852054169081156123ab575b506123a4575b80612395575b6122ea575b50612ecf565b9261234484612344606461230860ff612349979960081c1686611dd7565b04606461232c60ff82612320828860101c168a611dd7565b049560181c1687611dd7565b049481612385575b83612368575b8561235057612157565b612157565b91386122e4565b6007546123449087906001600160a01b03168b612ecf565b6006546123809085906001600160a01b03168b612ecf565b61233a565b61239082308b612ecf565b612334565b5060ff8160201c1615156122df565b50816122d9565b845250600a602052604083205460ff16386122d3565b9060019164ff000000ff19161717600e5530855260008051602061305083398151915260205260408520546123fa8160011c8092612157565b9080612416575b5050600e805460ff19169055611ea2386122a9565b865461242d9083906001600160a01b031630612099565b60405160609261243d8483611bad565b6002825260208201601f1985013682373061245784613012565b5289546040516315ab88c960e31b81526001600160a01b039091169290602081600481875afa90811561261b578c916125fc575b506124958561301f565b6001600160a01b039091169052823b156125f85760405163791ac94760e01b815260048101919091526001602482015260a06044820152925160a484018190528a928492909160c484019190855b8181106125d3575050508383809230606483015242608483015203925af180156125c8576125b4575b5081476125238360018060a01b038b541630612099565b885460055460405163f305d71960e01b8152306004820152602481019590955260016044860181905260648601526001600160a01b0390811660848601524260a4860152849260c4928492165af180156125a9571561240157813d83116125a2575b61258f8183611bad565b8101031261259e573880612401565b8480fd5b503d612585565b6040513d89823e3d90fd5b876125c191989298611bad565b953861250c565b6040513d8a823e3d90fd5b82516001600160a01b031684528e9650879550602093840193909201916001016124e3565b8a80fd5b612615915060203d602011610b7b57610b6c8183611bad565b3861248b565b6040513d8e823e3d90fd5b9050386122a3565b60201c60ff16151591503861229c565b60ff8416159250612296565b600854600e549062ff000063ff0000008260081c169261ff008360081b169063ffffff0019161791161717600e5561222e565b5060ff60085460301c16612229565b90501538612222565b600854600e549062ff000063ff0000008260101c169261ff0083169063ffffff001916179160081c161717600e55612219565b60085462ff000063ff0000008260081c169261ff008360081b161791161717600e5538612213565b82875260008051602061305083398151915260205261271385604089205461214a565b60025410156121fe5760405162461bcd60e51b815260206004820152603a60248201527f544f4b454e3a2045787065637465642077616c6c657420616d6f756e7420657860448201527f636565647320746865206d617857616c6c6574416d6f756e742e0000000000006064820152608490fd5b6003548511156121e85760405162461bcd60e51b815260206004820152602d60248201527f544f4b454e3a2042757920616d6f756e74206578636565647320746865206d6160448201526c3c2a3c213abca0b6b7bab73a1760991b6064820152608490fd5b50868052600b60205260ff604088205416156121e3565b9050611ea29192612e01565b9291906000938215612df75760018060a01b038116808652600d60205260ff6040872054169060018060a01b03841691828852600d60205260ff60408920541690838952600960205261286960ff60408b205416156120fe565b828952600960205261288260ff60408b205416156120fe565b838952600b60205260ff60408a2054161580612de0575b612d7b575b838952600c60205260ff60408a20541615612ce4575b8163ffffff0019600e54168281600e55612cbc575b50612c89575b81159081612c80575b5080612c71575b612c3e575b600e5460ff60201b61290561224f60ff8460101c1660ff8560081c16611d51565b60201b16918260ff60201b198316179081600e55308b5260008051602061305083398151915260205260408b205460045411159182612c32575b82612c22575b5081612c1a575b506129ae575b5050611ea29596600e549260ff841615928252600a60205260ff604083205416908115612998575b50612990575b5080612395576122ea5750612ecf565b905038612980565b825250600a602052604081205460ff163861297a565b9060019164ff000000ff19161717600e5530875260008051602061305083398151915260205260408720546129e78160011c8092612157565b9080612a03575b5050600e805460ff19169055611ea238612952565b8854612a1a9083906001600160a01b031630612099565b604051606092612a2a8483611bad565b6002825260208201601f19850136823730612a4484613012565b528b546040516315ab88c960e31b81526001600160a01b0390911692908d90602081600481885afa918215612c0e5791612bef575b50612a838561301f565b6001600160a01b039091169052823b15612beb5760405163791ac94760e01b815260048101919091526001602482015260a06044820152925160a484018190528c928492909160c484019190855b818110612bc1575050508383809230606483015242608483015203925af18015612bb657612ba2575b508147612b118360018060a01b038d541630612099565b8a5460055460405163f305d71960e01b8152306004820152602481019590955260016044860181905260648601526001600160a01b0390811660848601524260a4860152849260c4928492165af18015612b9757156129ee57813d8311612b90575b612b7d8183611bad565b81010312612b8c5738806129ee565b8680fd5b503d612b73565b6040513d8b823e3d90fd5b89612baf919a929a611bad565b9738612afa565b6040513d8c823e3d90fd5b9260209194965060019295508190838060a01b0387511681520194019101908e9492869492612ad1565b8c80fd5b612c08915060203d602011610b7b57610b6c8183611bad565b38612a79565b604051903d90823e3d90fd5b90503861294c565b60201c60ff161515915038612945565b60ff841615925061293f565b600854600e549062ff000063ff0000008260081c169261ff008360081b169063ffffff0019161791161717600e556128e4565b5060ff60085460301c166128df565b905015386128d8565b600854600e549062ff000063ff0000008260101c169261ff0083169063ffffff001916179160081c161717600e556128cf565b60085462ff000063ff0000008260081c169261ff008360081b161791161717600e55386128c9565b838952600080516020613050833981519152602052612d078760408b205461214a565b60025410156128b45760405162461bcd60e51b815260206004820152603a60248201527f544f4b454e3a2045787065637465642077616c6c657420616d6f756e7420657860448201527f636565647320746865206d617857616c6c6574416d6f756e742e0000000000006064820152608490fd5b60035487111561289e5760405162461bcd60e51b815260206004820152602d60248201527f544f4b454e3a2042757920616d6f756e74206578636565647320746865206d6160448201526c3c2a3c213abca0b6b7bab73a1760991b6064820152608490fd5b50828952600b60205260ff60408a20541615612899565b909150611ea29293505b6000916001600160a01b03909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060209083612e9657612e53856000805160206130b08339815191525461214a565b6000805160206130b0833981519152555b6001600160a01b03169384612e7d575b604051908152a3565b8481526000805160206130508339815191528252612e74565b83855260008051602061305083398151915282526040852054846000526000805160206130508339815191528352604060002055612e64565b6001600160a01b03169081612f8b5760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91612f1b856000805160206130b08339815191525461214a565b6000805160206130b0833981519152555b6001600160a01b03169384612f6657806000805160206130b083398151915254036000805160206130b083398151915255604051908152a3565b8460005260008051602061305083398151915282526040600020818154019055612e74565b81600052600080516020613050833981519152602052604060002054838110612ff5577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef918460209285600052600080516020613050833981519152845203604060002055612f2c565b91905063391434e360e21b60005260045260245260445260646000fd5b805115611e195760200190565b805160011015611e19576040019056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace027400605485a8d5e38130aac5d816159438528233b60839d2fedb32e71a453600f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a164736f6c634300081c000a
Deployed Bytecode Sourcemap
675:11373:0:-:0;;;;;;;;;-1:-1:-1;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;;:::i;:::-;2313:62:2;;:::i;:::-;-1:-1:-1;;;;;675:11373:0;;3499:22:2;3495:91;;3614:8;;;:::i;3495:91::-;3544:31;;;675:11373:0;3544:31:2;675:11373:0;;;;;3544:31:2;675:11373:0;;;;;;:::i;:::-;;;;;;-1:-1:-1;;675:11373:0;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;7738:9;675:11373;;;;;;:::i;:::-;2313:62:2;;;:::i;:::-;7738:9:0;:::i;675:11373::-;;;;;;-1:-1:-1;;675:11373:0;;;;;;:::i;:::-;4746:20:3;675:11373:0;;:::i;:::-;4746:20:3;;:::i;:::-;:29;675:11373:0;;;;;;-1:-1:-1;675:11373:0;;;;;-1:-1:-1;675:11373:0;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;;:::i;:::-;;;:::i;:::-;2313:62:2;;;:::i;:::-;6071:15:0;675:11373;-1:-1:-1;;;;;675:11373:0;;;;;;6071:37;;;6067:201;;675:11373;-1:-1:-1;;6282:16:0;675:11373;-1:-1:-1;;;;;675:11373:0;;;;;;6282:39;;;6278:207;;675:11373;6278:207;6345:33;;675:11373;;-1:-1:-1;;;;;;666:6:0;;6282:16;666:6;675:11373;;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;675:11373:0;;;;;;;6067:201;6132:32;;675:11373;;-1:-1:-1;;;;;;666:6:0;;6071:15;666:6;6067:201;;;;675:11373;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;;:::i;:::-;;;:::i;:::-;;;-1:-1:-1;;;;;675:11373:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;675:11373:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;;;-1:-1:-1;;675:11373:0;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;-1:-1:-1;;;;;675:11373:0;;4726:16:8;:34;;;;675:11373:0;-1:-1:-1;;;;;675:11373:0;;4790:16:8;;;:50;;675:11373:0;4855:13:8;:30;;;;675:11373:0;4851:91:8;;;675:11373:0;;-1:-1:-1;;;;;675:11373:0;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;4301:16:8;4979:67;;675:11373:0;2590:6;;;:::i;:::-;675:11373;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;7150:18:8;7146:73;;675:11373:0;;;-1:-1:-1;;;;;675:11373:0;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11808:17:3;;;675:11373:0;;;;;;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;-1:-1:-1;;;;;675:11373:0;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11808:17:3;;;675:11373:0;;;;;;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;2438:11:3;675:11373:0;;;2438:11:3;675:11373:0;666:6;2687:29;675:11373;;;;2687:29;:::i;:::-;666:6;2668:63;675:11373;666:6;2756:25;675:11373;;;;2756:25;:::i;:::-;666:6;2384:7:3;675:11373:0;;;;666:6;675:11373;;;;;;;;;;;;;;;;;;;6946:21;675:11373;;;6946:21;675:11373;;;;;;;;;;;;6946:21;675:11373;;-1:-1:-1;;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;6946:21;675:11373;;;;;;;;;;6946:21;675:11373;;;;;;;;;;;;;;;;;6946:21;675:11373;;;;;;;;;;6946:21;675:11373;;;;;;;;;;;;;;;;-1:-1:-1;;;6946:21:0;675:11373;;;;;;-1:-1:-1;;;675:11373:0;;;6946:21;675:11373;;;;;;;;;;;;2892:23;675:11373;;;;;;;;;;;;;;;;;;;;;;;;;;;2892:23;675:11373;;;;;;;-1:-1:-1;;;;;666:6:0;;675:11373;666:6;;;675:11373;666:6;675:11373;;;;;;-1:-1:-1;;;;;666:6:0;;2970:36;666:6;;;2970:36;666:6;675:11373;;;;;;-1:-1:-1;;;;;666:6:0;;3016:24;666:6;;;3016:24;666:6;675:11373;;666:6;;;;3171:26;;675:11373;;;;;;;;;;;3171:26;;;;;;;675:11373;3171:26;;;675:11373;-1:-1:-1;675:11373:0;;-1:-1:-1;;;3250:23:0;;675:11373;;;;;-1:-1:-1;;;;;675:11373:0;;3250:23;;;;;;;675:11373;;3250:23;675:11373;3250:23;;;;;675:11373;-1:-1:-1;675:11373:0;;-1:-1:-1;;;3153:130:0;;3231:4;675:11373;3153:130;;675:11373;-1:-1:-1;;;;;675:11373:0;;;;666:6;;675:11373;;;;;;;3153:130;;;;;;;675:11373;3153:130;;;675:11373;-1:-1:-1;675:11373:0;666:6;;-1:-1:-1;;;;;;666:6:0;;;-1:-1:-1;;;;;675:11373:0;;;666:6;;;675:11373;666:6;;;;;675:11373;;;666:6;;;;;675:11373;;;3378:25;675:11373;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;;;;;;;;;;3437:18;675:11373;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3231:4;675:11373;;;;;;;;;;;;;;3579:34;675:11373;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3769:29;675:11373;;;;;;;;;;;;;;666:6;;675:11373;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4098:16;675:11373;;;;4098:16;;;;8682:21:3;;;;8678:91;;675:11373:0;;8807:5:3;4373:9:0;675:11373;;;8807:5:3;;:::i;4373:9:0:-;675:11373;;;4301:16:8;5066:101;;675:11373:0;5066:101:8;675:11373:0;;-1:-1:-1;;;;;;;;;;;675:11373:0;;-1:-1:-1;;;;;;;;;;;675:11373:0;5142:14:8;675:11373:0;;;;;;5142:14:8;675:11373:0;8678:91:3;8726:32;;;675:11373:0;8726:32:3;675:11373:0;;;;;8726:32:3;4116:3:0;675:11373;;-1:-1:-1;;;;;4165:8:0;;675:11373;;;;;4165:8;;:::i;:::-;;:::i;:::-;675:11373;;;3769:29;675:11373;;;;;;;;;;;;;;;;;;;4230:8;;675:11373;;;;;4230:8;;:::i;:::-;675:11373;;;3579:34;675:11373;;;;;;;;;;;;;;;;;;;4279:8;;675:11373;;;;;4279:8;;:::i;:::-;675:11373;;;3437:18;675:11373;;;;;;;;;;;;;;666:6;4083:13;;3153:130;;;;;675:11373;3153:130;675:11373;3153:130;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;675:11373;;666:6;675:11373;666:6;;;;;3250:23;;;;;;;;;;;;;;:::i;:::-;;;;3171:26;;;;;675:11373;3171:26;675:11373;3171:26;;;;;;;:::i;:::-;;;;;675:11373;;;;-1:-1:-1;675:11373:0;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;11808:17:3;;675:11373:0;;2384:7:3;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;11808:17:3;;675:11373:0;;2384:7:3;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;675:11373:0;;;;7146:73:8;7191:17;;;675:11373:0;7191:17:8;675:11373:0;;7191:17:8;4979:67;-1:-1:-1;;675:11373:0;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;4979:67:8;;4851:91;4908:23;;;675:11373:0;4908:23:8;675:11373:0;;4908:23:8;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:8;;4726:34;675:11373:0;;;;;;4301:16:8;;-1:-1:-1;4726:34:8;;675:11373:0;;;;4899:38;675:11373;;;:::i;:::-;2313:62:2;;;:::i;:::-;-1:-1:-1;;;;;675:11373:0;;;;;4795:18;675:11373;;;;;;4787:101;;675:11373;;;;;;;4795:39;;4787:101;:::i;:::-;675:11373;;4795:18;675:11373;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;-1:-1:-1;;;;;675:11373:0;;:::i;:::-;;;;1753:57;675:11373;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;;2313:62:2;;:::i;:::-;675:11373:0;;7494:35;;675:11373;;;;;;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;847:30;675:11373;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;4495:5:3;675:11373:0;;:::i;:::-;;;735:10:11;;4495:5:3;:::i;:::-;675:11373:0;;;;;;;;;;;;;;:::i;:::-;2313:62:2;;;:::i;:::-;-1:-1:-1;;;;;675:11373:0;;;;;4509:25;675:11373;;;;;;;;;;;;;;;;4509:40;675:11373;;4649:39;675:11373;;;4509:25;675:11373;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;;-1:-1:-1;675:11373:0;;;;;;;-1:-1:-1;675:11373:0;;-1:-1:-1;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;675:11373:0;;-1:-1:-1;675:11373:0;;;;;;;;-1:-1:-1;;675:11373:0;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;-1:-1:-1;;;;;675:11373:0;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;883:26;675:11373;;;;;;;;;;;5213:54;675:11373;;;:::i;:::-;2313:62:2;;;:::i;:::-;-1:-1:-1;;;;;675:11373:0;;;;;5072:34;675:11373;;;;;;5051:151;;675:11373;;;;;;;5072:55;;5051:151;:::i;:::-;675:11373;;5072:34;675:11373;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;2313:62:2;;:::i;:::-;6580:171:0;6684:2;675:11373;6602:77;:54;:25;;:::i;:::-;6630:26;;:::i;:::-;6602:54;;:::i;:::-;6659:20;;:::i;6602:77::-;675:11373;6601:85;;6580:171;:::i;:::-;6761:174;6684:2;675:11373;6783:80;:56;:26;;:::i;:::-;6812:27;;:::i;6783:56::-;6842:21;;:::i;6761:174::-;675:11373;;;:::i;:::-;;;;;6946:21;675:11373;;;6946:21;675:11373;;;;;;:::i;:::-;;6946:21;675:11373;;6946:21;675:11373;;;;;;;6946:21;675:11373;;;;;;:::i;:::-;;6946:21;675:11373;;;;;;;;;;6946:21;675:11373;;;;;;:::i;:::-;;6946:21;675:11373;;;;;;;;;;6946:21;675:11373;;;;;;:::i;:::-;-1:-1:-1;;;6946:21:0;675:11373;;;;;;-1:-1:-1;;;675:11373:0;;;6946:21;675:11373;;;;;:::i;:::-;6946:21;675:11373;;;;;;;;;;;;;;;;;;;;;;;;;;;6946:21;675:11373;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;;:::i;:::-;2313:62:2;;:::i;:::-;-1:-1:-1;;;;;675:11373:0;;;;;5672:10;675:11373;;;;;;;;;;;;;;5672:10;675:11373;;;;;;;-1:-1:-1;;675:11373:0;5762:4;675:11373;;;;;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;5533:49;675:11373;;;:::i;:::-;2313:62:2;;;:::i;:::-;-1:-1:-1;;;;;675:11373:0;;;;;5397:29;675:11373;;;;;;5376:146;;675:11373;;;;;;;5397:50;;5376:146;:::i;:::-;675:11373;;5397:29;675:11373;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;2313:62:2;;:::i;:::-;-1:-1:-1;;;;;;;;;;;675:11373:0;;-1:-1:-1;;;;;;666:6:0;;;;;675:11373;;-1:-1:-1;;;;;675:11373:0;3985:40:2;675:11373:0;;3985:40:2;675:11373:0;;;;;;;-1:-1:-1;;675:11373:0;;;;-1:-1:-1;;;;;675:11373:0;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;;:::i;:::-;2313:62:2;;:::i;:::-;-1:-1:-1;;;;;675:11373:0;;;;;5857:10;675:11373;;;;;;;;;;;;;;;5857:10;675:11373;;;;;;;-1:-1:-1;;675:11373:0;;;;;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;1464:33;675:11373;;;;;;;;;;;;1464:33;675:11373;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;;3697:11:3;675:11373:0;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;;2313:62:2;;:::i;:::-;7283:15:0;675:11373;7271:27;;675:11373;;7283:15;675:11373;;;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;;:::i;:::-;;;:::i;:::-;;;4746:20:3;;;;:::i;:::-;735:10:11;-1:-1:-1;675:11373:0;;;;;;;;;;;;;-1:-1:-1;;11789:36:3;;11785:309;;675:11373:0;6077:5:3;;;;:::i;11785:309::-;11845:24;;;11841:130;;-1:-1:-1;;;;;675:11373:0;;11020:19:3;11016:89;;735:10:11;11118:21:3;11114:90;;6077:5;11213:20;;;;:::i;:::-;675:11373:0;;;;;735:10:11;675:11373:0;-1:-1:-1;675:11373:0;;;;;-1:-1:-1;675:11373:0;;;;;11785:309:3;;11114:90;11162:31;;;675:11373:0;11162:31:3;675:11373:0;;;;;11162:31:3;11016:89;11062:32;;;675:11373:0;11062:32:3;675:11373:0;;;;;11062:32:3;11841:130;11896:60;;;;;675:11373:0;11896:60:3;735:10:11;675:11373:0;;;;;;;;11896:60:3;675:11373:0;;;;;;-1:-1:-1;;675:11373:0;;;;;;2313:62:2;;:::i;:::-;7080:11:0;675:11373;7068:23;;675:11373;;7080:11;675:11373;;;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;9996:4:3;675:11373:0;;:::i;:::-;;;735:10:11;;9996:4:3;:::i;675:11373:0:-;;;;;;-1:-1:-1;;675:11373:0;;;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;;-1:-1:-1;675:11373:0;;;;;;;-1:-1:-1;675:11373:0;;-1:-1:-1;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;675:11373:0;;;;;;:::o;:::-;;;;;;-1:-1:-1;;675:11373:0;;;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;;-1:-1:-1;675:11373:0;;;;;;;-1:-1:-1;675:11373:0;;-1:-1:-1;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;;;675:11373:0;;;;;4746:13:3;675:11373:0;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;;;;;;-1:-1:-1;;675:11373:0;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;675:11373:0;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;;:::o;:::-;6630:26;675:11373;;;;;;;;;:::o;:::-;6659:20;675:11373;;;;;;;;;:::o;:::-;6783:26;675:11373;;;;;;;;;:::o;:::-;6812:27;675:11373;;;;;;;;;:::o;:::-;6842:21;675:11373;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;:::o;666:6::-;;;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;666:6;:::o;:::-;;;;;;;;;;;;:::o;:::-;675:11373;;;666:6;;;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;666:6;:::o;2668:162:2:-;-1:-1:-1;;;;;;;;;;;675:11373:0;-1:-1:-1;;;;;675:11373:0;735:10:11;2727:23:2;2723:101;;2668:162::o;2723:101::-;2773:40;;;-1:-1:-1;2773:40:2;735:10:11;2773:40:2;675:11373:0;;-1:-1:-1;2773:40:2;6484:300:3;;;-1:-1:-1;;;;;675:11373:0;;6567:18:3;6563:86;;-1:-1:-1;;;;;675:11373:0;;6662:16:3;6658:86;;6771:5;;;:::i;:::-;6484:300::o;6563:86::-;6608:30;;;6583:1;6608:30;6583:1;6608:30;675:11373:0;;6583:1:3;6608:30;3784:248:2;-1:-1:-1;;;;;;;;;;;675:11373:0;;-1:-1:-1;;;;;675:11373:0;;;-1:-1:-1;;;;;;666:6:0;;;;;;;675:11373;;;3985:40:2;-1:-1:-1;;3985:40:2;3784:248::o;1428:177:1:-;;;-1:-1:-1;;;;;675:11373:0;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;:::i;:::-;;;;;;1428:177:1;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;11808:17:3;;;675:11373:0;;;;;;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;1428:177:1:o;675:11373:0:-;;;;-1:-1:-1;675:11373:0;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;-1:-1:-1;;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;675:11373:0;1428:177:1:o;675:11373:0:-;;;-1:-1:-1;;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;675:11373:0;;;;;;;;;-1:-1:-1;675:11373:0;;;;10855:487:3;;-1:-1:-1;;;;;675:11373:0;;;11020:19:3;;11016:89;;-1:-1:-1;;;;;675:11373:0;;11118:21:3;;11114:90;;11294:31;11213:20;;675:11373:0;11213:20:3;;:::i;:::-;675:11373:0;-1:-1:-1;675:11373:0;;;;;-1:-1:-1;675:11373:0;;;;;;;11294:31:3;10855:487::o;675:11373:0:-;;;;:::o;:::-;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;7761:2087::-;;;675:11373;7852:11;;;7848:89;;675:11373;;;7966:25;675:11373;;;;;;;;;;;;;;;;;;;7966:25;675:11373;;;;;;;;;;;;8074:10;675:11373;;8065:53;675:11373;;;;;;8073:15;8065:53;:::i;:::-;675:11373;;;8074:10;675:11373;;8128:55;675:11373;;;;;;8136:17;8128:55;:::i;:::-;675:11373;;;8199:34;675:11373;;;;;;;;8198:39;:84;;;7761:2087;8194:194;;7761:2087;675:11373;;;8403:29;675:11373;;;;;;;;8402:34;8398:225;;7761:2087;675:11373;;;9929:17;675:11373;;;;9929:17;675:11373;10007:197;;7761:2087;10214:199;;;7761:2087;10427:11;;:27;;;;7761:2087;10427:61;;;;7761:2087;10423:247;;7761:2087;9929:17;675:11373;-1:-1:-1;;;10692:41:0;:30;675:11373;;;;;;;;;;10692:30;:::i;:::-;675:11373;;;;;10692:41;;:::i;:::-;675:11373;;;;;-1:-1:-1;;;675:11373:0;;;;;;9929:17;675:11373;8713:4;675:11373;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;8723:23;675:11373;-1:-1:-1;8695:51:0;8761:21;;;;7761:2087;8761:38;;;7761:2087;8761:52;;;;7761:2087;8757:161;;;7761:2087;675:11373;;;9834:6;675:11373;;9929:17;675:11373;;;;;8943:10;675:11373;;;;8968:18;675:11373;;;;;;;;8968:50;;;;;7761:2087;8964:96;;;7761:2087;9074:24;;;7761:2087;9070:730;;7761:2087;9834:6;;:::i;9070:730::-;675:11373;9721:51;675:11373;9721:28;9171:3;9145:22;675:11373;9721:68;675:11373;;;;;9145:22;;:::i;:::-;666:6;9171:3;9290:17;675:11373;;9220:23;675:11373;;;;;9220:23;;:::i;:::-;666:6;675:11373;;;;9290:17;;:::i;:::-;666:6;9333:23;;9329:117;;9070:730;9463:24;9459:122;;9070:730;9598:18;9594:104;;9721:28;:::i;:::-;:51;:::i;:68::-;9070:730;;;;9594:104;9656:10;675:11373;9668:14;;675:11373;;-1:-1:-1;;;;;675:11373:0;9668:14;;:::i;9459:122::-;9527:16;675:11373;9545:20;;675:11373;;-1:-1:-1;;;;;675:11373:0;9545:20;;:::i;:::-;9459:122;;9329:117;9411:19;8713:4;;9411:19;;:::i;:::-;9329:117;;9074:24;675:11373;;;;;;9085:13;;9074:24;;8964:96;9034:15;;8964:96;;8968:50;675:11373;;-1:-1:-1;8968:18:0;675:11373;;;;;;;;8968:50;;;8757:161;675:11373;8841:4;675:11373;;;;;;9929:17;675:11373;8713:4;675:11373;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;10930:33;666:6;8841:4;666:6;10930:33;;;:::i;:::-;10978:19;;10974:148;;8757:161;-1:-1:-1;;9929:17:0;675:11373;;-1:-1:-1;;675:11373:0;;;9834:6;8757:161;;;10974:148;666:6;;9996:4:3;;675:11373:0;;-1:-1:-1;;;;;675:11373:0;8713:4;9996::3;:::i;:::-;675:11373:0;;;;;;;;:::i;:::-;10896:1;675:11373;;;;;-1:-1:-1;;675:11373:0;;;;;8713:4;11323:23;;;:::i;:::-;675:11373;666:6;;675:11373;;-1:-1:-1;;;11366:22:0;;-1:-1:-1;;;;;675:11373:0;;;;;;;8723:23;675:11373;;11366:22;;;;;;;;;;;10974:148;11356:32;;;;:::i;:::-;-1:-1:-1;;;;;675:11373:0;;;;;11399:218;;;;;675:11373;;-1:-1:-1;;;11399:218:0;;8723:23;11399:218;;675:11373;;;;8841:4;675:11373;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8713:4;;;;;;;;675:11373;;;;11592:15;675:11373;;;;11399:218;;;;;;;;;;675:11373;11089:21;;;9996:4:3;675:11373:0;;;;;;666:6;;675:11373;8713:4;9996::3;:::i;:::-;666:6:0;;11985:15;675:11373;;;-1:-1:-1;;;11784:255:0;;8713:4;8723:23;11784:255;;675:11373;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;;11592:15;675:11373;;;;;;;;;;;11784:255;;;;;;;10974:148;11784:255;;;;;;;;;;;;:::i;:::-;;;675:11373;;;;11784:255;;10974:148;;675:11373;;;;11784:255;;;;;;675:11373;;666:6;675:11373;;666:6;;;;11399:218;;;;;;;;:::i;:::-;;;;;;675:11373;;666:6;675:11373;;666:6;;;;675:11373;;;-1:-1:-1;;;;;675:11373:0;;;;;-1:-1:-1;675:11373:0;;-1:-1:-1;675:11373:0;;;;;;;;;8841:4;675:11373;;;11399:218;675:11373;;;11366:22;;;;675:11373;11366:22;675:11373;11366:22;;;;;;;:::i;:::-;;;;;675:11373;;666:6;675:11373;;666:6;;;;8761:52;;;;;;:38;675:11373;;;;8786:13;;;-1:-1:-1;8761:38:0;;;:21;675:11373;;;8772:10;;-1:-1:-1;8761:21:0;;10423:247;675:11373;;9929:17;675:11373;;;;;;;;;;;;;;;;;;;;;;;9929:17;675:11373;10423:247;;10427:61;675:11373;;;;;;;10427:61;;:27;10442:12;;;10427:27;;;10214:199;675:11373;;9929:17;675:11373;;;;;;;;;;;;;;;;;;;;;;;9929:17;675:11373;10214:199;;10007:197;675:11373;;;;;;;;;;;;;;;;;;;9929:17;675:11373;10007:197;;;8398:225;675:11373;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;8478:22;675:11373;;;;;8478:22;:::i;:::-;8505:15;675:11373;-1:-1:-1;675:11373:0;8398:225;675:11373;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;8194:194;8316:11;675:11373;8306:21;;675:11373;8194:194;675:11373;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;675:11373:0;;;;;;;8198:84;675:11373;;;;8199:34;675:11373;;;;;;;;8241:41;8198:84;;7848:89;7879:26;;;;;;:::i;7761:2087::-;;;;7862:1;7852:11;;;7848:89;;675:11373;;;;;;;;;;7966:25;675:11373;;;;;;;;;;;;;;;;;;;;7966:25;675:11373;;;;;;;;;;;;8074:10;675:11373;;8065:53;675:11373;;;;;;8073:15;8065:53;:::i;:::-;675:11373;;;8074:10;675:11373;;8128:55;675:11373;;;;;;8136:17;8128:55;:::i;:::-;675:11373;;;8199:34;675:11373;;;;;;;;8198:39;:84;;;7761:2087;8194:194;;7761:2087;675:11373;;;8403:29;675:11373;;;;;;;;8402:34;8398:225;;7761:2087;675:11373;;;9929:17;675:11373;;;;9929:17;675:11373;10007:197;;7761:2087;10214:199;;;7761:2087;10427:11;;:27;;;;7761:2087;10427:61;;;;7761:2087;10423:247;;7761:2087;9929:17;675:11373;-1:-1:-1;;;10692:41:0;:30;675:11373;;;;;;;;;;10692:30;:::i;:41::-;675:11373;;;;;-1:-1:-1;;;675:11373:0;;;;;;9929:17;675:11373;8713:4;675:11373;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;8723:23;675:11373;-1:-1:-1;8695:51:0;8761:21;;;;7761:2087;8761:38;;;7761:2087;8761:52;;;;7761:2087;8757:161;;;7761:2087;675:11373;;9834:6;675:11373;;9929:17;675:11373;;;;;8943:10;675:11373;;;8968:18;675:11373;;;;;;;;8968:50;;;;;7761:2087;8964:96;;;7761:2087;9074:24;;;;9070:730;;9834:6;;:::i;8964:96::-;9034:15;;8964:96;;;8968:50;675:11373;;-1:-1:-1;8968:18:0;675:11373;;;;;;;;8968:50;;;8757:161;675:11373;8841:4;675:11373;;;;;;9929:17;675:11373;8713:4;675:11373;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;10930:33;666:6;8841:4;666:6;10930:33;;;:::i;:::-;10978:19;;10974:148;;8757:161;-1:-1:-1;;9929:17:0;675:11373;;-1:-1:-1;;675:11373:0;;;9834:6;8757:161;;;10974:148;666:6;;9996:4:3;;675:11373:0;;-1:-1:-1;;;;;675:11373:0;8713:4;9996::3;:::i;:::-;675:11373:0;;;;;;;;:::i;:::-;10896:1;675:11373;;;;;-1:-1:-1;;675:11373:0;;;;;8713:4;11323:23;;;:::i;:::-;675:11373;666:6;;675:11373;;-1:-1:-1;;;11366:22:0;;-1:-1:-1;;;;;675:11373:0;;;;;666:6;;675:11373;;8723:23;675:11373;;11366:22;;;;;;;;;;10974:148;11356:32;;;;:::i;:::-;-1:-1:-1;;;;;675:11373:0;;;;;11399:218;;;;;675:11373;;-1:-1:-1;;;11399:218:0;;8723:23;11399:218;;675:11373;;;;8841:4;675:11373;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8713:4;;;;;;;;675:11373;;;;11592:15;675:11373;;;;11399:218;;;;;;;;;;675:11373;11089:21;;;9996:4:3;675:11373:0;;;;;;666:6;;675:11373;8713:4;9996::3;:::i;:::-;666:6:0;;11985:15;675:11373;;;-1:-1:-1;;;11784:255:0;;8713:4;8723:23;11784:255;;675:11373;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;675:11373:0;;;;;;;11592:15;675:11373;;;;;;;;;;;11784:255;;;;;;;10974:148;11784:255;;;;;;;;;;;;:::i;:::-;;;675:11373;;;;11784:255;;10974:148;;675:11373;;;;11784:255;;;;;;675:11373;;666:6;675:11373;;666:6;;;;11399:218;;;;;;;;:::i;:::-;;;;;;675:11373;;666:6;675:11373;;666:6;;;;675:11373;;;;;;;8841:4;675:11373;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11399:218;675:11373;;;11366:22;;;;675:11373;11366:22;675:11373;11366:22;;;;;;;:::i;:::-;;;;;675:11373;;666:6;;;;;;;;8761:52;;;;;;:38;675:11373;;;;8786:13;;;-1:-1:-1;8761:38:0;;;:21;675:11373;;;8772:10;;-1:-1:-1;8761:21:0;;10423:247;675:11373;;9929:17;675:11373;;;;;;;;;;;;;;;;;;;;;;;9929:17;675:11373;10423:247;;10427:61;675:11373;;;;;;;10427:61;;:27;10442:12;;;10427:27;;;10214:199;675:11373;;9929:17;675:11373;;;;;;;;;;;;;;;;;;;;;;;9929:17;675:11373;10214:199;;10007:197;675:11373;;;;;;;;;;;;;;;;;;;9929:17;675:11373;10007:197;;;8398:225;675:11373;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;8478:22;675:11373;;;;;8478:22;:::i;:::-;8505:15;675:11373;-1:-1:-1;675:11373:0;8398:225;675:11373;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;;;;;;;;;8194:194;8316:11;675:11373;8306:21;;675:11373;8194:194;675:11373;;;-1:-1:-1;;;675:11373:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;675:11373:0;;;;;;;8198:84;675:11373;;;;8199:34;675:11373;;;;;;;;8241:41;8198:84;;7848:89;7879:26;;;;;;;7099:1170:3;7862:1:0;;-1:-1:-1;;;;;675:11373:0;;;;8237:25:3;;675:11373:0;;7241:18:3;675:11373:0;;7377:23:3;675:11373:0;-1:-1:-1;;;;;;;;;;;675:11373:0;7377:23:3;:::i;:::-;-1:-1:-1;;;;;;;;;;;675:11373:0;7237:546:3;-1:-1:-1;;;;;675:11373:0;;7797:16:3;675:11373:0;;7793:429:3;675:11373:0;;;;;8237:25:3;7099:1170::o;7793:429::-;675:11373:0;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;7793:429:3;;7237:546;675:11373:0;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;;-1:-1:-1;675:11373:0;-1:-1:-1;;;;;;;;;;;675:11373:0;;;-1:-1:-1;675:11373:0;;7237:546:3;;7099:1170;-1:-1:-1;;;;;675:11373:0;;7241:18:3;675:11373:0;;;8237:25:3;675:11373:0;7377:23:3;675:11373:0;-1:-1:-1;;;;;;;;;;;675:11373:0;7377:23:3;:::i;:::-;-1:-1:-1;;;;;;;;;;;675:11373:0;7237:546:3;-1:-1:-1;;;;;675:11373:0;;7797:16:3;675:11373:0;;;-1:-1:-1;;;;;;;;;;;675:11373:0;;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;;;8237:25:3;7099:1170::o;7793:429::-;675:11373:0;7257:1:3;675:11373:0;-1:-1:-1;;;;;;;;;;;675:11373:0;;;7257:1:3;675:11373:0;;;;;;;7793:429:3;;7237:546;675:11373:0;7257:1:3;675:11373:0;-1:-1:-1;;;;;;;;;;;675:11373:0;;;7257:1:3;675:11373:0;;7488:19:3;;;7484:115;;8237:25;675:11373:0;;;;;7257:1:3;675:11373:0;-1:-1:-1;;;;;;;;;;;675:11373:0;;;;7257:1:3;675:11373:0;;7237:546:3;;7484:115;7534:50;;;;;;7257:1;7534:50;;675:11373:0;;;;;;7257:1:3;7534:50;675:11373:0;;;;;;;;;:::o;:::-;;;8841:4;675:11373;;;;;;;:::o
Swarm Source
none://164736f6c634300081c000a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.