Polygon Sponsored slots available. Book your slot here!
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 8,911 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Gas Add | 65166088 | 1 min ago | IN | 3 POL | 0.00097763 | ||||
Gas Add | 65166084 | 1 min ago | IN | 10 POL | 0.00150539 | ||||
Liquidity Add | 65166074 | 2 mins ago | IN | 0 POL | 0.00585928 | ||||
Toggle Pause | 65165505 | 23 mins ago | IN | 0 POL | 0.00384158 | ||||
Liquidity Remove | 65165490 | 23 mins ago | IN | 0 POL | 0.00594709 | ||||
Toggle Pause | 65165470 | 24 mins ago | IN | 0 POL | 0.00390499 | ||||
Toggle Pause | 65165441 | 25 mins ago | IN | 0 POL | 0.0038842 | ||||
Liquidity Remove | 65165417 | 26 mins ago | IN | 0 POL | 0.006077 | ||||
Toggle Pause | 65165383 | 27 mins ago | IN | 0 POL | 0.00399103 | ||||
Liquidity Remove | 65164091 | 1 hr ago | IN | 0 POL | 0.00510381 | ||||
Pass Remove | 65164011 | 1 hr ago | IN | 0 POL | 0.00256589 | ||||
Toggle Pause | 65163554 | 1 hr ago | IN | 0 POL | 0.00394813 | ||||
Liquidity Add | 65163415 | 1 hr ago | IN | 0 POL | 0.00611503 | ||||
Gas Add | 65163224 | 1 hr ago | IN | 15 POL | 0.00098784 | ||||
Pass Add | 65163067 | 1 hr ago | IN | 0 POL | 0.00314842 | ||||
Toggle Pause | 65162960 | 1 hr ago | IN | 0 POL | 0.00599428 | ||||
Register | 65162942 | 1 hr ago | IN | 0 POL | 0.00677167 | ||||
Toggle Pause | 65162153 | 2 hrs ago | IN | 0 POL | 0.00461793 | ||||
Toggle Pause | 65161340 | 2 hrs ago | IN | 0 POL | 0.00457788 | ||||
Gas Remove | 65161335 | 2 hrs ago | IN | 0 POL | 0.00139848 | ||||
Liquidity Remove | 65161203 | 3 hrs ago | IN | 0 POL | 0.00770048 | ||||
Toggle Pause | 65161154 | 3 hrs ago | IN | 0 POL | 0.00519963 | ||||
Toggle Pause | 65161086 | 3 hrs ago | IN | 0 POL | 0.00536527 | ||||
Toggle Pause | 65161069 | 3 hrs ago | IN | 0 POL | 0.00576398 | ||||
Toggle Pause | 65160829 | 3 hrs ago | IN | 0 POL | 0.00613955 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
65166111 | 27 secs ago | 0.0167721 POL | ||||
65166110 | 29 secs ago | 0.01552266 POL | ||||
65166108 | 33 secs ago | 0.0163581 POL | ||||
65166094 | 1 min ago | 0.01739442 POL | ||||
65166093 | 1 min ago | 0.01545009 POL | ||||
65166092 | 1 min ago | 0.01798016 POL | ||||
65166092 | 1 min ago | 0.01537053 POL | ||||
65166091 | 1 min ago | 0.01595017 POL | ||||
65166083 | 1 min ago | 0.02196809 POL | ||||
65166073 | 2 mins ago | 0.01674006 POL | ||||
65166060 | 2 mins ago | 0.01555162 POL | ||||
65166060 | 2 mins ago | 0.01709459 POL | ||||
65166060 | 2 mins ago | 0.01636673 POL | ||||
65166057 | 2 mins ago | 0.01707828 POL | ||||
65166024 | 4 mins ago | 0.01829872 POL | ||||
65166005 | 4 mins ago | 0.01846828 POL | ||||
65166004 | 4 mins ago | 0.01580253 POL | ||||
65166004 | 4 mins ago | 0.0168102 POL | ||||
65166003 | 4 mins ago | 0.01805166 POL | ||||
65166002 | 4 mins ago | 0.01532246 POL | ||||
65165994 | 5 mins ago | 0.01522726 POL | ||||
65165943 | 7 mins ago | 0.01853198 POL | ||||
65165940 | 7 mins ago | 0.01558908 POL | ||||
65165937 | 7 mins ago | 0.01634438 POL | ||||
65165937 | 7 mins ago | 0.01594445 POL |
Loading...
Loading
Contract Name:
ConectaManager
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
Yes with 1 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT pragma solidity ^0.8.18; import "./interface/INetwork.sol"; import "./interface/ISubAccount.sol"; import "./interface/IFactory.sol"; import "./interface/IStrategy.sol"; import "./utils/LPToken.sol"; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract ConectaManager { IFactory public factory; mapping(address => User) internal users; struct User { address manager; uint256 gasBalance; uint256 passBalance; uint256 bonusBalance; bool status; } struct UserDisplay { address manager; uint256 gasBalance; uint256 passBalance; uint256 bonusBalance; ISubAccount.SubAccountsDisplay[] SubAccounts; } mapping(address => Coin) internal listCoins; struct Coin { bool status; LPToken lp; } event Register(address indexed user, address indexed manager); event BalanceGas( address indexed user, uint256 balance, uint256 value, bool increase, bool is_operation ); event BalancePass( address indexed user, uint256 balance, uint256 value, bool increase, bool is_operation ); event BalanceBonus( address indexed user, uint256 balance, uint256 value, bool increase, bool is_operation ); constructor(IFactory _factory) { factory = _factory; } modifier onlyPayments() { IFactory.Bot memory botInfo = factory.getBotInfo(address(this)); require( botInfo.paymentsAddress == msg.sender, "You must the ConectaPayments" ); _; } modifier onlyOwner() { IFactory.Bot memory botInfo = factory.getBotInfo(address(this)); require( botInfo.owner == msg.sender || address(factory) == msg.sender, "Ownable: caller is not the owner nor the factory" ); _; } modifier onlyRegistered() { require(users[msg.sender].status, "User not registered"); _; } function register(address manager, string memory name) public { if (manager != address(0)) { require(users[manager].status, "Unregistered manager"); } require(!users[msg.sender].status, "User already registered"); users[msg.sender] = User(manager, 0, 0, 0, true); emit Register(msg.sender, manager); _createSubAccount(msg.sender, name); } function subAccount() internal view returns (ISubAccount) { address subAccountAddress = factory .getBotInfo(address(this)) .subAccountAddress; return ISubAccount(subAccountAddress); } function _createSubAccount(address user, string memory name) internal { subAccount().create(user, name); } function createSubAccount(string[] memory names) public onlyRegistered { for (uint256 i = 0; i < names.length; i++) { _createSubAccount(msg.sender, names[i]); } } function getInfoUser() public view returns (UserDisplay memory) { ISubAccount SubAccount = subAccount(); ISubAccount.SubAccounts[] memory subAccounts = SubAccount .getSubAccounts(address(this), msg.sender); uint256 subAccountCount = subAccounts.length; ISubAccount.SubAccountsDisplay[] memory accounts = new ISubAccount.SubAccountsDisplay[]( subAccountCount ); for (uint256 i = 0; i < subAccountCount; i++) { address[] memory _strategies = SubAccount.getStrategies( address(this), msg.sender, subAccounts[i].id ); ISubAccount.StrategyDisplay[] memory strategies = new ISubAccount.StrategyDisplay[]( _strategies.length ); for (uint256 j = 0; j < _strategies.length; j++) { ISubAccount.BalanceStrategy[] memory balances = SubAccount .getBalances( address(this), msg.sender, subAccounts[i].id, _strategies[j] ); strategies[j] = ISubAccount.StrategyDisplay( _strategies[j], balances ); } accounts[i] = ISubAccount.SubAccountsDisplay( subAccounts[i].id, subAccounts[i].name, strategies ); } return UserDisplay( users[msg.sender].manager, users[msg.sender].gasBalance, users[msg.sender].passBalance, users[msg.sender].bonusBalance, accounts ); } function getStrategies() public view returns (IStrategy.Strategy[] memory) { return strategy().getStrategies(address(this)); } function strategy() internal view returns (IStrategy) { address strategyAddress = factory .getBotInfo(address(this)) .strategyAddress; return IStrategy(strategyAddress); } function _lpMint( address to, address coin, uint256 amount ) internal returns (address) { listCoins[coin].lp.mint(to, amount); return address(listCoins[coin].lp); } function LiquidityAdd( string[] memory accountId, address strategyToken, address coin, uint256 amount ) public onlyRegistered { require( strategy().findStrategy(address(this), strategyToken).isActive, "Strategy not found" ); require(coin != address(0), "Invalid contract address"); ERC20 erc20 = ERC20(coin); if (!listCoins[coin].status) { listCoins[coin] = Coin( true, new LPToken( erc20.name(), erc20.symbol(), erc20.decimals(), coin ) ); } ISubAccount SubAccount = subAccount(); for (uint256 i = 0; i < accountId.length; i++) { SubAccount.addLiquidity( msg.sender, accountId[i], strategyToken, amount / accountId.length, coin ); } erc20.transferFrom(msg.sender, address(SubAccount), amount); _lpMint(msg.sender, coin, amount); } function LiquidityRemove( string[] memory accountId, address strategyToken, address coin, uint256 amount ) public onlyRegistered { require( strategy().findStrategy(address(this), strategyToken).isActive, "Strategy not found" ); require(coin != address(0), "Invalid contract address"); for (uint256 i = 0; i < accountId.length; i++) { subAccount().removeLiquidity( msg.sender, accountId[i], strategyToken, amount, coin ); } ERC20 erc20 = ERC20(coin); listCoins[coin].lp.burnFrom(msg.sender, amount * accountId.length); erc20.transfer(msg.sender, amount * accountId.length); } function togglePause( string[] memory accountId, address strategyToken, address coin, bool paused ) public onlyRegistered { require( strategy().findStrategy(address(this), strategyToken).isActive, "Strategy not found" ); require(coin != address(0), "Invalid contract address"); for (uint256 i = 0; i < accountId.length; i++) { subAccount().togglePause( msg.sender, accountId[i], strategyToken, coin, paused ); } } function gasRemove(uint256 amount) public onlyRegistered { require( users[msg.sender].gasBalance >= amount, "Insufficient gas balance" ); users[msg.sender].gasBalance -= amount; payable(msg.sender).transfer(amount); emit BalanceGas( msg.sender, users[msg.sender].gasBalance, amount, false, false ); } function gasAdd() public payable onlyRegistered { require(msg.value >= 0, "Insufficient value"); users[msg.sender].gasBalance += msg.value; emit BalanceGas( msg.sender, users[msg.sender].gasBalance, msg.value, true, false ); } function gasBalance() public view returns (uint256) { return users[msg.sender].gasBalance; } function passAdd(uint256 amount) public onlyRegistered { users[msg.sender].passBalance += amount; address token = factory.getBotInfo(address(this)).tokenPassAddress; ERC20 erc20 = ERC20(token); erc20.transferFrom(msg.sender, address(this), amount); emit BalancePass( msg.sender, users[msg.sender].passBalance, amount, true, false ); } function passRemove(uint256 amount) public onlyRegistered { require( users[msg.sender].passBalance >= amount, "Insufficient pass balance" ); users[msg.sender].passBalance -= amount; address token = factory.getBotInfo(address(this)).tokenPassAddress; ERC20 erc20 = ERC20(token); erc20.transfer(msg.sender, amount); emit BalancePass( msg.sender, users[msg.sender].passBalance, amount, false, false ); } function bonusAdd(uint256 amount, address user) public onlyOwner { require(users[user].status, "User not registered"); users[user].bonusBalance += amount; emit BalanceBonus(user, users[user].bonusBalance, amount, true, false); } function bonusRemove(uint256 amount, address user) public onlyOwner { require(users[user].status, "User not registered"); require( users[user].bonusBalance >= amount, "Insufficient pass balance" ); users[user].bonusBalance -= amount; emit BalanceBonus(user, users[user].bonusBalance, amount, false, false); } function networkBalance(address coin) public view returns (uint256) { address networkAddress = factory .getBotInfo(address(this)) .networkAddress; return INetwork(networkAddress).getBalance( address(this), coin, msg.sender ); } function networkWithdraw( address coin, uint256 amount ) public onlyRegistered { address networkAddress = factory .getBotInfo(address(this)) .networkAddress; INetwork(networkAddress).withdraw(msg.sender, coin, amount); ERC20(coin).transfer(msg.sender, amount); } function passBalance() public view returns (uint256) { return users[msg.sender].passBalance; } function bonusBalance() public view returns (uint256) { return users[msg.sender].bonusBalance; } function rebalancePosition( address user, int256 amount, uint256 gas, address coin, uint256 fee ) public onlyPayments { require(users[user].gasBalance >= gas, "Insufficient gas balance"); require( users[user].passBalance + users[user].bonusBalance >= fee, "Insufficient pass balance" ); uint256 remainingFee = fee; if (users[user].bonusBalance > 0) { if (users[user].bonusBalance >= fee) { users[user].bonusBalance -= fee; remainingFee = 0; } else { remainingFee -= users[user].bonusBalance; users[user].bonusBalance = 0; } emit BalanceBonus( user, users[user].bonusBalance, fee - remainingFee, false, true ); } if (remainingFee > 0) { users[user].passBalance -= remainingFee; emit BalancePass( user, users[user].passBalance, remainingFee, false, true ); } users[user].gasBalance -= gas; if (amount > 0) { listCoins[coin].lp.mint(user, uint256(amount)); } else { listCoins[coin].lp.burnFrom(user, uint256(-1 * amount)); } IFactory.Bot memory botInfo = factory.getBotInfo(address(this)); payable(botInfo.owner).transfer(gas); emit BalanceGas(user, users[user].gasBalance, gas, false, true); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../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. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @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) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @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 { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; import "./extensions/IERC20Metadata.sol"; import "../../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}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * 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 ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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 amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.18; interface IFactory { struct Bot { string prefix; string name; address owner; address managerAddress; address strategyAddress; address subAccountAddress; address paymentsAddress; address tokenPassAddress; address networkAddress; uint16 feeWithdrawNetwork; address feeCollectorNetworkAddress; } function getBotInfo( address contractAddress ) external view returns (Bot memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.18; interface INetwork { function getBalance( address contractAddress, address token, address user ) external view returns (uint256); function withdraw(address user, address token, uint256 amount) external; function payFee( address contractAddress, address user, address token, uint256 amount, string memory id) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.18; interface IStrategy { struct Strategy { string name; address tokenAddress; bool isActive; } function findStrategy( address contractAddress, address tokenAddress ) external view returns (Strategy memory); function addStrategy( string memory name, string memory symbol, address contractAddress ) external; function updateStrategyStatus( address contractAddress, address tokenAddress, bool isActive ) external; function getStrategies( address contractAddress ) external view returns (Strategy[] memory); function payFee( address contractAddress, address user, string memory id, address coin, uint256 amount ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.18; interface ISubAccount { struct StrategyDisplay { address strategyToken; BalanceStrategy[] balance; } struct BalanceStrategy { uint256 amount; address token; uint256 decimals; string ico; string name; bool status; bool paused; } struct SubAccountsDisplay { string id; string name; StrategyDisplay[] strategies; } struct SubAccounts { string id; string name; } function create(address user, string memory name) external; function getSubAccounts( address contractAddress, address user ) external view returns (SubAccounts[] memory); function getStrategies( address contractAddress, address user, string memory accountId ) external view returns (address[] memory); function getBalances( address contractAddress, address user, string memory accountId, address strategyToken ) external view returns (BalanceStrategy[] memory); function addLiquidity( address user, string memory accountId, address strategyToken, uint256 amount, address coin ) external; function removeLiquidity( address user, string memory accountId, address strategyToken, uint256 amount, address coin ) external; function togglePause( address user, string memory accountId, address strategyToken, address coin, bool paused ) external; function position( address contractAddress, address user, string memory accountId, address strategyToken, address coin, int256 amount ) external returns (uint256 oldBalance); }
//SPDX-License-Identifier: MIT pragma solidity ^0.8.18; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract LPToken is ERC20, Ownable { uint8 internal _decimals; struct Origin { string name; string symbol; uint8 decimals; address token; } Origin public coin; constructor( string memory name_, string memory symbol_, uint8 decimals_, address contract_ ) ERC20( string(abi.encodePacked("LP ", name_)), string(abi.encodePacked("LP", symbol_)) ) { _decimals = decimals_; coin = Origin(name_, symbol_, decimals_, contract_); } function decimals() public view virtual override returns (uint8) { return _decimals; } function mint(address to, uint256 amount) public onlyOwner { _mint(to, amount); } function burnFrom(address account, uint256 amount) public onlyOwner { _burn(account, amount); } function getContractOrigin() public view returns (Origin memory) { return coin; } }
{ "optimizer": { "enabled": true, "runs": 1 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IFactory","name":"_factory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bool","name":"increase","type":"bool"},{"indexed":false,"internalType":"bool","name":"is_operation","type":"bool"}],"name":"BalanceBonus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bool","name":"increase","type":"bool"},{"indexed":false,"internalType":"bool","name":"is_operation","type":"bool"}],"name":"BalanceGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bool","name":"increase","type":"bool"},{"indexed":false,"internalType":"bool","name":"is_operation","type":"bool"}],"name":"BalancePass","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"Register","type":"event"},{"inputs":[{"internalType":"string[]","name":"accountId","type":"string[]"},{"internalType":"address","name":"strategyToken","type":"address"},{"internalType":"address","name":"coin","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LiquidityAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"accountId","type":"string[]"},{"internalType":"address","name":"strategyToken","type":"address"},{"internalType":"address","name":"coin","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LiquidityRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"bonusAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bonusBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"bonusRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"names","type":"string[]"}],"name":"createSubAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasAdd","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"gasBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"gasRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getInfoUser","outputs":[{"components":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"gasBalance","type":"uint256"},{"internalType":"uint256","name":"passBalance","type":"uint256"},{"internalType":"uint256","name":"bonusBalance","type":"uint256"},{"components":[{"internalType":"string","name":"id","type":"string"},{"internalType":"string","name":"name","type":"string"},{"components":[{"internalType":"address","name":"strategyToken","type":"address"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"ico","type":"string"},{"internalType":"string","name":"name","type":"string"},{"internalType":"bool","name":"status","type":"bool"},{"internalType":"bool","name":"paused","type":"bool"}],"internalType":"struct ISubAccount.BalanceStrategy[]","name":"balance","type":"tuple[]"}],"internalType":"struct ISubAccount.StrategyDisplay[]","name":"strategies","type":"tuple[]"}],"internalType":"struct ISubAccount.SubAccountsDisplay[]","name":"SubAccounts","type":"tuple[]"}],"internalType":"struct ConectaManager.UserDisplay","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStrategies","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IStrategy.Strategy[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"coin","type":"address"}],"name":"networkBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"coin","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"networkWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"passAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"passBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"passRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"int256","name":"amount","type":"int256"},{"internalType":"uint256","name":"gas","type":"uint256"},{"internalType":"address","name":"coin","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"rebalancePosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"string","name":"name","type":"string"}],"name":"register","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"accountId","type":"string[]"},{"internalType":"address","name":"strategyToken","type":"address"},{"internalType":"address","name":"coin","type":"address"},{"internalType":"bool","name":"paused","type":"bool"}],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162004f1938038062004f1983398101604081905262000034916200005a565b600080546001600160a01b0319166001600160a01b03929092169190911790556200008c565b6000602082840312156200006d57600080fd5b81516001600160a01b03811681146200008557600080fd5b9392505050565b614e7d806200009c6000396000f3fe608060405260043610620001035760003560e01c80626624d0146200010857806316b948d9146200013d578063226cc559146200016457806323a268f1146200018b5780632af0f85c14620001b057806332434a2e14620001d55780637743fc9514620001fa5780637b951c3314620002045780637f3d598514620002295780638e3ca3fe14620002515780638ee6ce65146200027657806398ee142d146200029b578063b217ac9914620002c0578063b3492dbf14620002e5578063b49a60bb146200030a578063ba6e36521462000331578063c2877f021462000358578063c45a0155146200037d578063d4737eaf14620003ae578063d604229514620003d3575b600080fd5b3480156200011557600080fd5b50336000908152600160205260409020600201545b6040519081526020015b60405180910390f35b3480156200014a57600080fd5b5062000155620003f8565b604051620001349190620026aa565b3480156200017157600080fd5b506200018962000183366004620028b5565b62000877565b005b3480156200019857600080fd5b5062000189620001aa36600462002adc565b62000a53565b348015620001bd57600080fd5b5062000189620001cf36600462002b5c565b62000eac565b348015620001e257600080fd5b5062000189620001f436600462002bda565b62001067565b62000189620011f6565b3480156200021157600080fd5b50620001896200022336600462002adc565b62001296565b3480156200023657600080fd5b5033600090815260016020819052604090912001546200012a565b3480156200025e57600080fd5b50620001896200027036600462002c2f565b62001566565b3480156200028357600080fd5b50620001896200029536600462002c62565b620016db565b348015620002a857600080fd5b5062000189620002ba36600462002cb9565b62001c3e565b348015620002cd57600080fd5b506200012a620002df36600462002ce8565b62001dd8565b348015620002f257600080fd5b506200018962000304366004620028b5565b62001edc565b3480156200031757600080fd5b506200032262002070565b60405162000134919062002d08565b3480156200033e57600080fd5b50336000908152600160205260409020600301546200012a565b3480156200036557600080fd5b506200018962000377366004620028b5565b620020f6565b3480156200038a57600080fd5b506000546200039f906001600160a01b031681565b60405162000134919062002d98565b348015620003bb57600080fd5b5062000189620003cd36600462002dac565b620021fe565b348015620003e057600080fd5b5062000189620003f236600462002c2f565b6200227d565b620004346040518060a0016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001606081525090565b6000620004406200242f565b90506000816001600160a01b0316631ebcb30d30336040518363ffffffff1660e01b81526004016200047492919062002dec565b600060405180830381865afa15801562000492573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620004bc919081019062002e52565b80519091506000816001600160401b03811115620004de57620004de620028cf565b6040519080825280602002602001820160405280156200053657816020015b6200052260405180606001604052806060815260200160608152602001606081525090565b815260200190600190039081620004fd5790505b50905060005b828110156200081a576000856001600160a01b031663a0b9bdcc30338886815181106200056d576200056d62002f70565b6020026020010151600001516040518463ffffffff1660e01b8152600401620005999392919062002f86565b600060405180830381865afa158015620005b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620005e1919081019062002fcf565b9050600081516001600160401b03811115620006015762000601620028cf565b6040519080825280602002602001820160405280156200064957816020015b604080518082019091526000815260606020820152815260200190600190039081620006205790505b50905060005b825181101562000786576000886001600160a01b031663dba4d88f30338b898151811062000681576200068162002f70565b602002602001015160000151888781518110620006a257620006a262002f70565b60200260200101516040518563ffffffff1660e01b8152600401620006cb949392919062003073565b600060405180830381865afa158015620006e9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007139190810190620030c0565b9050604051806040016040528085848151811062000735576200073562002f70565b60200260200101516001600160a01b031681526020018281525083838151811062000764576200076462002f70565b60200260200101819052505080806200077d9062003237565b9150506200064f565b506040518060600160405280878581518110620007a757620007a762002f70565b6020026020010151600001518152602001878581518110620007cd57620007cd62002f70565b602002602001015160200151815260200182815250848481518110620007f757620007f762002f70565b602002602001018190525050508080620008119062003237565b9150506200053c565b506040805160a0810182523360008181526001602081815285832080546001600160a01b03168652808301548287015260028101549686019690965292909152905260039091015460608201526080810191909152949350505050565b3360009081526001602052604090206004015460ff16620008b55760405162461bcd60e51b8152600401620008ac9062003253565b60405180910390fd5b33600090815260016020526040902060020154811115620008ea5760405162461bcd60e51b8152600401620008ac9062003280565b33600090815260016020526040812060020180548392906200090e908490620032b3565b90915550506000805460405163fb4aaf0f60e01b81526001600160a01b039091169063fb4aaf0f906200094690309060040162002d98565b600060405180830381865afa15801562000964573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200098e9190810190620032e2565b60e0015160405163a9059cbb60e01b815290915081906001600160a01b0382169063a9059cbb90620009c7903390879060040162003434565b6020604051808303816000875af1158015620009e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a0d91906200344d565b503360008181526001602052604080822060020154905160008051602062004de88339815191529262000a46929188919081906200346d565b60405180910390a2505050565b3360009081526001602052604090206004015460ff1662000a885760405162461bcd60e51b8152600401620008ac9062003253565b62000a92620024b4565b6001600160a01b03166349773ea830856040518363ffffffff1660e01b815260040162000ac192919062002dec565b600060405180830381865afa15801562000adf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000b09919081019062003522565b6040015162000b2c5760405162461bcd60e51b8152600401620008ac906200355a565b6001600160a01b03821662000b555760405162461bcd60e51b8152600401620008ac9062003586565b6001600160a01b038216600090815260026020526040902054829060ff1662000d57576040518060400160405280600115158152602001826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000bcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000bf59190810190620035b8565b836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000c34573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000c5e9190810190620035b8565b846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620035f0565b8760405162000cd29062002648565b62000ce1949392919062003615565b604051809103906000f08015801562000cfe573d6000803e3d6000fd5b506001600160a01b0390811690915284811660009081526002602090815260409091208351815494909201516001600160a81b0319909416911515610100600160a81b0319169190911761010093909216929092021790555b600062000d636200242f565b905060005b865181101562000e1c57816001600160a01b03166322a19a723389848151811062000d975762000d9762002f70565b6020026020010151898b518962000daf919062003663565b8a6040518663ffffffff1660e01b815260040162000dd295949392919062003686565b600060405180830381600087803b15801562000ded57600080fd5b505af115801562000e02573d6000803e3d6000fd5b50505050808062000e139062003237565b91505062000d68565b506040516323b872dd60e01b81526001600160a01b038316906323b872dd9062000e4f90339085908890600401620036c9565b6020604051808303816000875af115801562000e6f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e9591906200344d565b5062000ea333858562002539565b50505050505050565b3360009081526001602052604090206004015460ff1662000ee15760405162461bcd60e51b8152600401620008ac9062003253565b62000eeb620024b4565b6001600160a01b03166349773ea830856040518363ffffffff1660e01b815260040162000f1a92919062002dec565b600060405180830381865afa15801562000f38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000f62919081019062003522565b6040015162000f855760405162461bcd60e51b8152600401620008ac906200355a565b6001600160a01b03821662000fae5760405162461bcd60e51b8152600401620008ac9062003586565b60005b8451811015620010605762000fc56200242f565b6001600160a01b0316637ee3055b3387848151811062000fe95762000fe962002f70565b60200260200101518787876040518663ffffffff1660e01b815260040162001016959493929190620036ed565b600060405180830381600087803b1580156200103157600080fd5b505af115801562001046573d6000803e3d6000fd5b505050508080620010579062003237565b91505062000fb1565b5050505050565b6001600160a01b03821615620010db576001600160a01b03821660009081526001602052604090206004015460ff16620010db5760405162461bcd60e51b81526020600482015260146024820152732ab73932b3b4b9ba32b932b21036b0b730b3b2b960611b6044820152606401620008ac565b3360009081526001602052604090206004015460ff16156200113a5760405162461bcd60e51b8152602060048201526017602482015276155cd95c88185b1c9958591e481c9959da5cdd195c9959604a1b6044820152606401620008ac565b6040805160a0810182526001600160a01b03848116808352600060208085018281528587018381526060870184815260016080890181815233808852958290528a872099518a546001600160a01b031916991698909817895592519288019290925551600287015551600386015592516004909401805460ff191694151594909417909355925190917f98ada70a1cb506dc4591465e1ee9be3fd7a2b6c73ecf3b949009718c9a35151991a3620011f23382620025df565b5050565b3360009081526001602052604090206004015460ff166200122b5760405162461bcd60e51b8152600401620008ac9062003253565b33600090815260016020819052604082200180543492906200124f90849062003732565b9091555050336000818152600160208190526040808320820154905160008051602062004e28833981519152936200128c9334929091906200346d565b60405180910390a2565b3360009081526001602052604090206004015460ff16620012cb5760405162461bcd60e51b8152600401620008ac9062003253565b620012d5620024b4565b6001600160a01b03166349773ea830856040518363ffffffff1660e01b81526004016200130492919062002dec565b600060405180830381865afa15801562001322573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200134c919081019062003522565b604001516200136f5760405162461bcd60e51b8152600401620008ac906200355a565b6001600160a01b038216620013985760405162461bcd60e51b8152600401620008ac9062003586565b60005b84518110156200144a57620013af6200242f565b6001600160a01b031663bb6eec8a33878481518110620013d357620013d362002f70565b60200260200101518786886040518663ffffffff1660e01b81526004016200140095949392919062003686565b600060405180830381600087803b1580156200141b57600080fd5b505af115801562001430573d6000803e3d6000fd5b505050508080620014419062003237565b9150506200139b565b506001600160a01b0380831660009081526002602052604090205485518492610100909204909116906379cc679090339062001487908662003748565b6040518363ffffffff1660e01b8152600401620014a692919062003434565b600060405180830381600087803b158015620014c157600080fd5b505af1158015620014d6573d6000803e3d6000fd5b50505050806001600160a01b031663a9059cbb33875185620014f9919062003748565b6040518363ffffffff1660e01b81526004016200151892919062003434565b6020604051808303816000875af115801562001538573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200155e91906200344d565b505050505050565b6000805460405163fb4aaf0f60e01b81526001600160a01b039091169063fb4aaf0f906200159990309060040162002d98565b600060405180830381865afa158015620015b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620015e19190810190620032e2565b60408101519091506001600160a01b03163314806200160a57506000546001600160a01b031633145b620016295760405162461bcd60e51b8152600401620008ac9062003762565b6001600160a01b03821660009081526001602052604090206004015460ff16620016675760405162461bcd60e51b8152600401620008ac9062003253565b6001600160a01b038216600090815260016020526040812060030180548592906200169490849062003732565b90915550506001600160a01b038216600081815260016020819052604080832060030154905160008051602062004e088339815191529362000a469389929091906200346d565b6000805460405163fb4aaf0f60e01b81526001600160a01b039091169063fb4aaf0f906200170e90309060040162002d98565b600060405180830381865afa1580156200172c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620017569190810190620032e2565b60c08101519091506001600160a01b03163314620017b65760405162461bcd60e51b815260206004820152601c60248201527b596f75206d7573742074686520436f6e656374615061796d656e747360201b6044820152606401620008ac565b6001600160a01b03861660009081526001602081905260409091200154841115620017f55760405162461bcd60e51b8152600401620008ac90620037b2565b6001600160a01b038616600090815260016020526040902060038101546002909101548391620018259162003732565b1015620018465760405162461bcd60e51b8152600401620008ac9062003280565b6001600160a01b03861660009081526001602052604090206003015482901562001969576001600160a01b0387166000908152600160205260409020600301548311620018ca576001600160a01b03871660009081526001602052604081206003018054859290620018ba908490620032b3565b9091555060009150620019119050565b6001600160a01b038716600090815260016020526040902060030154620018f29082620032b3565b6001600160a01b03881660009081526001602052604081206003015590505b6001600160a01b03871660008181526001602052604090206003015460008051602062004e08833981519152906200194a8487620032b3565b600060016040516200196094939291906200346d565b60405180910390a25b8015620019ea576001600160a01b038716600090815260016020526040812060020180548392906200199d908490620032b3565b90915550506001600160a01b038716600081815260016020819052604080832060020154905160008051602062004de883398151915293620019e19387926200346d565b60405180910390a25b6001600160a01b0387166000908152600160208190526040822001805487929062001a17908490620032b3565b9091555050600086131562001aaa576001600160a01b03808516600090815260026020526040908190205490516340c10f1960e01b8152610100909104909116906340c10f199062001a70908a908a9060040162003434565b600060405180830381600087803b15801562001a8b57600080fd5b505af115801562001aa0573d6000803e3d6000fd5b5050505062001b32565b6001600160a01b038085166000908152600260205260409020546101009004166379cc67908862001ade89600019620037e4565b6040518363ffffffff1660e01b815260040162001afd92919062003434565b600060405180830381600087803b15801562001b1857600080fd5b505af115801562001b2d573d6000803e3d6000fd5b505050505b6000805460405163fb4aaf0f60e01b81526001600160a01b039091169063fb4aaf0f9062001b6590309060040162002d98565b600060405180830381865afa15801562001b83573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001bad9190810190620032e2565b905080604001516001600160a01b03166108fc879081150290604051600060405180830381858888f1935050505015801562001bed573d6000803e3d6000fd5b506001600160a01b0388166000818152600160208190526040808320820154905160008051602062004e288339815191529362001c2c938c926200346d565b60405180910390a25050505050505050565b3360009081526001602052604090206004015460ff1662001c735760405162461bcd60e51b8152600401620008ac9062003253565b6000805460405163fb4aaf0f60e01b81526001600160a01b039091169063fb4aaf0f9062001ca690309060040162002d98565b600060405180830381865afa15801562001cc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001cee9190810190620032e2565b6101000151604051636ce5768960e11b81529091506001600160a01b0382169063d9caed129062001d2890339087908790600401620036c9565b600060405180830381600087803b15801562001d4357600080fd5b505af115801562001d58573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038616925063a9059cbb915062001d8c903390869060040162003434565b6020604051808303816000875af115801562001dac573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001dd291906200344d565b50505050565b6000805460405163fb4aaf0f60e01b815282916001600160a01b03169063fb4aaf0f9062001e0b90309060040162002d98565b600060405180830381865afa15801562001e29573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001e539190810190620032e2565b61010001516040516335af580f60e21b81523060048201526001600160a01b0385811660248301523360448301529192509082169063d6bd603c90606401602060405180830381865afa15801562001eaf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ed591906200381a565b9392505050565b3360009081526001602052604090206004015460ff1662001f115760405162461bcd60e51b8152600401620008ac9062003253565b336000908152600160205260408120600201805483929062001f3590849062003732565b90915550506000805460405163fb4aaf0f60e01b81526001600160a01b039091169063fb4aaf0f9062001f6d90309060040162002d98565b600060405180830381865afa15801562001f8b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001fb59190810190620032e2565b60e001516040516323b872dd60e01b815290915081906001600160a01b038216906323b872dd9062001ff090339030908890600401620036c9565b6020604051808303816000875af115801562002010573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200203691906200344d565b5033600081815260016020819052604080832060020154905160008051602062004de88339815191529362000a469389929091906200346d565b60606200207c620024b4565b6001600160a01b03166361819d52306040518263ffffffff1660e01b8152600401620020a9919062002d98565b600060405180830381865afa158015620020c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620020f1919081019062003834565b905090565b3360009081526001602052604090206004015460ff166200212b5760405162461bcd60e51b8152600401620008ac9062003253565b3360009081526001602081905260409091200154811115620021615760405162461bcd60e51b8152600401620008ac90620037b2565b336000908152600160208190526040822001805483929062002185908490620032b3565b9091555050604051339082156108fc029083906000818181858888f19350505050158015620021b8573d6000803e3d6000fd5b5033600081815260016020819052604080832090910154905160008051602062004e2883398151915292620021f3929186919081906200346d565b60405180910390a250565b3360009081526001602052604090206004015460ff16620022335760405162461bcd60e51b8152600401620008ac9062003253565b60005b8151811015620011f25762002268338383815181106200225a576200225a62002f70565b6020026020010151620025df565b80620022748162003237565b91505062002236565b6000805460405163fb4aaf0f60e01b81526001600160a01b039091169063fb4aaf0f90620022b090309060040162002d98565b600060405180830381865afa158015620022ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620022f89190810190620032e2565b60408101519091506001600160a01b03163314806200232157506000546001600160a01b031633145b620023405760405162461bcd60e51b8152600401620008ac9062003762565b6001600160a01b03821660009081526001602052604090206004015460ff166200237e5760405162461bcd60e51b8152600401620008ac9062003253565b6001600160a01b038216600090815260016020526040902060030154831115620023bc5760405162461bcd60e51b8152600401620008ac9062003280565b6001600160a01b03821660009081526001602052604081206003018054859290620023e9908490620032b3565b90915550506001600160a01b03821660008181526001602052604080822060030154905160008051602062004e088339815191529262000a46929188919081906200346d565b6000805460405163fb4aaf0f60e01b815282916001600160a01b03169063fb4aaf0f906200246290309060040162002d98565b600060405180830381865afa15801562002480573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620024aa9190810190620032e2565b60a0015192915050565b6000805460405163fb4aaf0f60e01b815282916001600160a01b03169063fb4aaf0f90620024e790309060040162002d98565b600060405180830381865afa15801562002505573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200252f9190810190620032e2565b6080015192915050565b6001600160a01b038083166000908152600260205260408082205490516340c10f1960e01b8152919261010090910416906340c10f199062002582908790869060040162003434565b600060405180830381600087803b1580156200259d57600080fd5b505af1158015620025b2573d6000803e3d6000fd5b5050506001600160a01b038085166000908152600260205260409020546101009004169150509392505050565b620025e96200242f565b6001600160a01b031663a15ab08d83836040518363ffffffff1660e01b815260040162002618929190620038e3565b600060405180830381600087803b1580156200263357600080fd5b505af11580156200155e573d6000803e3d6000fd5b6114de806200390a83390190565b60005b838110156200267357818101518382015260200162002659565b50506000910152565b600081518084526200269681602086016020860162002656565b601f01601f19169290920160200192915050565b6020815260018060a01b0382511660208201526000602083015180604084015250604083015180606084015250606083015180608084015250608083015160a08084015260c08301815180825260e08501915060e08160051b86010160208401935060005b82811015620028aa5760df1987830301845284518051606084526200273860608501826200267c565b9050602082015184820360208601526200275382826200267c565b91505060408201519150838103604085015280825180835260208301915060208160051b84010160208501945060005b828110156200288957848203601f19018452855180516001600160a01b031683526020908101516040828501819052815190850181905291019060608085019190600582901b86010160005b828110156200286b57605f1987830301845284518051835260018060a01b03602082015116602084015260408101516040840152606081015160e060608501526200281e60e08501826200267c565b9050608082015184820360808601526200283982826200267c565b60a08481015115159087015260c0938401511515939095019290925250506020948501949390930192600101620027cf565b506020998a0199979097019694505050600191909101905062002783565b5080965050505050506020850194506020840193506001810190506200270f565b509695505050505050565b600060208284031215620028c857600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200290a576200290a620028cf565b60405290565b60405160e081016001600160401b03811182821017156200290a576200290a620028cf565b60405161016081016001600160401b03811182821017156200290a576200290a620028cf565b604051601f8201601f191681016001600160401b0381118282101715620029865762002986620028cf565b604052919050565b60006001600160401b03821115620029aa57620029aa620028cf565b5060051b60200190565b60006001600160401b03821115620029d057620029d0620028cf565b50601f01601f191660200190565b600082601f830112620029f057600080fd5b813562002a0762002a0182620029b4565b6200295b565b81815284602083860101111562002a1d57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011262002a4c57600080fd5b8135602062002a5f62002a01836200298e565b82815260059290921b8401810191818101908684111562002a7f57600080fd5b8286015b84811015620028aa5780356001600160401b0381111562002aa45760008081fd5b62002ab48986838b0101620029de565b84525091830191830162002a83565b6001600160a01b038116811462002ad957600080fd5b50565b6000806000806080858703121562002af357600080fd5b84356001600160401b0381111562002b0a57600080fd5b62002b188782880162002a3a565b945050602085013562002b2b8162002ac3565b9250604085013562002b3d8162002ac3565b9396929550929360600135925050565b801515811462002ad957600080fd5b6000806000806080858703121562002b7357600080fd5b84356001600160401b0381111562002b8a57600080fd5b62002b988782880162002a3a565b945050602085013562002bab8162002ac3565b9250604085013562002bbd8162002ac3565b9150606085013562002bcf8162002b4d565b939692955090935050565b6000806040838503121562002bee57600080fd5b823562002bfb8162002ac3565b915060208301356001600160401b0381111562002c1757600080fd5b62002c2585828601620029de565b9150509250929050565b6000806040838503121562002c4357600080fd5b82359150602083013562002c578162002ac3565b809150509250929050565b600080600080600060a0868803121562002c7b57600080fd5b853562002c888162002ac3565b94506020860135935060408601359250606086013562002ca88162002ac3565b949793965091946080013592915050565b6000806040838503121562002ccd57600080fd5b823562002cda8162002ac3565b946020939093013593505050565b60006020828403121562002cfb57600080fd5b813562001ed58162002ac3565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101562002d8a57603f1989840301855281516060815181865262002d58828701826200267c565b838b01516001600160a01b0316878c015292890151151595890195909552509487019492509086019060010162002d2f565b509098975050505050505050565b6001600160a01b0391909116815260200190565b60006020828403121562002dbf57600080fd5b81356001600160401b0381111562002dd657600080fd5b62002de48482850162002a3a565b949350505050565b6001600160a01b0392831681529116602082015260400190565b600082601f83011262002e1857600080fd5b815162002e2962002a0182620029b4565b81815284602083860101111562002e3f57600080fd5b62002de482602083016020870162002656565b6000602080838503121562002e6657600080fd5b82516001600160401b038082111562002e7e57600080fd5b818501915085601f83011262002e9357600080fd5b815162002ea462002a01826200298e565b81815260059190911b8301840190848101908883111562002ec457600080fd5b8585015b8381101562002f635780518581111562002ee25760008081fd5b86016040818c03601f190181131562002efb5760008081fd5b62002f05620028e5565b898301518881111562002f185760008081fd5b62002f288e8c8387010162002e06565b82525090820151908782111562002f3f5760008081fd5b62002f4f8d8b8486010162002e06565b818b01528552505091860191860162002ec8565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0384811682528316602082015260606040820181905260009062002fb4908301846200267c565b95945050505050565b805162002fca8162002ac3565b919050565b6000602080838503121562002fe357600080fd5b82516001600160401b0381111562002ffa57600080fd5b8301601f810185136200300c57600080fd5b80516200301d62002a01826200298e565b81815260059190911b820183019083810190878311156200303d57600080fd5b928401925b8284101562003068578351620030588162002ac3565b8252928401929084019062003042565b979650505050505050565b600060018060a01b0380871683528086166020840152608060408401526200309f60808401866200267c565b915080841660608401525095945050505050565b805162002fca8162002b4d565b60006020808385031215620030d457600080fd5b82516001600160401b0380821115620030ec57600080fd5b818501915085601f8301126200310157600080fd5b81516200311262002a01826200298e565b81815260059190911b830184019084810190888311156200313257600080fd5b8585015b8381101562002f63578051858111156200314f57600080fd5b860160e0818c03601f19011215620031675760008081fd5b6200317162002910565b88820151815260406200318681840162002fbd565b8a83015260608084015182840152608091508184015189811115620031ab5760008081fd5b620031bb8f8d8388010162002e06565b82850152505060a08084015189811115620031d65760008081fd5b620031e68f8d8388010162002e06565b838501525060c09150620031fc828501620030b3565b908301526200320e60e08401620030b3565b9082015284525091860191860162003136565b634e487b7160e01b600052601160045260246000fd5b6000600182016200324c576200324c62003221565b5060010190565b602080825260139082015272155cd95c881b9bdd081c9959da5cdd195c9959606a1b604082015260600190565b602080825260199082015278496e73756666696369656e7420706173732062616c616e636560381b604082015260600190565b81810381811115620032c957620032c962003221565b92915050565b805161ffff8116811462002fca57600080fd5b600060208284031215620032f557600080fd5b81516001600160401b03808211156200330d57600080fd5b9083019061016082860312156200332357600080fd5b6200332d62002935565b8251828111156200333d57600080fd5b6200334b8782860162002e06565b8252506020830151828111156200336157600080fd5b6200336f8782860162002e06565b602083015250620033836040840162002fbd565b6040820152620033966060840162002fbd565b6060820152620033a96080840162002fbd565b6080820152620033bc60a0840162002fbd565b60a0820152620033cf60c0840162002fbd565b60c0820152620033e260e0840162002fbd565b60e08201526101009150620033f982840162002fbd565b8282015261012091506200340f828401620032cf565b8282015261014091506200342582840162002fbd565b91810191909152949350505050565b6001600160a01b03929092168252602082015260400190565b6000602082840312156200346057600080fd5b815162001ed58162002b4d565b9384526020840192909252151560408301521515606082015260800190565b6000606082840312156200349f57600080fd5b604051606081016001600160401b038082118383101715620034c557620034c5620028cf565b816040528293508451915080821115620034de57600080fd5b50620034ed8582860162002e06565b8252506020830151620035008162002ac3565b60208201526040830151620035158162002b4d565b6040919091015292915050565b6000602082840312156200353557600080fd5b81516001600160401b038111156200354c57600080fd5b62002de4848285016200348c565b60208082526012908201527114dd1c985d1959de481b9bdd08199bdd5b9960721b604082015260600190565b602080825260189082015277496e76616c696420636f6e7472616374206164647265737360401b604082015260600190565b600060208284031215620035cb57600080fd5b81516001600160401b03811115620035e257600080fd5b62002de48482850162002e06565b6000602082840312156200360357600080fd5b815160ff8116811462001ed557600080fd5b6080815260006200362a60808301876200267c565b82810360208401526200363e81876200267c565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6000826200368157634e487b7160e01b600052601260045260246000fd5b500490565b600060018060a01b03808816835260a06020840152620036aa60a08401886200267c565b9581166040840152606083019490945250911660809091015292915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060018060a01b03808816835260a060208401526200371160a08401886200267c565b95811660408401529390931660608201529015156080909101525092915050565b80820180821115620032c957620032c962003221565b8082028115828204841417620032c957620032c962003221565b60208082526030908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526f206e6f722074686520666163746f727960801b606082015260800190565b602080825260189082015277496e73756666696369656e74206761732062616c616e636560401b604082015260600190565b80820260008212600160ff1b8414161562003803576200380362003221565b8181058314821517620032c957620032c962003221565b6000602082840312156200382d57600080fd5b5051919050565b600060208083850312156200384857600080fd5b82516001600160401b03808211156200386057600080fd5b818501915085601f8301126200387557600080fd5b81516200388662002a01826200298e565b81815260059190911b83018401908481019088831115620038a657600080fd5b8585015b8381101562002f6357805185811115620038c45760008081fd5b620038d48b89838a01016200348c565b845250918601918601620038aa565b6001600160a01b038316815260406020820181905260009062002de4908301846200267c56fe60806040523480156200001157600080fd5b50604051620014de380380620014de83398101604081905262000034916200028a565b836040516020016200004791906200032e565b604051602081830303815290604052836040516020016200006991906200035b565b60408051601f19818403018152919052600362000087838262000416565b50600462000096828262000416565b505050620000b3620000ad6200016760201b60201c565b6200016b565b6005805460ff60a01b1916600160a01b60ff8516908102919091179091556040805160808101825286815260208101869052908101919091526001600160a01b03821660608201526006806200010a878262000416565b506020820151600182019062000121908262000416565b506040820151600290910180546060909301516001600160a01b0316610100026001600160a81b031990931660ff9092169190911791909117905550620004e292505050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001f0578181015183820152602001620001d6565b50506000910152565b600082601f8301126200020b57600080fd5b81516001600160401b0380821115620002285762000228620001bd565b604051601f8301601f19908116603f01168101908282118183101715620002535762000253620001bd565b816040528381528660208588010111156200026d57600080fd5b62000280846020830160208901620001d3565b9695505050505050565b60008060008060808587031215620002a157600080fd5b84516001600160401b0380821115620002b957600080fd5b620002c788838901620001f9565b95506020870151915080821115620002de57600080fd5b50620002ed87828801620001f9565b935050604085015160ff811681146200030557600080fd5b60608601519092506001600160a01b03811681146200032357600080fd5b939692955090935050565b6202628160ed1b8152600082516200034e816003850160208701620001d3565b9190910160030192915050565b6104c560f41b8152600082516200037a816002850160208701620001d3565b9190910160020192915050565b600181811c908216806200039c57607f821691505b602082108103620003bd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200041157600081815260208120601f850160051c81016020861015620003ec5750805b601f850160051c820191505b818110156200040d57828155600101620003f8565b5050505b505050565b81516001600160401b03811115620004325762000432620001bd565b6200044a8162000443845462000387565b84620003c3565b602080601f831160018114620004825760008415620004695750858301515b600019600386901b1c1916600185901b1785556200040d565b600085815260208120601f198616915b82811015620004b35788860151825594840194600190910190840162000492565b5085821015620004d25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610fec80620004f26000396000f3fe608060405234801561001057600080fd5b50600436106100e65760003560e01c806306fdde03146100eb578063095ea7b31461010957806311df99951461012c57806318160ddd1461014457806323b872dd14610156578063313ce56714610169578063395093511461018857806340c10f191461019b57806370a08231146101b0578063715018a6146101d957806379cc6790146101e15780638da5cb5b146101f457806395d89b4114610214578063a457c2d71461021c578063a9059cbb1461022f578063dd62ed3e14610242578063f2fde38b14610255578063fd5d3e0114610268575b600080fd5b6100f361027d565b6040516101009190610d9f565b60405180910390f35b61011c610117366004610dd5565b61030f565b6040519015158152602001610100565b610134610329565b6040516101009493929190610dff565b6002545b604051908152602001610100565b61011c610164366004610e49565b610463565b600554600160a01b900460ff1660405160ff9091168152602001610100565b61011c610196366004610dd5565b610487565b6101ae6101a9366004610dd5565b6104a9565b005b6101486101be366004610e85565b6001600160a01b031660009081526020819052604090205490565b6101ae6104bf565b6101ae6101ef366004610dd5565b6104d3565b6101fc6104e5565b6040516001600160a01b039091168152602001610100565b6100f36104f4565b61011c61022a366004610dd5565b610503565b61011c61023d366004610dd5565b610583565b610148610250366004610ea0565b610591565b6101ae610263366004610e85565b6105bc565b610270610635565b6040516101009190610ed3565b60606003805461028c90610f3b565b80601f01602080910402602001604051908101604052809291908181526020018280546102b890610f3b565b80156103055780601f106102da57610100808354040283529160200191610305565b820191906000526020600020905b8154815290600101906020018083116102e857829003601f168201915b5050505050905090565b60003361031d8185856107b2565b60019150505b92915050565b60068054819061033890610f3b565b80601f016020809104026020016040519081016040528092919081815260200182805461036490610f3b565b80156103b15780601f10610386576101008083540402835291602001916103b1565b820191906000526020600020905b81548152906001019060200180831161039457829003601f168201915b5050505050908060010180546103c690610f3b565b80601f01602080910402602001604051908101604052809291908181526020018280546103f290610f3b565b801561043f5780601f106104145761010080835404028352916020019161043f565b820191906000526020600020905b81548152906001019060200180831161042257829003601f168201915b5050506002909301549192505060ff8116906001600160a01b036101009091041684565b6000336104718582856108d7565b61047c858585610951565b506001949350505050565b60003361031d81858561049a8383610591565b6104a49190610f75565b6107b2565b6104b1610ae3565b6104bb8282610b42565b5050565b6104c7610ae3565b6104d16000610bef565b565b6104db610ae3565b6104bb8282610c41565b6005546001600160a01b031690565b60606004805461028c90610f3b565b600033816105118286610591565b9050838110156105765760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61047c82868684036107b2565b60003361031d818585610951565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6105c4610ae3565b6001600160a01b0381166106295760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161056d565b61063281610bef565b50565b604080516080810182526060808252602082018190526000928201839052810191909152600660405180608001604052908160008201805461067690610f3b565b80601f01602080910402602001604051908101604052809291908181526020018280546106a290610f3b565b80156106ef5780601f106106c4576101008083540402835291602001916106ef565b820191906000526020600020905b8154815290600101906020018083116106d257829003601f168201915b5050505050815260200160018201805461070890610f3b565b80601f016020809104026020016040519081016040528092919081815260200182805461073490610f3b565b80156107815780601f1061075657610100808354040283529160200191610781565b820191906000526020600020905b81548152906001019060200180831161076457829003601f168201915b50505091835250506002919091015460ff8116602083015261010090046001600160a01b0316604090910152919050565b6001600160a01b0383166108145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161056d565b6001600160a01b0382166108755760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161056d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006108e38484610591565b9050600019811461094b578181101561093e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161056d565b61094b84848484036107b2565b50505050565b6001600160a01b0383166109b55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161056d565b6001600160a01b038216610a175760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161056d565b6001600160a01b03831660009081526020819052604090205481811015610a8f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161056d565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020610f97833981519152910160405180910390a361094b565b33610aec6104e5565b6001600160a01b0316146104d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161056d565b6001600160a01b038216610b985760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161056d565b8060026000828254610baa9190610f75565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020610f97833981519152910160405180910390a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216610ca15760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161056d565b6001600160a01b03821660009081526020819052604090205481811015610d155760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161056d565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020610f9783398151915291016108ca565b6000815180845260005b81811015610d7f57602081850181015186830182015201610d63565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610db26020830184610d59565b9392505050565b80356001600160a01b0381168114610dd057600080fd5b919050565b60008060408385031215610de857600080fd5b610df183610db9565b946020939093013593505050565b608081526000610e126080830187610d59565b8281036020840152610e248187610d59565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b600080600060608486031215610e5e57600080fd5b610e6784610db9565b9250610e7560208501610db9565b9150604084013590509250925092565b600060208284031215610e9757600080fd5b610db282610db9565b60008060408385031215610eb357600080fd5b610ebc83610db9565b9150610eca60208401610db9565b90509250929050565b602081526000825160806020840152610eef60a0840182610d59565b90506020840151601f19848303016040850152610f0c8282610d59565b604086015160ff16606086810191909152909501516001600160a01b0316608090940193909352509192915050565b600181811c90821680610f4f57607f821691505b602082108103610f6f57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561032357634e487b7160e01b600052601160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220b813a46f9c5a2380119e806813d4f3fd5eb63f3bb7f48c535abda1e0bcb5586164736f6c634300081200338148f0cf2cc666d3bd5197297e12f548e21963e9445d59d52948db08d6be4f3cebad5c8ca3dc23fd705a8985e332663a6e1f12f5a32af1492216caf2d747e127b3d3a990655ea7a52a1f1e6be2a45e3688ff4ba917dc2d8ef08fe9a407a0a1caa264697066735822122063c8fae7f8c60c131825e1b89ce0a27de4c50c2a8528aa3d44aaaf3d424a685864736f6c63430008120033000000000000000000000000571f715285bf071d53a38c526ff4a6afcb623cc0
Deployed Bytecode
0x608060405260043610620001035760003560e01c80626624d0146200010857806316b948d9146200013d578063226cc559146200016457806323a268f1146200018b5780632af0f85c14620001b057806332434a2e14620001d55780637743fc9514620001fa5780637b951c3314620002045780637f3d598514620002295780638e3ca3fe14620002515780638ee6ce65146200027657806398ee142d146200029b578063b217ac9914620002c0578063b3492dbf14620002e5578063b49a60bb146200030a578063ba6e36521462000331578063c2877f021462000358578063c45a0155146200037d578063d4737eaf14620003ae578063d604229514620003d3575b600080fd5b3480156200011557600080fd5b50336000908152600160205260409020600201545b6040519081526020015b60405180910390f35b3480156200014a57600080fd5b5062000155620003f8565b604051620001349190620026aa565b3480156200017157600080fd5b506200018962000183366004620028b5565b62000877565b005b3480156200019857600080fd5b5062000189620001aa36600462002adc565b62000a53565b348015620001bd57600080fd5b5062000189620001cf36600462002b5c565b62000eac565b348015620001e257600080fd5b5062000189620001f436600462002bda565b62001067565b62000189620011f6565b3480156200021157600080fd5b50620001896200022336600462002adc565b62001296565b3480156200023657600080fd5b5033600090815260016020819052604090912001546200012a565b3480156200025e57600080fd5b50620001896200027036600462002c2f565b62001566565b3480156200028357600080fd5b50620001896200029536600462002c62565b620016db565b348015620002a857600080fd5b5062000189620002ba36600462002cb9565b62001c3e565b348015620002cd57600080fd5b506200012a620002df36600462002ce8565b62001dd8565b348015620002f257600080fd5b506200018962000304366004620028b5565b62001edc565b3480156200031757600080fd5b506200032262002070565b60405162000134919062002d08565b3480156200033e57600080fd5b50336000908152600160205260409020600301546200012a565b3480156200036557600080fd5b506200018962000377366004620028b5565b620020f6565b3480156200038a57600080fd5b506000546200039f906001600160a01b031681565b60405162000134919062002d98565b348015620003bb57600080fd5b5062000189620003cd36600462002dac565b620021fe565b348015620003e057600080fd5b5062000189620003f236600462002c2f565b6200227d565b620004346040518060a0016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001606081525090565b6000620004406200242f565b90506000816001600160a01b0316631ebcb30d30336040518363ffffffff1660e01b81526004016200047492919062002dec565b600060405180830381865afa15801562000492573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620004bc919081019062002e52565b80519091506000816001600160401b03811115620004de57620004de620028cf565b6040519080825280602002602001820160405280156200053657816020015b6200052260405180606001604052806060815260200160608152602001606081525090565b815260200190600190039081620004fd5790505b50905060005b828110156200081a576000856001600160a01b031663a0b9bdcc30338886815181106200056d576200056d62002f70565b6020026020010151600001516040518463ffffffff1660e01b8152600401620005999392919062002f86565b600060405180830381865afa158015620005b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620005e1919081019062002fcf565b9050600081516001600160401b03811115620006015762000601620028cf565b6040519080825280602002602001820160405280156200064957816020015b604080518082019091526000815260606020820152815260200190600190039081620006205790505b50905060005b825181101562000786576000886001600160a01b031663dba4d88f30338b898151811062000681576200068162002f70565b602002602001015160000151888781518110620006a257620006a262002f70565b60200260200101516040518563ffffffff1660e01b8152600401620006cb949392919062003073565b600060405180830381865afa158015620006e9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007139190810190620030c0565b9050604051806040016040528085848151811062000735576200073562002f70565b60200260200101516001600160a01b031681526020018281525083838151811062000764576200076462002f70565b60200260200101819052505080806200077d9062003237565b9150506200064f565b506040518060600160405280878581518110620007a757620007a762002f70565b6020026020010151600001518152602001878581518110620007cd57620007cd62002f70565b602002602001015160200151815260200182815250848481518110620007f757620007f762002f70565b602002602001018190525050508080620008119062003237565b9150506200053c565b506040805160a0810182523360008181526001602081815285832080546001600160a01b03168652808301548287015260028101549686019690965292909152905260039091015460608201526080810191909152949350505050565b3360009081526001602052604090206004015460ff16620008b55760405162461bcd60e51b8152600401620008ac9062003253565b60405180910390fd5b33600090815260016020526040902060020154811115620008ea5760405162461bcd60e51b8152600401620008ac9062003280565b33600090815260016020526040812060020180548392906200090e908490620032b3565b90915550506000805460405163fb4aaf0f60e01b81526001600160a01b039091169063fb4aaf0f906200094690309060040162002d98565b600060405180830381865afa15801562000964573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200098e9190810190620032e2565b60e0015160405163a9059cbb60e01b815290915081906001600160a01b0382169063a9059cbb90620009c7903390879060040162003434565b6020604051808303816000875af1158015620009e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a0d91906200344d565b503360008181526001602052604080822060020154905160008051602062004de88339815191529262000a46929188919081906200346d565b60405180910390a2505050565b3360009081526001602052604090206004015460ff1662000a885760405162461bcd60e51b8152600401620008ac9062003253565b62000a92620024b4565b6001600160a01b03166349773ea830856040518363ffffffff1660e01b815260040162000ac192919062002dec565b600060405180830381865afa15801562000adf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000b09919081019062003522565b6040015162000b2c5760405162461bcd60e51b8152600401620008ac906200355a565b6001600160a01b03821662000b555760405162461bcd60e51b8152600401620008ac9062003586565b6001600160a01b038216600090815260026020526040902054829060ff1662000d57576040518060400160405280600115158152602001826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000bcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000bf59190810190620035b8565b836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000c34573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000c5e9190810190620035b8565b846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620035f0565b8760405162000cd29062002648565b62000ce1949392919062003615565b604051809103906000f08015801562000cfe573d6000803e3d6000fd5b506001600160a01b0390811690915284811660009081526002602090815260409091208351815494909201516001600160a81b0319909416911515610100600160a81b0319169190911761010093909216929092021790555b600062000d636200242f565b905060005b865181101562000e1c57816001600160a01b03166322a19a723389848151811062000d975762000d9762002f70565b6020026020010151898b518962000daf919062003663565b8a6040518663ffffffff1660e01b815260040162000dd295949392919062003686565b600060405180830381600087803b15801562000ded57600080fd5b505af115801562000e02573d6000803e3d6000fd5b50505050808062000e139062003237565b91505062000d68565b506040516323b872dd60e01b81526001600160a01b038316906323b872dd9062000e4f90339085908890600401620036c9565b6020604051808303816000875af115801562000e6f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e9591906200344d565b5062000ea333858562002539565b50505050505050565b3360009081526001602052604090206004015460ff1662000ee15760405162461bcd60e51b8152600401620008ac9062003253565b62000eeb620024b4565b6001600160a01b03166349773ea830856040518363ffffffff1660e01b815260040162000f1a92919062002dec565b600060405180830381865afa15801562000f38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000f62919081019062003522565b6040015162000f855760405162461bcd60e51b8152600401620008ac906200355a565b6001600160a01b03821662000fae5760405162461bcd60e51b8152600401620008ac9062003586565b60005b8451811015620010605762000fc56200242f565b6001600160a01b0316637ee3055b3387848151811062000fe95762000fe962002f70565b60200260200101518787876040518663ffffffff1660e01b815260040162001016959493929190620036ed565b600060405180830381600087803b1580156200103157600080fd5b505af115801562001046573d6000803e3d6000fd5b505050508080620010579062003237565b91505062000fb1565b5050505050565b6001600160a01b03821615620010db576001600160a01b03821660009081526001602052604090206004015460ff16620010db5760405162461bcd60e51b81526020600482015260146024820152732ab73932b3b4b9ba32b932b21036b0b730b3b2b960611b6044820152606401620008ac565b3360009081526001602052604090206004015460ff16156200113a5760405162461bcd60e51b8152602060048201526017602482015276155cd95c88185b1c9958591e481c9959da5cdd195c9959604a1b6044820152606401620008ac565b6040805160a0810182526001600160a01b03848116808352600060208085018281528587018381526060870184815260016080890181815233808852958290528a872099518a546001600160a01b031916991698909817895592519288019290925551600287015551600386015592516004909401805460ff191694151594909417909355925190917f98ada70a1cb506dc4591465e1ee9be3fd7a2b6c73ecf3b949009718c9a35151991a3620011f23382620025df565b5050565b3360009081526001602052604090206004015460ff166200122b5760405162461bcd60e51b8152600401620008ac9062003253565b33600090815260016020819052604082200180543492906200124f90849062003732565b9091555050336000818152600160208190526040808320820154905160008051602062004e28833981519152936200128c9334929091906200346d565b60405180910390a2565b3360009081526001602052604090206004015460ff16620012cb5760405162461bcd60e51b8152600401620008ac9062003253565b620012d5620024b4565b6001600160a01b03166349773ea830856040518363ffffffff1660e01b81526004016200130492919062002dec565b600060405180830381865afa15801562001322573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200134c919081019062003522565b604001516200136f5760405162461bcd60e51b8152600401620008ac906200355a565b6001600160a01b038216620013985760405162461bcd60e51b8152600401620008ac9062003586565b60005b84518110156200144a57620013af6200242f565b6001600160a01b031663bb6eec8a33878481518110620013d357620013d362002f70565b60200260200101518786886040518663ffffffff1660e01b81526004016200140095949392919062003686565b600060405180830381600087803b1580156200141b57600080fd5b505af115801562001430573d6000803e3d6000fd5b505050508080620014419062003237565b9150506200139b565b506001600160a01b0380831660009081526002602052604090205485518492610100909204909116906379cc679090339062001487908662003748565b6040518363ffffffff1660e01b8152600401620014a692919062003434565b600060405180830381600087803b158015620014c157600080fd5b505af1158015620014d6573d6000803e3d6000fd5b50505050806001600160a01b031663a9059cbb33875185620014f9919062003748565b6040518363ffffffff1660e01b81526004016200151892919062003434565b6020604051808303816000875af115801562001538573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200155e91906200344d565b505050505050565b6000805460405163fb4aaf0f60e01b81526001600160a01b039091169063fb4aaf0f906200159990309060040162002d98565b600060405180830381865afa158015620015b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620015e19190810190620032e2565b60408101519091506001600160a01b03163314806200160a57506000546001600160a01b031633145b620016295760405162461bcd60e51b8152600401620008ac9062003762565b6001600160a01b03821660009081526001602052604090206004015460ff16620016675760405162461bcd60e51b8152600401620008ac9062003253565b6001600160a01b038216600090815260016020526040812060030180548592906200169490849062003732565b90915550506001600160a01b038216600081815260016020819052604080832060030154905160008051602062004e088339815191529362000a469389929091906200346d565b6000805460405163fb4aaf0f60e01b81526001600160a01b039091169063fb4aaf0f906200170e90309060040162002d98565b600060405180830381865afa1580156200172c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620017569190810190620032e2565b60c08101519091506001600160a01b03163314620017b65760405162461bcd60e51b815260206004820152601c60248201527b596f75206d7573742074686520436f6e656374615061796d656e747360201b6044820152606401620008ac565b6001600160a01b03861660009081526001602081905260409091200154841115620017f55760405162461bcd60e51b8152600401620008ac90620037b2565b6001600160a01b038616600090815260016020526040902060038101546002909101548391620018259162003732565b1015620018465760405162461bcd60e51b8152600401620008ac9062003280565b6001600160a01b03861660009081526001602052604090206003015482901562001969576001600160a01b0387166000908152600160205260409020600301548311620018ca576001600160a01b03871660009081526001602052604081206003018054859290620018ba908490620032b3565b9091555060009150620019119050565b6001600160a01b038716600090815260016020526040902060030154620018f29082620032b3565b6001600160a01b03881660009081526001602052604081206003015590505b6001600160a01b03871660008181526001602052604090206003015460008051602062004e08833981519152906200194a8487620032b3565b600060016040516200196094939291906200346d565b60405180910390a25b8015620019ea576001600160a01b038716600090815260016020526040812060020180548392906200199d908490620032b3565b90915550506001600160a01b038716600081815260016020819052604080832060020154905160008051602062004de883398151915293620019e19387926200346d565b60405180910390a25b6001600160a01b0387166000908152600160208190526040822001805487929062001a17908490620032b3565b9091555050600086131562001aaa576001600160a01b03808516600090815260026020526040908190205490516340c10f1960e01b8152610100909104909116906340c10f199062001a70908a908a9060040162003434565b600060405180830381600087803b15801562001a8b57600080fd5b505af115801562001aa0573d6000803e3d6000fd5b5050505062001b32565b6001600160a01b038085166000908152600260205260409020546101009004166379cc67908862001ade89600019620037e4565b6040518363ffffffff1660e01b815260040162001afd92919062003434565b600060405180830381600087803b15801562001b1857600080fd5b505af115801562001b2d573d6000803e3d6000fd5b505050505b6000805460405163fb4aaf0f60e01b81526001600160a01b039091169063fb4aaf0f9062001b6590309060040162002d98565b600060405180830381865afa15801562001b83573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001bad9190810190620032e2565b905080604001516001600160a01b03166108fc879081150290604051600060405180830381858888f1935050505015801562001bed573d6000803e3d6000fd5b506001600160a01b0388166000818152600160208190526040808320820154905160008051602062004e288339815191529362001c2c938c926200346d565b60405180910390a25050505050505050565b3360009081526001602052604090206004015460ff1662001c735760405162461bcd60e51b8152600401620008ac9062003253565b6000805460405163fb4aaf0f60e01b81526001600160a01b039091169063fb4aaf0f9062001ca690309060040162002d98565b600060405180830381865afa15801562001cc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001cee9190810190620032e2565b6101000151604051636ce5768960e11b81529091506001600160a01b0382169063d9caed129062001d2890339087908790600401620036c9565b600060405180830381600087803b15801562001d4357600080fd5b505af115801562001d58573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038616925063a9059cbb915062001d8c903390869060040162003434565b6020604051808303816000875af115801562001dac573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001dd291906200344d565b50505050565b6000805460405163fb4aaf0f60e01b815282916001600160a01b03169063fb4aaf0f9062001e0b90309060040162002d98565b600060405180830381865afa15801562001e29573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001e539190810190620032e2565b61010001516040516335af580f60e21b81523060048201526001600160a01b0385811660248301523360448301529192509082169063d6bd603c90606401602060405180830381865afa15801562001eaf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ed591906200381a565b9392505050565b3360009081526001602052604090206004015460ff1662001f115760405162461bcd60e51b8152600401620008ac9062003253565b336000908152600160205260408120600201805483929062001f3590849062003732565b90915550506000805460405163fb4aaf0f60e01b81526001600160a01b039091169063fb4aaf0f9062001f6d90309060040162002d98565b600060405180830381865afa15801562001f8b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001fb59190810190620032e2565b60e001516040516323b872dd60e01b815290915081906001600160a01b038216906323b872dd9062001ff090339030908890600401620036c9565b6020604051808303816000875af115801562002010573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200203691906200344d565b5033600081815260016020819052604080832060020154905160008051602062004de88339815191529362000a469389929091906200346d565b60606200207c620024b4565b6001600160a01b03166361819d52306040518263ffffffff1660e01b8152600401620020a9919062002d98565b600060405180830381865afa158015620020c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620020f1919081019062003834565b905090565b3360009081526001602052604090206004015460ff166200212b5760405162461bcd60e51b8152600401620008ac9062003253565b3360009081526001602081905260409091200154811115620021615760405162461bcd60e51b8152600401620008ac90620037b2565b336000908152600160208190526040822001805483929062002185908490620032b3565b9091555050604051339082156108fc029083906000818181858888f19350505050158015620021b8573d6000803e3d6000fd5b5033600081815260016020819052604080832090910154905160008051602062004e2883398151915292620021f3929186919081906200346d565b60405180910390a250565b3360009081526001602052604090206004015460ff16620022335760405162461bcd60e51b8152600401620008ac9062003253565b60005b8151811015620011f25762002268338383815181106200225a576200225a62002f70565b6020026020010151620025df565b80620022748162003237565b91505062002236565b6000805460405163fb4aaf0f60e01b81526001600160a01b039091169063fb4aaf0f90620022b090309060040162002d98565b600060405180830381865afa158015620022ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620022f89190810190620032e2565b60408101519091506001600160a01b03163314806200232157506000546001600160a01b031633145b620023405760405162461bcd60e51b8152600401620008ac9062003762565b6001600160a01b03821660009081526001602052604090206004015460ff166200237e5760405162461bcd60e51b8152600401620008ac9062003253565b6001600160a01b038216600090815260016020526040902060030154831115620023bc5760405162461bcd60e51b8152600401620008ac9062003280565b6001600160a01b03821660009081526001602052604081206003018054859290620023e9908490620032b3565b90915550506001600160a01b03821660008181526001602052604080822060030154905160008051602062004e088339815191529262000a46929188919081906200346d565b6000805460405163fb4aaf0f60e01b815282916001600160a01b03169063fb4aaf0f906200246290309060040162002d98565b600060405180830381865afa15801562002480573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620024aa9190810190620032e2565b60a0015192915050565b6000805460405163fb4aaf0f60e01b815282916001600160a01b03169063fb4aaf0f90620024e790309060040162002d98565b600060405180830381865afa15801562002505573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200252f9190810190620032e2565b6080015192915050565b6001600160a01b038083166000908152600260205260408082205490516340c10f1960e01b8152919261010090910416906340c10f199062002582908790869060040162003434565b600060405180830381600087803b1580156200259d57600080fd5b505af1158015620025b2573d6000803e3d6000fd5b5050506001600160a01b038085166000908152600260205260409020546101009004169150509392505050565b620025e96200242f565b6001600160a01b031663a15ab08d83836040518363ffffffff1660e01b815260040162002618929190620038e3565b600060405180830381600087803b1580156200263357600080fd5b505af11580156200155e573d6000803e3d6000fd5b6114de806200390a83390190565b60005b838110156200267357818101518382015260200162002659565b50506000910152565b600081518084526200269681602086016020860162002656565b601f01601f19169290920160200192915050565b6020815260018060a01b0382511660208201526000602083015180604084015250604083015180606084015250606083015180608084015250608083015160a08084015260c08301815180825260e08501915060e08160051b86010160208401935060005b82811015620028aa5760df1987830301845284518051606084526200273860608501826200267c565b9050602082015184820360208601526200275382826200267c565b91505060408201519150838103604085015280825180835260208301915060208160051b84010160208501945060005b828110156200288957848203601f19018452855180516001600160a01b031683526020908101516040828501819052815190850181905291019060608085019190600582901b86010160005b828110156200286b57605f1987830301845284518051835260018060a01b03602082015116602084015260408101516040840152606081015160e060608501526200281e60e08501826200267c565b9050608082015184820360808601526200283982826200267c565b60a08481015115159087015260c0938401511515939095019290925250506020948501949390930192600101620027cf565b506020998a0199979097019694505050600191909101905062002783565b5080965050505050506020850194506020840193506001810190506200270f565b509695505050505050565b600060208284031215620028c857600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200290a576200290a620028cf565b60405290565b60405160e081016001600160401b03811182821017156200290a576200290a620028cf565b60405161016081016001600160401b03811182821017156200290a576200290a620028cf565b604051601f8201601f191681016001600160401b0381118282101715620029865762002986620028cf565b604052919050565b60006001600160401b03821115620029aa57620029aa620028cf565b5060051b60200190565b60006001600160401b03821115620029d057620029d0620028cf565b50601f01601f191660200190565b600082601f830112620029f057600080fd5b813562002a0762002a0182620029b4565b6200295b565b81815284602083860101111562002a1d57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011262002a4c57600080fd5b8135602062002a5f62002a01836200298e565b82815260059290921b8401810191818101908684111562002a7f57600080fd5b8286015b84811015620028aa5780356001600160401b0381111562002aa45760008081fd5b62002ab48986838b0101620029de565b84525091830191830162002a83565b6001600160a01b038116811462002ad957600080fd5b50565b6000806000806080858703121562002af357600080fd5b84356001600160401b0381111562002b0a57600080fd5b62002b188782880162002a3a565b945050602085013562002b2b8162002ac3565b9250604085013562002b3d8162002ac3565b9396929550929360600135925050565b801515811462002ad957600080fd5b6000806000806080858703121562002b7357600080fd5b84356001600160401b0381111562002b8a57600080fd5b62002b988782880162002a3a565b945050602085013562002bab8162002ac3565b9250604085013562002bbd8162002ac3565b9150606085013562002bcf8162002b4d565b939692955090935050565b6000806040838503121562002bee57600080fd5b823562002bfb8162002ac3565b915060208301356001600160401b0381111562002c1757600080fd5b62002c2585828601620029de565b9150509250929050565b6000806040838503121562002c4357600080fd5b82359150602083013562002c578162002ac3565b809150509250929050565b600080600080600060a0868803121562002c7b57600080fd5b853562002c888162002ac3565b94506020860135935060408601359250606086013562002ca88162002ac3565b949793965091946080013592915050565b6000806040838503121562002ccd57600080fd5b823562002cda8162002ac3565b946020939093013593505050565b60006020828403121562002cfb57600080fd5b813562001ed58162002ac3565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101562002d8a57603f1989840301855281516060815181865262002d58828701826200267c565b838b01516001600160a01b0316878c015292890151151595890195909552509487019492509086019060010162002d2f565b509098975050505050505050565b6001600160a01b0391909116815260200190565b60006020828403121562002dbf57600080fd5b81356001600160401b0381111562002dd657600080fd5b62002de48482850162002a3a565b949350505050565b6001600160a01b0392831681529116602082015260400190565b600082601f83011262002e1857600080fd5b815162002e2962002a0182620029b4565b81815284602083860101111562002e3f57600080fd5b62002de482602083016020870162002656565b6000602080838503121562002e6657600080fd5b82516001600160401b038082111562002e7e57600080fd5b818501915085601f83011262002e9357600080fd5b815162002ea462002a01826200298e565b81815260059190911b8301840190848101908883111562002ec457600080fd5b8585015b8381101562002f635780518581111562002ee25760008081fd5b86016040818c03601f190181131562002efb5760008081fd5b62002f05620028e5565b898301518881111562002f185760008081fd5b62002f288e8c8387010162002e06565b82525090820151908782111562002f3f5760008081fd5b62002f4f8d8b8486010162002e06565b818b01528552505091860191860162002ec8565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0384811682528316602082015260606040820181905260009062002fb4908301846200267c565b95945050505050565b805162002fca8162002ac3565b919050565b6000602080838503121562002fe357600080fd5b82516001600160401b0381111562002ffa57600080fd5b8301601f810185136200300c57600080fd5b80516200301d62002a01826200298e565b81815260059190911b820183019083810190878311156200303d57600080fd5b928401925b8284101562003068578351620030588162002ac3565b8252928401929084019062003042565b979650505050505050565b600060018060a01b0380871683528086166020840152608060408401526200309f60808401866200267c565b915080841660608401525095945050505050565b805162002fca8162002b4d565b60006020808385031215620030d457600080fd5b82516001600160401b0380821115620030ec57600080fd5b818501915085601f8301126200310157600080fd5b81516200311262002a01826200298e565b81815260059190911b830184019084810190888311156200313257600080fd5b8585015b8381101562002f63578051858111156200314f57600080fd5b860160e0818c03601f19011215620031675760008081fd5b6200317162002910565b88820151815260406200318681840162002fbd565b8a83015260608084015182840152608091508184015189811115620031ab5760008081fd5b620031bb8f8d8388010162002e06565b82850152505060a08084015189811115620031d65760008081fd5b620031e68f8d8388010162002e06565b838501525060c09150620031fc828501620030b3565b908301526200320e60e08401620030b3565b9082015284525091860191860162003136565b634e487b7160e01b600052601160045260246000fd5b6000600182016200324c576200324c62003221565b5060010190565b602080825260139082015272155cd95c881b9bdd081c9959da5cdd195c9959606a1b604082015260600190565b602080825260199082015278496e73756666696369656e7420706173732062616c616e636560381b604082015260600190565b81810381811115620032c957620032c962003221565b92915050565b805161ffff8116811462002fca57600080fd5b600060208284031215620032f557600080fd5b81516001600160401b03808211156200330d57600080fd5b9083019061016082860312156200332357600080fd5b6200332d62002935565b8251828111156200333d57600080fd5b6200334b8782860162002e06565b8252506020830151828111156200336157600080fd5b6200336f8782860162002e06565b602083015250620033836040840162002fbd565b6040820152620033966060840162002fbd565b6060820152620033a96080840162002fbd565b6080820152620033bc60a0840162002fbd565b60a0820152620033cf60c0840162002fbd565b60c0820152620033e260e0840162002fbd565b60e08201526101009150620033f982840162002fbd565b8282015261012091506200340f828401620032cf565b8282015261014091506200342582840162002fbd565b91810191909152949350505050565b6001600160a01b03929092168252602082015260400190565b6000602082840312156200346057600080fd5b815162001ed58162002b4d565b9384526020840192909252151560408301521515606082015260800190565b6000606082840312156200349f57600080fd5b604051606081016001600160401b038082118383101715620034c557620034c5620028cf565b816040528293508451915080821115620034de57600080fd5b50620034ed8582860162002e06565b8252506020830151620035008162002ac3565b60208201526040830151620035158162002b4d565b6040919091015292915050565b6000602082840312156200353557600080fd5b81516001600160401b038111156200354c57600080fd5b62002de4848285016200348c565b60208082526012908201527114dd1c985d1959de481b9bdd08199bdd5b9960721b604082015260600190565b602080825260189082015277496e76616c696420636f6e7472616374206164647265737360401b604082015260600190565b600060208284031215620035cb57600080fd5b81516001600160401b03811115620035e257600080fd5b62002de48482850162002e06565b6000602082840312156200360357600080fd5b815160ff8116811462001ed557600080fd5b6080815260006200362a60808301876200267c565b82810360208401526200363e81876200267c565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6000826200368157634e487b7160e01b600052601260045260246000fd5b500490565b600060018060a01b03808816835260a06020840152620036aa60a08401886200267c565b9581166040840152606083019490945250911660809091015292915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060018060a01b03808816835260a060208401526200371160a08401886200267c565b95811660408401529390931660608201529015156080909101525092915050565b80820180821115620032c957620032c962003221565b8082028115828204841417620032c957620032c962003221565b60208082526030908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526f206e6f722074686520666163746f727960801b606082015260800190565b602080825260189082015277496e73756666696369656e74206761732062616c616e636560401b604082015260600190565b80820260008212600160ff1b8414161562003803576200380362003221565b8181058314821517620032c957620032c962003221565b6000602082840312156200382d57600080fd5b5051919050565b600060208083850312156200384857600080fd5b82516001600160401b03808211156200386057600080fd5b818501915085601f8301126200387557600080fd5b81516200388662002a01826200298e565b81815260059190911b83018401908481019088831115620038a657600080fd5b8585015b8381101562002f6357805185811115620038c45760008081fd5b620038d48b89838a01016200348c565b845250918601918601620038aa565b6001600160a01b038316815260406020820181905260009062002de4908301846200267c56fe60806040523480156200001157600080fd5b50604051620014de380380620014de83398101604081905262000034916200028a565b836040516020016200004791906200032e565b604051602081830303815290604052836040516020016200006991906200035b565b60408051601f19818403018152919052600362000087838262000416565b50600462000096828262000416565b505050620000b3620000ad6200016760201b60201c565b6200016b565b6005805460ff60a01b1916600160a01b60ff8516908102919091179091556040805160808101825286815260208101869052908101919091526001600160a01b03821660608201526006806200010a878262000416565b506020820151600182019062000121908262000416565b506040820151600290910180546060909301516001600160a01b0316610100026001600160a81b031990931660ff9092169190911791909117905550620004e292505050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001f0578181015183820152602001620001d6565b50506000910152565b600082601f8301126200020b57600080fd5b81516001600160401b0380821115620002285762000228620001bd565b604051601f8301601f19908116603f01168101908282118183101715620002535762000253620001bd565b816040528381528660208588010111156200026d57600080fd5b62000280846020830160208901620001d3565b9695505050505050565b60008060008060808587031215620002a157600080fd5b84516001600160401b0380821115620002b957600080fd5b620002c788838901620001f9565b95506020870151915080821115620002de57600080fd5b50620002ed87828801620001f9565b935050604085015160ff811681146200030557600080fd5b60608601519092506001600160a01b03811681146200032357600080fd5b939692955090935050565b6202628160ed1b8152600082516200034e816003850160208701620001d3565b9190910160030192915050565b6104c560f41b8152600082516200037a816002850160208701620001d3565b9190910160020192915050565b600181811c908216806200039c57607f821691505b602082108103620003bd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200041157600081815260208120601f850160051c81016020861015620003ec5750805b601f850160051c820191505b818110156200040d57828155600101620003f8565b5050505b505050565b81516001600160401b03811115620004325762000432620001bd565b6200044a8162000443845462000387565b84620003c3565b602080601f831160018114620004825760008415620004695750858301515b600019600386901b1c1916600185901b1785556200040d565b600085815260208120601f198616915b82811015620004b35788860151825594840194600190910190840162000492565b5085821015620004d25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610fec80620004f26000396000f3fe608060405234801561001057600080fd5b50600436106100e65760003560e01c806306fdde03146100eb578063095ea7b31461010957806311df99951461012c57806318160ddd1461014457806323b872dd14610156578063313ce56714610169578063395093511461018857806340c10f191461019b57806370a08231146101b0578063715018a6146101d957806379cc6790146101e15780638da5cb5b146101f457806395d89b4114610214578063a457c2d71461021c578063a9059cbb1461022f578063dd62ed3e14610242578063f2fde38b14610255578063fd5d3e0114610268575b600080fd5b6100f361027d565b6040516101009190610d9f565b60405180910390f35b61011c610117366004610dd5565b61030f565b6040519015158152602001610100565b610134610329565b6040516101009493929190610dff565b6002545b604051908152602001610100565b61011c610164366004610e49565b610463565b600554600160a01b900460ff1660405160ff9091168152602001610100565b61011c610196366004610dd5565b610487565b6101ae6101a9366004610dd5565b6104a9565b005b6101486101be366004610e85565b6001600160a01b031660009081526020819052604090205490565b6101ae6104bf565b6101ae6101ef366004610dd5565b6104d3565b6101fc6104e5565b6040516001600160a01b039091168152602001610100565b6100f36104f4565b61011c61022a366004610dd5565b610503565b61011c61023d366004610dd5565b610583565b610148610250366004610ea0565b610591565b6101ae610263366004610e85565b6105bc565b610270610635565b6040516101009190610ed3565b60606003805461028c90610f3b565b80601f01602080910402602001604051908101604052809291908181526020018280546102b890610f3b565b80156103055780601f106102da57610100808354040283529160200191610305565b820191906000526020600020905b8154815290600101906020018083116102e857829003601f168201915b5050505050905090565b60003361031d8185856107b2565b60019150505b92915050565b60068054819061033890610f3b565b80601f016020809104026020016040519081016040528092919081815260200182805461036490610f3b565b80156103b15780601f10610386576101008083540402835291602001916103b1565b820191906000526020600020905b81548152906001019060200180831161039457829003601f168201915b5050505050908060010180546103c690610f3b565b80601f01602080910402602001604051908101604052809291908181526020018280546103f290610f3b565b801561043f5780601f106104145761010080835404028352916020019161043f565b820191906000526020600020905b81548152906001019060200180831161042257829003601f168201915b5050506002909301549192505060ff8116906001600160a01b036101009091041684565b6000336104718582856108d7565b61047c858585610951565b506001949350505050565b60003361031d81858561049a8383610591565b6104a49190610f75565b6107b2565b6104b1610ae3565b6104bb8282610b42565b5050565b6104c7610ae3565b6104d16000610bef565b565b6104db610ae3565b6104bb8282610c41565b6005546001600160a01b031690565b60606004805461028c90610f3b565b600033816105118286610591565b9050838110156105765760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61047c82868684036107b2565b60003361031d818585610951565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6105c4610ae3565b6001600160a01b0381166106295760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161056d565b61063281610bef565b50565b604080516080810182526060808252602082018190526000928201839052810191909152600660405180608001604052908160008201805461067690610f3b565b80601f01602080910402602001604051908101604052809291908181526020018280546106a290610f3b565b80156106ef5780601f106106c4576101008083540402835291602001916106ef565b820191906000526020600020905b8154815290600101906020018083116106d257829003601f168201915b5050505050815260200160018201805461070890610f3b565b80601f016020809104026020016040519081016040528092919081815260200182805461073490610f3b565b80156107815780601f1061075657610100808354040283529160200191610781565b820191906000526020600020905b81548152906001019060200180831161076457829003601f168201915b50505091835250506002919091015460ff8116602083015261010090046001600160a01b0316604090910152919050565b6001600160a01b0383166108145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161056d565b6001600160a01b0382166108755760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161056d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006108e38484610591565b9050600019811461094b578181101561093e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161056d565b61094b84848484036107b2565b50505050565b6001600160a01b0383166109b55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161056d565b6001600160a01b038216610a175760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161056d565b6001600160a01b03831660009081526020819052604090205481811015610a8f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161056d565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020610f97833981519152910160405180910390a361094b565b33610aec6104e5565b6001600160a01b0316146104d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161056d565b6001600160a01b038216610b985760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161056d565b8060026000828254610baa9190610f75565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020610f97833981519152910160405180910390a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216610ca15760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161056d565b6001600160a01b03821660009081526020819052604090205481811015610d155760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161056d565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020610f9783398151915291016108ca565b6000815180845260005b81811015610d7f57602081850181015186830182015201610d63565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610db26020830184610d59565b9392505050565b80356001600160a01b0381168114610dd057600080fd5b919050565b60008060408385031215610de857600080fd5b610df183610db9565b946020939093013593505050565b608081526000610e126080830187610d59565b8281036020840152610e248187610d59565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b600080600060608486031215610e5e57600080fd5b610e6784610db9565b9250610e7560208501610db9565b9150604084013590509250925092565b600060208284031215610e9757600080fd5b610db282610db9565b60008060408385031215610eb357600080fd5b610ebc83610db9565b9150610eca60208401610db9565b90509250929050565b602081526000825160806020840152610eef60a0840182610d59565b90506020840151601f19848303016040850152610f0c8282610d59565b604086015160ff16606086810191909152909501516001600160a01b0316608090940193909352509192915050565b600181811c90821680610f4f57607f821691505b602082108103610f6f57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561032357634e487b7160e01b600052601160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220b813a46f9c5a2380119e806813d4f3fd5eb63f3bb7f48c535abda1e0bcb5586164736f6c634300081200338148f0cf2cc666d3bd5197297e12f548e21963e9445d59d52948db08d6be4f3cebad5c8ca3dc23fd705a8985e332663a6e1f12f5a32af1492216caf2d747e127b3d3a990655ea7a52a1f1e6be2a45e3688ff4ba917dc2d8ef08fe9a407a0a1caa264697066735822122063c8fae7f8c60c131825e1b89ce0a27de4c50c2a8528aa3d44aaaf3d424a685864736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000571f715285bf071d53a38c526ff4a6afcb623cc0
-----Decoded View---------------
Arg [0] : _factory (address): 0x571F715285Bf071D53A38C526fF4a6aFcb623CC0
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000571f715285bf071d53a38c526ff4a6afcb623cc0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
POL | Polygon (POL) | 100.00% | $0.720137 | 9,602.8864 | $6,915.39 |
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.