More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 75 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 15293686 | 875 days ago | IN | 0 ETH | 0.00016471 | ||||
Approve | 15292902 | 875 days ago | IN | 0 ETH | 0.00026708 | ||||
Approve | 15292868 | 875 days ago | IN | 0 ETH | 0.00032436 | ||||
Approve | 15292841 | 875 days ago | IN | 0 ETH | 0.0003243 | ||||
Approve | 15182491 | 892 days ago | IN | 0 ETH | 0.00076684 | ||||
Transfer Remaini... | 14896358 | 939 days ago | IN | 0 ETH | 0.00139353 | ||||
Approve | 14890753 | 940 days ago | IN | 0 ETH | 0.00186307 | ||||
Approve | 14888885 | 941 days ago | IN | 0 ETH | 0.00281767 | ||||
Approve | 14887407 | 941 days ago | IN | 0 ETH | 0.00258655 | ||||
Approve | 14886992 | 941 days ago | IN | 0 ETH | 0.00561216 | ||||
Approve | 14886806 | 941 days ago | IN | 0 ETH | 0.0040843 | ||||
Approve | 14886750 | 941 days ago | IN | 0 ETH | 0.00714389 | ||||
Approve | 14886715 | 941 days ago | IN | 0 ETH | 0.00349937 | ||||
Approve | 14886687 | 941 days ago | IN | 0 ETH | 0.00222336 | ||||
Approve | 14886632 | 941 days ago | IN | 0 ETH | 0.00302373 | ||||
Approve | 14886525 | 941 days ago | IN | 0 ETH | 0.00329998 | ||||
Approve | 14886452 | 941 days ago | IN | 0 ETH | 0.00422854 | ||||
Approve | 14886407 | 941 days ago | IN | 0 ETH | 0.00318313 | ||||
Approve | 14886351 | 941 days ago | IN | 0 ETH | 0.00208931 | ||||
Approve | 14886325 | 941 days ago | IN | 0 ETH | 0.00342763 | ||||
Approve | 14886321 | 941 days ago | IN | 0 ETH | 0.00257923 | ||||
Approve | 14886321 | 941 days ago | IN | 0 ETH | 0.00257923 | ||||
Update Swap Toke... | 14886316 | 941 days ago | IN | 0 ETH | 0.00227863 | ||||
Approve | 14886312 | 941 days ago | IN | 0 ETH | 0.00241506 | ||||
Approve | 14886273 | 941 days ago | IN | 0 ETH | 0.00269663 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
14920626 | 935 days ago | 0.00568231 ETH | ||||
14920626 | 935 days ago | 0.01472652 ETH | ||||
14920626 | 935 days ago | 0.02454421 ETH | ||||
14920626 | 935 days ago | 0.03927073 ETH | ||||
14896358 | 939 days ago | 0.32307254 ETH | ||||
14887503 | 941 days ago | 0.00646827 ETH | ||||
14887503 | 941 days ago | 0.01675965 ETH | ||||
14887503 | 941 days ago | 0.02793275 ETH | ||||
14887503 | 941 days ago | 0.0446924 ETH | ||||
14887184 | 941 days ago | 0.00727518 ETH | ||||
14887184 | 941 days ago | 0.01884084 ETH | ||||
14887184 | 941 days ago | 0.0314014 ETH | ||||
14887184 | 941 days ago | 0.05024224 ETH | ||||
14887073 | 941 days ago | 0.00912253 ETH | ||||
14887073 | 941 days ago | 0.02360012 ETH | ||||
14887073 | 941 days ago | 0.03933353 ETH | ||||
14887073 | 941 days ago | 0.06293365 ETH | ||||
14886838 | 941 days ago | 0.01003463 ETH | ||||
14886838 | 941 days ago | 0.02594702 ETH | ||||
14886838 | 941 days ago | 0.04324504 ETH | ||||
14886838 | 941 days ago | 0.06919207 ETH | ||||
14886652 | 941 days ago | 0.01251659 ETH | ||||
14886652 | 941 days ago | 0.03232564 ETH | ||||
14886652 | 941 days ago | 0.05387606 ETH | ||||
14886652 | 941 days ago | 0.0862017 ETH |
Loading...
Loading
Contract Name:
StrangerInu
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC20.sol"; import "./Ownable.sol"; import "./SafeMath.sol"; import "./IUniswapV2Pair.sol"; import "./IUniswapV2Router02.sol"; import "./IUniswapV2Factory.sol"; /* @Parma Token - Website: https://strangerinu.com/ - Telegram: https://t.me/StrangerInu */ contract StrangerInu is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 private uniswapV2Router; address private uniswapV2Pair; mapping (address => bool) private _isBlacklisted; bool private _swapping; uint256 private _liveBlock; address private teamWallet; uint256 public maxTransactionAmount; uint256 public swapTokensThreshold; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingLive = false; uint256 private _teamFee = 5; uint256 private _liquidityFee = 3; uint256 private _tokensForTeam; uint256 private _tokensForLiquidity; uint256 public totalFees = _teamFee + _liquidityFee; // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) private _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) private automatedMarketMakerPairs; constructor() ERC20("Stranger Inu", "STRANGER") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _isExcludedMaxTransactionAmount[address(_uniswapV2Router)] = true; uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true; automatedMarketMakerPairs[address(uniswapV2Pair)] = true; uint256 totalSupply = 1e12 * 1e18; maxTransactionAmount = totalSupply * 1 / 100; maxWallet = totalSupply * 3 / 100; swapTokensThreshold = totalSupply * 1 / 1000; teamWallet = address(owner()); // set as fee wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); _isExcludedMaxTransactionAmount[owner()] = true; _isExcludedMaxTransactionAmount[address(this)] = true; _isExcludedMaxTransactionAmount[address(0xdead)] = true; /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } // once enabled, can never be turned off function enableTrading(uint256 number) external onlyOwner { tradingLive = true; _liveBlock = block.number.add(number); } // remove limits after token is somewhat stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; } function updateFees(uint256 teamFee, uint256 liquidityFee) external onlyOwner { require(teamFee.add(liquidityFee) <= 8); _teamFee = teamFee; _liquidityFee = liquidityFee; } function updateTeamWallet(address newWallet) external onlyOwner { teamWallet = newWallet; } function updateSwapTokensThreshold(uint256 newThreshold) external onlyOwner returns (bool) { require(newThreshold >= totalSupply() * 1 / 100000, "Swap threshold cannot be lower than 0.001% total supply."); require(newThreshold <= totalSupply() * 5 / 1000, "Swap threshold cannot be higher than 0.5% total supply."); swapTokensThreshold = newThreshold; return true; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function blacklist(address[] memory addresses) public onlyOwner { for (uint i = 0; i < addresses.length; i++) { if (addresses[i] != uniswapV2Pair && addresses[i] != address(uniswapV2Router)) { _isBlacklisted[addresses[i]] = true; } } } function removeBlacklist(address[] memory addresses) public onlyOwner { for (uint i = 0; i < addresses.length; i++) { _isBlacklisted[addresses[i]] = false; } } function blacklisted(address addr) public view returns (bool) { return _isBlacklisted[addr]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!_isBlacklisted[from], "You have been blacklisted, you are unable to transfer or swap."); if (amount == 0) { super._transfer(from, to, 0); return; } // all to secure a smooth launch if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_swapping ) { if (!tradingLive) require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "_transfer:: Trading is not active."); if (_liveBlock >= block.number) _isBlacklisted[to] = true; // wen buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "_transfer:: Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "_transfer:: Max wallet exceeded"); } // wen sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "_transfer:: Sell transfer amount exceeds the maxTransactionAmount."); } else if (!_isExcludedMaxTransactionAmount[to]) { require(amount + balanceOf(to) <= maxWallet, "_transfer:: Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensThreshold; if ( canSwap && !_swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { _swapping = true; swapBack(); _swapping = false; } bool takeFee = !_swapping; // if any addy belongs to _isExcludedFromFee or isn't a swap then remove the fee if ( _isExcludedFromFees[from] || _isExcludedFromFees[to] || (!automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]) ) takeFee = false; uint256 fees = 0; if (takeFee) { fees = amount.mul(totalFees).div(100); _tokensForLiquidity += fees * _liquidityFee / totalFees; _tokensForTeam += fees * _teamFee / totalFees; if (fees > 0) super._transfer(from, address(this), fees); amount -= fees; } super._transfer(from, to, amount); } function _swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, teamWallet, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForTeam; if (contractBalance == 0) return; if (contractBalance > swapTokensThreshold) contractBalance = swapTokensThreshold; uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; _swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForTeam = ethBalance.mul(_tokensForTeam).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForTeam; _tokensForTeam = 0; _tokensForLiquidity = 0; payable(teamWallet).transfer(ethForTeam); if (liquidityTokens > 0 && ethForLiquidity > 0) { _addLiquidity(liquidityTokens, ethForLiquidity); } } function transferRemainings() external { payable(teamWallet).transfer(address(this).balance); } receive() external payable {} }
// 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 // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; import "./IERC20Metadata.sol"; import "./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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * 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}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `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, _allowances[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 = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `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; } _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; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * 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 (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `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); /** * @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); }
// 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 pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "./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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing 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 v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferRemainings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"teamFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"updateSwapTokensThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506005601055600360115560115460105462000056919062000c58565b6014553480156200006657600080fd5b506040518060400160405280600c81526020017f537472616e67657220496e7500000000000000000000000000000000000000008152506040518060400160405280600881526020017f535452414e4745520000000000000000000000000000000000000000000000008152508160039080519060200190620000eb92919062000a50565b5080600490805190602001906200010492919062000a50565b505050620001276200011b620006eb60201b60201c565b620006f360201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022057600080fd5b505afa15801562000235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025b919062000b17565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002be57600080fd5b505afa158015620002d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f9919062000b17565b6040518363ffffffff1660e01b81526004016200031892919062000bb9565b602060405180830381600087803b1580156200033357600080fd5b505af115801562000348573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036e919062000b17565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160166000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006c0c9f2c9cd04674edea4000000090506064600182620004c5919062000ced565b620004d1919062000cb5565b600c819055506064600382620004e8919062000ced565b620004f4919062000cb5565b600e819055506103e86001826200050c919062000ced565b62000518919062000cb5565b600d819055506200052e620007b960201b60201c565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200059062000582620007b960201b60201c565b6001620007e360201b60201c565b620005a3306001620007e360201b60201c565b620005b861dead6001620007e360201b60201c565b600160166000620005ce620007b960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016016600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006e33382620008cd60201b60201c565b505062000ec0565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007f3620006eb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000819620007b960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000872576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008699062000be6565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009379062000c08565b60405180910390fd5b620009546000838362000a4660201b60201c565b806002600082825462000968919062000c58565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009bf919062000c58565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a26919062000c2a565b60405180910390a362000a426000838362000a4b60201b60201c565b5050565b505050565b505050565b82805462000a5e9062000d8c565b90600052602060002090601f01602090048101928262000a82576000855562000ace565b82601f1062000a9d57805160ff191683800117855562000ace565b8280016001018555821562000ace579182015b8281111562000acd57825182559160200191906001019062000ab0565b5b50905062000add919062000ae1565b5090565b5b8082111562000afc57600081600090555060010162000ae2565b5090565b60008151905062000b118162000ea6565b92915050565b60006020828403121562000b305762000b2f62000e4f565b5b600062000b408482850162000b00565b91505092915050565b62000b548162000d4e565b82525050565b600062000b6960208362000c47565b915062000b768262000e54565b602082019050919050565b600062000b90601f8362000c47565b915062000b9d8262000e7d565b602082019050919050565b62000bb38162000d82565b82525050565b600060408201905062000bd0600083018562000b49565b62000bdf602083018462000b49565b9392505050565b6000602082019050818103600083015262000c018162000b5a565b9050919050565b6000602082019050818103600083015262000c238162000b81565b9050919050565b600060208201905062000c41600083018462000ba8565b92915050565b600082825260208201905092915050565b600062000c658262000d82565b915062000c728362000d82565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000caa5762000ca962000dc2565b5b828201905092915050565b600062000cc28262000d82565b915062000ccf8362000d82565b92508262000ce25762000ce162000df1565b5b828204905092915050565b600062000cfa8262000d82565b915062000d078362000d82565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d435762000d4262000dc2565b5b828202905092915050565b600062000d5b8262000d62565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000da557607f821691505b6020821081141562000dbc5762000dbb62000e20565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000eb18162000d4e565b811462000ebd57600080fd5b50565b613f788062000ed06000396000f3fe6080604052600436106101dc5760003560e01c80637911ef9d11610102578063c024666811610095578063dbf23cf611610064578063dbf23cf6146106f3578063dd62ed3e1461070a578063f2fde38b14610747578063f8b45b0514610770576101e3565b8063c024666814610637578063c8c8ebe414610660578063cef851391461068b578063dbac26e9146106b6576101e3565b80638da5cb5b116100d15780638da5cb5b1461056757806395d89b4114610592578063a457c2d7146105bd578063a9059cbb146105fa576101e3565b80637911ef9d146104af5780637cb332bb146104d857806382aa7c68146105015780638baa63b21461052a576101e3565b8063313ce5671161017a5780636db79437116101495780636db794371461040757806370a0823114610430578063715018a61461046d578063751039fc14610484576101e3565b8063313ce5671461033757806339509351146103625780634a62bb651461039f5780634fbee193146103ca576101e3565b806311704f52116101b657806311704f521461027957806313114a9d146102a457806318160ddd146102cf57806323b872dd146102fa576101e3565b8063041f173f146101e857806306fdde0314610211578063095ea7b31461023c576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612e97565b61079b565b005b34801561021d57600080fd5b50610226610992565b6040516102339190613370565b60405180910390f35b34801561024857600080fd5b50610263600480360381019061025e9190612e57565b610a24565b6040516102709190613355565b60405180910390f35b34801561028557600080fd5b5061028e610a47565b60405161029b9190613355565b60405180910390f35b3480156102b057600080fd5b506102b9610a5a565b6040516102c69190613592565b60405180910390f35b3480156102db57600080fd5b506102e4610a60565b6040516102f19190613592565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190612dc4565b610a6a565b60405161032e9190613355565b60405180910390f35b34801561034357600080fd5b5061034c610a99565b6040516103599190613607565b60405180910390f35b34801561036e57600080fd5b5061038960048036038101906103849190612e57565b610aa2565b6040516103969190613355565b60405180910390f35b3480156103ab57600080fd5b506103b4610b4c565b6040516103c19190613355565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190612d2a565b610b5f565b6040516103fe9190613355565b60405180910390f35b34801561041357600080fd5b5061042e60048036038101906104299190612f0d565b610bb5565b005b34801561043c57600080fd5b5061045760048036038101906104529190612d2a565b610c63565b6040516104649190613592565b60405180910390f35b34801561047957600080fd5b50610482610cab565b005b34801561049057600080fd5b50610499610d33565b6040516104a69190613355565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d19190612e97565b610dd3565b005b3480156104e457600080fd5b506104ff60048036038101906104fa9190612d2a565b610ee4565b005b34801561050d57600080fd5b5061052860048036038101906105239190612ee0565b610fa4565b005b34801561053657600080fd5b50610551600480360381019061054c9190612ee0565b611057565b60405161055e9190613355565b60405180910390f35b34801561057357600080fd5b5061057c6111ac565b60405161058991906132d9565b60405180910390f35b34801561059e57600080fd5b506105a76111d6565b6040516105b49190613370565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190612e57565b611268565b6040516105f19190613355565b60405180910390f35b34801561060657600080fd5b50610621600480360381019061061c9190612e57565b611352565b60405161062e9190613355565b60405180910390f35b34801561064357600080fd5b5061065e60048036038101906106599190612e17565b611375565b005b34801561066c57600080fd5b5061067561144c565b6040516106829190613592565b60405180910390f35b34801561069757600080fd5b506106a0611452565b6040516106ad9190613592565b60405180910390f35b3480156106c257600080fd5b506106dd60048036038101906106d89190612d2a565b611458565b6040516106ea9190613355565b60405180910390f35b3480156106ff57600080fd5b506107086114ae565b005b34801561071657600080fd5b50610731600480360381019061072c9190612d84565b611519565b60405161073e9190613592565b60405180910390f35b34801561075357600080fd5b5061076e60048036038101906107699190612d2a565b6115a0565b005b34801561077c57600080fd5b50610785611698565b6040516107929190613592565b60405180910390f35b6107a361169e565b73ffffffffffffffffffffffffffffffffffffffff166107c16111ac565b73ffffffffffffffffffffffffffffffffffffffff1614610817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080e90613492565b60405180910390fd5b60005b815181101561098e57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682828151811061086f5761086e6139b0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156109035750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168282815181106108e2576108e16139b0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b1561097b57600160086000848481518110610921576109206139b0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610986906138da565b91505061081a565b5050565b6060600380546109a190613877565b80601f01602080910402602001604051908101604052809291908181526020018280546109cd90613877565b8015610a1a5780601f106109ef57610100808354040283529160200191610a1a565b820191906000526020600020905b8154815290600101906020018083116109fd57829003601f168201915b5050505050905090565b600080610a2f61169e565b9050610a3c8185856116a6565b600191505092915050565b600f60019054906101000a900460ff1681565b60145481565b6000600254905090565b600080610a7561169e565b9050610a82858285611871565b610a8d8585856118fd565b60019150509392505050565b60006012905090565b600080610aad61169e565b9050610b41818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3c91906136c8565b6116a6565b600191505092915050565b600f60009054906101000a900460ff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610bbd61169e565b73ffffffffffffffffffffffffffffffffffffffff16610bdb6111ac565b73ffffffffffffffffffffffffffffffffffffffff1614610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890613492565b60405180910390fd5b6008610c46828461239490919063ffffffff16565b1115610c5157600080fd5b81601081905550806011819055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cb361169e565b73ffffffffffffffffffffffffffffffffffffffff16610cd16111ac565b73ffffffffffffffffffffffffffffffffffffffff1614610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e90613492565b60405180910390fd5b610d3160006123aa565b565b6000610d3d61169e565b73ffffffffffffffffffffffffffffffffffffffff16610d5b6111ac565b73ffffffffffffffffffffffffffffffffffffffff1614610db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da890613492565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b610ddb61169e565b73ffffffffffffffffffffffffffffffffffffffff16610df96111ac565b73ffffffffffffffffffffffffffffffffffffffff1614610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690613492565b60405180910390fd5b60005b8151811015610ee057600060086000848481518110610e7457610e736139b0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ed8906138da565b915050610e52565b5050565b610eec61169e565b73ffffffffffffffffffffffffffffffffffffffff16610f0a6111ac565b73ffffffffffffffffffffffffffffffffffffffff1614610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5790613492565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610fac61169e565b73ffffffffffffffffffffffffffffffffffffffff16610fca6111ac565b73ffffffffffffffffffffffffffffffffffffffff1614611020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101790613492565b60405180910390fd5b6001600f60016101000a81548160ff02191690831515021790555061104e814361239490919063ffffffff16565b600a8190555050565b600061106161169e565b73ffffffffffffffffffffffffffffffffffffffff1661107f6111ac565b73ffffffffffffffffffffffffffffffffffffffff16146110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc90613492565b60405180910390fd5b620186a060016110e3610a60565b6110ed919061374f565b6110f7919061371e565b821015611139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113090613452565b60405180910390fd5b6103e86005611146610a60565b611150919061374f565b61115a919061371e565b82111561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390613432565b60405180910390fd5b81600d8190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111e590613877565b80601f016020809104026020016040519081016040528092919081815260200182805461121190613877565b801561125e5780601f106112335761010080835404028352916020019161125e565b820191906000526020600020905b81548152906001019060200180831161124157829003601f168201915b5050505050905090565b60008061127361169e565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090613572565b60405180910390fd5b61134682868684036116a6565b60019250505092915050565b60008061135d61169e565b905061136a8185856118fd565b600191505092915050565b61137d61169e565b73ffffffffffffffffffffffffffffffffffffffff1661139b6111ac565b73ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890613492565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b600d5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611516573d6000803e3d6000fd5b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6115a861169e565b73ffffffffffffffffffffffffffffffffffffffff166115c66111ac565b73ffffffffffffffffffffffffffffffffffffffff161461161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161390613492565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561168c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611683906133b2565b60405180910390fd5b611695816123aa565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170d90613512565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d906133d2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118649190613592565b60405180910390a3505050565b600061187d8484611519565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118f757818110156118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e0906133f2565b60405180910390fd5b6118f684848484036116a6565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561196d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611964906134d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d490613392565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a61906134f2565b60405180910390fd5b6000811415611a8457611a7f83836000612470565b61238f565b600f60009054906101000a900460ff1615611fe157611aa16111ac565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611b0f5750611adf6111ac565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b485750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b82575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b9b5750600960009054906101000a900460ff16155b15611fe057600f60019054906101000a900460ff16611c9557601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c555750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b90613472565b60405180910390fd5b5b43600a5410611cf7576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611d9a5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e4157600c54811115611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb90613532565b60405180910390fd5b600e54611df083610c63565b82611dfb91906136c8565b1115611e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3390613552565b60405180910390fd5b611fdf565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ee45750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f3357600c54811115611f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f25906134b2565b60405180910390fd5b611fde565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611fdd57600e54611f9083610c63565b82611f9b91906136c8565b1115611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd390613552565b60405180910390fd5b5b5b5b5b5b6000611fec30610c63565b90506000600d5482101590508080156120125750600960009054906101000a900460ff16155b80156120685750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120be5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121145750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612158576001600960006101000a81548160ff02191690831515021790555061213c6126f1565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061220e5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806122b95750601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122b85750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b156122c357600090505b6000811561237f576122f360646122e56014548861287690919063ffffffff16565b61288c90919063ffffffff16565b905060145460115482612306919061374f565b612310919061371e565b6013600082825461232191906136c8565b9250508190555060145460105482612339919061374f565b612343919061371e565b6012600082825461235491906136c8565b9250508190555060008111156123705761236f873083612470565b5b808561237c91906137a9565b94505b61238a878787612470565b505050505b505050565b600081836123a291906136c8565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d7906134d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254790613392565b60405180910390fd5b61255b8383836128a2565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156125e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d890613412565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461267491906136c8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126d89190613592565b60405180910390a36126eb8484846128a7565b50505050565b60006126fc30610c63565b9050600060125460135461271091906136c8565b90506000821415612722575050612874565b600d5482111561273257600d5491505b600060028260135485612745919061374f565b61274f919061371e565b612759919061371e565b9050600061277082856128ac90919063ffffffff16565b90506000479050612780826128c2565b600061279582476128ac90919063ffffffff16565b905060006127c0866127b26012548561287690919063ffffffff16565b61288c90919063ffffffff16565b9050600081836127d091906137a9565b905060006012819055506000601381905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561284a573d6000803e3d6000fd5b5060008611801561285b5750600081115b1561286b5761286a8682612b14565b5b50505050505050505b565b60008183612884919061374f565b905092915050565b6000818361289a919061371e565b905092915050565b505050565b505050565b600081836128ba91906137a9565b905092915050565b6000600267ffffffffffffffff8111156128df576128de6139df565b5b60405190808252806020026020018201604052801561290d5781602001602082028036833780820191505090505b5090503081600081518110612925576129246139b0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156129c757600080fd5b505afa1580156129db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ff9190612d57565b81600181518110612a1357612a126139b0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a7a30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846116a6565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612ade9594939291906135ad565b600060405180830381600087803b158015612af857600080fd5b505af1158015612b0c573d6000803e3d6000fd5b505050505050565b612b4130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846116a6565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612bca969594939291906132f4565b6060604051808303818588803b158015612be357600080fd5b505af1158015612bf7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c1c9190612f4d565b5050505050565b6000612c36612c3184613647565b613622565b90508083825260208201905082856020860282011115612c5957612c58613a13565b5b60005b85811015612c895781612c6f8882612c93565b845260208401935060208301925050600181019050612c5c565b5050509392505050565b600081359050612ca281613efd565b92915050565b600081519050612cb781613efd565b92915050565b600082601f830112612cd257612cd1613a0e565b5b8135612ce2848260208601612c23565b91505092915050565b600081359050612cfa81613f14565b92915050565b600081359050612d0f81613f2b565b92915050565b600081519050612d2481613f2b565b92915050565b600060208284031215612d4057612d3f613a1d565b5b6000612d4e84828501612c93565b91505092915050565b600060208284031215612d6d57612d6c613a1d565b5b6000612d7b84828501612ca8565b91505092915050565b60008060408385031215612d9b57612d9a613a1d565b5b6000612da985828601612c93565b9250506020612dba85828601612c93565b9150509250929050565b600080600060608486031215612ddd57612ddc613a1d565b5b6000612deb86828701612c93565b9350506020612dfc86828701612c93565b9250506040612e0d86828701612d00565b9150509250925092565b60008060408385031215612e2e57612e2d613a1d565b5b6000612e3c85828601612c93565b9250506020612e4d85828601612ceb565b9150509250929050565b60008060408385031215612e6e57612e6d613a1d565b5b6000612e7c85828601612c93565b9250506020612e8d85828601612d00565b9150509250929050565b600060208284031215612ead57612eac613a1d565b5b600082013567ffffffffffffffff811115612ecb57612eca613a18565b5b612ed784828501612cbd565b91505092915050565b600060208284031215612ef657612ef5613a1d565b5b6000612f0484828501612d00565b91505092915050565b60008060408385031215612f2457612f23613a1d565b5b6000612f3285828601612d00565b9250506020612f4385828601612d00565b9150509250929050565b600080600060608486031215612f6657612f65613a1d565b5b6000612f7486828701612d15565b9350506020612f8586828701612d15565b9250506040612f9686828701612d15565b9150509250925092565b6000612fac8383612fb8565b60208301905092915050565b612fc1816137dd565b82525050565b612fd0816137dd565b82525050565b6000612fe182613683565b612feb81856136a6565b9350612ff683613673565b8060005b8381101561302757815161300e8882612fa0565b975061301983613699565b925050600181019050612ffa565b5085935050505092915050565b61303d816137ef565b82525050565b61304c81613832565b82525050565b600061305d8261368e565b61306781856136b7565b9350613077818560208601613844565b61308081613a22565b840191505092915050565b60006130986023836136b7565b91506130a382613a33565b604082019050919050565b60006130bb6026836136b7565b91506130c682613a82565b604082019050919050565b60006130de6022836136b7565b91506130e982613ad1565b604082019050919050565b6000613101601d836136b7565b915061310c82613b20565b602082019050919050565b60006131246026836136b7565b915061312f82613b49565b604082019050919050565b60006131476037836136b7565b915061315282613b98565b604082019050919050565b600061316a6038836136b7565b915061317582613be7565b604082019050919050565b600061318d6022836136b7565b915061319882613c36565b604082019050919050565b60006131b06020836136b7565b91506131bb82613c85565b602082019050919050565b60006131d36042836136b7565b91506131de82613cae565b606082019050919050565b60006131f66025836136b7565b915061320182613d23565b604082019050919050565b6000613219603e836136b7565b915061322482613d72565b604082019050919050565b600061323c6024836136b7565b915061324782613dc1565b604082019050919050565b600061325f6041836136b7565b915061326a82613e10565b606082019050919050565b6000613282601f836136b7565b915061328d82613e85565b602082019050919050565b60006132a56025836136b7565b91506132b082613eae565b604082019050919050565b6132c48161381b565b82525050565b6132d381613825565b82525050565b60006020820190506132ee6000830184612fc7565b92915050565b600060c0820190506133096000830189612fc7565b61331660208301886132bb565b6133236040830187613043565b6133306060830186613043565b61333d6080830185612fc7565b61334a60a08301846132bb565b979650505050505050565b600060208201905061336a6000830184613034565b92915050565b6000602082019050818103600083015261338a8184613052565b905092915050565b600060208201905081810360008301526133ab8161308b565b9050919050565b600060208201905081810360008301526133cb816130ae565b9050919050565b600060208201905081810360008301526133eb816130d1565b9050919050565b6000602082019050818103600083015261340b816130f4565b9050919050565b6000602082019050818103600083015261342b81613117565b9050919050565b6000602082019050818103600083015261344b8161313a565b9050919050565b6000602082019050818103600083015261346b8161315d565b9050919050565b6000602082019050818103600083015261348b81613180565b9050919050565b600060208201905081810360008301526134ab816131a3565b9050919050565b600060208201905081810360008301526134cb816131c6565b9050919050565b600060208201905081810360008301526134eb816131e9565b9050919050565b6000602082019050818103600083015261350b8161320c565b9050919050565b6000602082019050818103600083015261352b8161322f565b9050919050565b6000602082019050818103600083015261354b81613252565b9050919050565b6000602082019050818103600083015261356b81613275565b9050919050565b6000602082019050818103600083015261358b81613298565b9050919050565b60006020820190506135a760008301846132bb565b92915050565b600060a0820190506135c260008301886132bb565b6135cf6020830187613043565b81810360408301526135e18186612fd6565b90506135f06060830185612fc7565b6135fd60808301846132bb565b9695505050505050565b600060208201905061361c60008301846132ca565b92915050565b600061362c61363d565b905061363882826138a9565b919050565b6000604051905090565b600067ffffffffffffffff821115613662576136616139df565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006136d38261381b565b91506136de8361381b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561371357613712613923565b5b828201905092915050565b60006137298261381b565b91506137348361381b565b92508261374457613743613952565b5b828204905092915050565b600061375a8261381b565b91506137658361381b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561379e5761379d613923565b5b828202905092915050565b60006137b48261381b565b91506137bf8361381b565b9250828210156137d2576137d1613923565b5b828203905092915050565b60006137e8826137fb565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061383d8261381b565b9050919050565b60005b83811015613862578082015181840152602081019050613847565b83811115613871576000848401525b50505050565b6000600282049050600182168061388f57607f821691505b602082108114156138a3576138a2613981565b5b50919050565b6138b282613a22565b810181811067ffffffffffffffff821117156138d1576138d06139df565b5b80604052505050565b60006138e58261381b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561391857613917613923565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53776170207468726573686f6c642063616e6e6f74206265206869676865722060008201527f7468616e20302e352520746f74616c20737570706c792e000000000000000000602082015250565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460008201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208201527f742e000000000000000000000000000000000000000000000000000000000000604082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f752068617665206265656e20626c61636b6c69737465642c20796f75206160008201527f726520756e61626c6520746f207472616e73666572206f7220737761702e0000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b7f5f7472616e736665723a3a204d61782077616c6c657420657863656564656400600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b613f06816137dd565b8114613f1157600080fd5b50565b613f1d816137ef565b8114613f2857600080fd5b50565b613f348161381b565b8114613f3f57600080fd5b5056fea2646970667358221220dfd0b4b437f67e5104918c609baff72f297d4e99ad0246d344b40cc5f161d6e964736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101dc5760003560e01c80637911ef9d11610102578063c024666811610095578063dbf23cf611610064578063dbf23cf6146106f3578063dd62ed3e1461070a578063f2fde38b14610747578063f8b45b0514610770576101e3565b8063c024666814610637578063c8c8ebe414610660578063cef851391461068b578063dbac26e9146106b6576101e3565b80638da5cb5b116100d15780638da5cb5b1461056757806395d89b4114610592578063a457c2d7146105bd578063a9059cbb146105fa576101e3565b80637911ef9d146104af5780637cb332bb146104d857806382aa7c68146105015780638baa63b21461052a576101e3565b8063313ce5671161017a5780636db79437116101495780636db794371461040757806370a0823114610430578063715018a61461046d578063751039fc14610484576101e3565b8063313ce5671461033757806339509351146103625780634a62bb651461039f5780634fbee193146103ca576101e3565b806311704f52116101b657806311704f521461027957806313114a9d146102a457806318160ddd146102cf57806323b872dd146102fa576101e3565b8063041f173f146101e857806306fdde0314610211578063095ea7b31461023c576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612e97565b61079b565b005b34801561021d57600080fd5b50610226610992565b6040516102339190613370565b60405180910390f35b34801561024857600080fd5b50610263600480360381019061025e9190612e57565b610a24565b6040516102709190613355565b60405180910390f35b34801561028557600080fd5b5061028e610a47565b60405161029b9190613355565b60405180910390f35b3480156102b057600080fd5b506102b9610a5a565b6040516102c69190613592565b60405180910390f35b3480156102db57600080fd5b506102e4610a60565b6040516102f19190613592565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190612dc4565b610a6a565b60405161032e9190613355565b60405180910390f35b34801561034357600080fd5b5061034c610a99565b6040516103599190613607565b60405180910390f35b34801561036e57600080fd5b5061038960048036038101906103849190612e57565b610aa2565b6040516103969190613355565b60405180910390f35b3480156103ab57600080fd5b506103b4610b4c565b6040516103c19190613355565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190612d2a565b610b5f565b6040516103fe9190613355565b60405180910390f35b34801561041357600080fd5b5061042e60048036038101906104299190612f0d565b610bb5565b005b34801561043c57600080fd5b5061045760048036038101906104529190612d2a565b610c63565b6040516104649190613592565b60405180910390f35b34801561047957600080fd5b50610482610cab565b005b34801561049057600080fd5b50610499610d33565b6040516104a69190613355565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d19190612e97565b610dd3565b005b3480156104e457600080fd5b506104ff60048036038101906104fa9190612d2a565b610ee4565b005b34801561050d57600080fd5b5061052860048036038101906105239190612ee0565b610fa4565b005b34801561053657600080fd5b50610551600480360381019061054c9190612ee0565b611057565b60405161055e9190613355565b60405180910390f35b34801561057357600080fd5b5061057c6111ac565b60405161058991906132d9565b60405180910390f35b34801561059e57600080fd5b506105a76111d6565b6040516105b49190613370565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190612e57565b611268565b6040516105f19190613355565b60405180910390f35b34801561060657600080fd5b50610621600480360381019061061c9190612e57565b611352565b60405161062e9190613355565b60405180910390f35b34801561064357600080fd5b5061065e60048036038101906106599190612e17565b611375565b005b34801561066c57600080fd5b5061067561144c565b6040516106829190613592565b60405180910390f35b34801561069757600080fd5b506106a0611452565b6040516106ad9190613592565b60405180910390f35b3480156106c257600080fd5b506106dd60048036038101906106d89190612d2a565b611458565b6040516106ea9190613355565b60405180910390f35b3480156106ff57600080fd5b506107086114ae565b005b34801561071657600080fd5b50610731600480360381019061072c9190612d84565b611519565b60405161073e9190613592565b60405180910390f35b34801561075357600080fd5b5061076e60048036038101906107699190612d2a565b6115a0565b005b34801561077c57600080fd5b50610785611698565b6040516107929190613592565b60405180910390f35b6107a361169e565b73ffffffffffffffffffffffffffffffffffffffff166107c16111ac565b73ffffffffffffffffffffffffffffffffffffffff1614610817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080e90613492565b60405180910390fd5b60005b815181101561098e57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682828151811061086f5761086e6139b0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156109035750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168282815181106108e2576108e16139b0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b1561097b57600160086000848481518110610921576109206139b0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610986906138da565b91505061081a565b5050565b6060600380546109a190613877565b80601f01602080910402602001604051908101604052809291908181526020018280546109cd90613877565b8015610a1a5780601f106109ef57610100808354040283529160200191610a1a565b820191906000526020600020905b8154815290600101906020018083116109fd57829003601f168201915b5050505050905090565b600080610a2f61169e565b9050610a3c8185856116a6565b600191505092915050565b600f60019054906101000a900460ff1681565b60145481565b6000600254905090565b600080610a7561169e565b9050610a82858285611871565b610a8d8585856118fd565b60019150509392505050565b60006012905090565b600080610aad61169e565b9050610b41818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3c91906136c8565b6116a6565b600191505092915050565b600f60009054906101000a900460ff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610bbd61169e565b73ffffffffffffffffffffffffffffffffffffffff16610bdb6111ac565b73ffffffffffffffffffffffffffffffffffffffff1614610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890613492565b60405180910390fd5b6008610c46828461239490919063ffffffff16565b1115610c5157600080fd5b81601081905550806011819055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cb361169e565b73ffffffffffffffffffffffffffffffffffffffff16610cd16111ac565b73ffffffffffffffffffffffffffffffffffffffff1614610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e90613492565b60405180910390fd5b610d3160006123aa565b565b6000610d3d61169e565b73ffffffffffffffffffffffffffffffffffffffff16610d5b6111ac565b73ffffffffffffffffffffffffffffffffffffffff1614610db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da890613492565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b610ddb61169e565b73ffffffffffffffffffffffffffffffffffffffff16610df96111ac565b73ffffffffffffffffffffffffffffffffffffffff1614610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690613492565b60405180910390fd5b60005b8151811015610ee057600060086000848481518110610e7457610e736139b0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ed8906138da565b915050610e52565b5050565b610eec61169e565b73ffffffffffffffffffffffffffffffffffffffff16610f0a6111ac565b73ffffffffffffffffffffffffffffffffffffffff1614610f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5790613492565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610fac61169e565b73ffffffffffffffffffffffffffffffffffffffff16610fca6111ac565b73ffffffffffffffffffffffffffffffffffffffff1614611020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101790613492565b60405180910390fd5b6001600f60016101000a81548160ff02191690831515021790555061104e814361239490919063ffffffff16565b600a8190555050565b600061106161169e565b73ffffffffffffffffffffffffffffffffffffffff1661107f6111ac565b73ffffffffffffffffffffffffffffffffffffffff16146110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc90613492565b60405180910390fd5b620186a060016110e3610a60565b6110ed919061374f565b6110f7919061371e565b821015611139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113090613452565b60405180910390fd5b6103e86005611146610a60565b611150919061374f565b61115a919061371e565b82111561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390613432565b60405180910390fd5b81600d8190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111e590613877565b80601f016020809104026020016040519081016040528092919081815260200182805461121190613877565b801561125e5780601f106112335761010080835404028352916020019161125e565b820191906000526020600020905b81548152906001019060200180831161124157829003601f168201915b5050505050905090565b60008061127361169e565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090613572565b60405180910390fd5b61134682868684036116a6565b60019250505092915050565b60008061135d61169e565b905061136a8185856118fd565b600191505092915050565b61137d61169e565b73ffffffffffffffffffffffffffffffffffffffff1661139b6111ac565b73ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890613492565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b600d5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611516573d6000803e3d6000fd5b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6115a861169e565b73ffffffffffffffffffffffffffffffffffffffff166115c66111ac565b73ffffffffffffffffffffffffffffffffffffffff161461161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161390613492565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561168c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611683906133b2565b60405180910390fd5b611695816123aa565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170d90613512565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d906133d2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118649190613592565b60405180910390a3505050565b600061187d8484611519565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118f757818110156118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e0906133f2565b60405180910390fd5b6118f684848484036116a6565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561196d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611964906134d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d490613392565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a61906134f2565b60405180910390fd5b6000811415611a8457611a7f83836000612470565b61238f565b600f60009054906101000a900460ff1615611fe157611aa16111ac565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611b0f5750611adf6111ac565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b485750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b82575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b9b5750600960009054906101000a900460ff16155b15611fe057600f60019054906101000a900460ff16611c9557601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c555750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b90613472565b60405180910390fd5b5b43600a5410611cf7576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611d9a5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e4157600c54811115611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb90613532565b60405180910390fd5b600e54611df083610c63565b82611dfb91906136c8565b1115611e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3390613552565b60405180910390fd5b611fdf565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ee45750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f3357600c54811115611f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f25906134b2565b60405180910390fd5b611fde565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611fdd57600e54611f9083610c63565b82611f9b91906136c8565b1115611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd390613552565b60405180910390fd5b5b5b5b5b5b6000611fec30610c63565b90506000600d5482101590508080156120125750600960009054906101000a900460ff16155b80156120685750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120be5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121145750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612158576001600960006101000a81548160ff02191690831515021790555061213c6126f1565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061220e5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806122b95750601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122b85750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b156122c357600090505b6000811561237f576122f360646122e56014548861287690919063ffffffff16565b61288c90919063ffffffff16565b905060145460115482612306919061374f565b612310919061371e565b6013600082825461232191906136c8565b9250508190555060145460105482612339919061374f565b612343919061371e565b6012600082825461235491906136c8565b9250508190555060008111156123705761236f873083612470565b5b808561237c91906137a9565b94505b61238a878787612470565b505050505b505050565b600081836123a291906136c8565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d7906134d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254790613392565b60405180910390fd5b61255b8383836128a2565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156125e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d890613412565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461267491906136c8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126d89190613592565b60405180910390a36126eb8484846128a7565b50505050565b60006126fc30610c63565b9050600060125460135461271091906136c8565b90506000821415612722575050612874565b600d5482111561273257600d5491505b600060028260135485612745919061374f565b61274f919061371e565b612759919061371e565b9050600061277082856128ac90919063ffffffff16565b90506000479050612780826128c2565b600061279582476128ac90919063ffffffff16565b905060006127c0866127b26012548561287690919063ffffffff16565b61288c90919063ffffffff16565b9050600081836127d091906137a9565b905060006012819055506000601381905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561284a573d6000803e3d6000fd5b5060008611801561285b5750600081115b1561286b5761286a8682612b14565b5b50505050505050505b565b60008183612884919061374f565b905092915050565b6000818361289a919061371e565b905092915050565b505050565b505050565b600081836128ba91906137a9565b905092915050565b6000600267ffffffffffffffff8111156128df576128de6139df565b5b60405190808252806020026020018201604052801561290d5781602001602082028036833780820191505090505b5090503081600081518110612925576129246139b0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156129c757600080fd5b505afa1580156129db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ff9190612d57565b81600181518110612a1357612a126139b0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a7a30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846116a6565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612ade9594939291906135ad565b600060405180830381600087803b158015612af857600080fd5b505af1158015612b0c573d6000803e3d6000fd5b505050505050565b612b4130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846116a6565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612bca969594939291906132f4565b6060604051808303818588803b158015612be357600080fd5b505af1158015612bf7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c1c9190612f4d565b5050505050565b6000612c36612c3184613647565b613622565b90508083825260208201905082856020860282011115612c5957612c58613a13565b5b60005b85811015612c895781612c6f8882612c93565b845260208401935060208301925050600181019050612c5c565b5050509392505050565b600081359050612ca281613efd565b92915050565b600081519050612cb781613efd565b92915050565b600082601f830112612cd257612cd1613a0e565b5b8135612ce2848260208601612c23565b91505092915050565b600081359050612cfa81613f14565b92915050565b600081359050612d0f81613f2b565b92915050565b600081519050612d2481613f2b565b92915050565b600060208284031215612d4057612d3f613a1d565b5b6000612d4e84828501612c93565b91505092915050565b600060208284031215612d6d57612d6c613a1d565b5b6000612d7b84828501612ca8565b91505092915050565b60008060408385031215612d9b57612d9a613a1d565b5b6000612da985828601612c93565b9250506020612dba85828601612c93565b9150509250929050565b600080600060608486031215612ddd57612ddc613a1d565b5b6000612deb86828701612c93565b9350506020612dfc86828701612c93565b9250506040612e0d86828701612d00565b9150509250925092565b60008060408385031215612e2e57612e2d613a1d565b5b6000612e3c85828601612c93565b9250506020612e4d85828601612ceb565b9150509250929050565b60008060408385031215612e6e57612e6d613a1d565b5b6000612e7c85828601612c93565b9250506020612e8d85828601612d00565b9150509250929050565b600060208284031215612ead57612eac613a1d565b5b600082013567ffffffffffffffff811115612ecb57612eca613a18565b5b612ed784828501612cbd565b91505092915050565b600060208284031215612ef657612ef5613a1d565b5b6000612f0484828501612d00565b91505092915050565b60008060408385031215612f2457612f23613a1d565b5b6000612f3285828601612d00565b9250506020612f4385828601612d00565b9150509250929050565b600080600060608486031215612f6657612f65613a1d565b5b6000612f7486828701612d15565b9350506020612f8586828701612d15565b9250506040612f9686828701612d15565b9150509250925092565b6000612fac8383612fb8565b60208301905092915050565b612fc1816137dd565b82525050565b612fd0816137dd565b82525050565b6000612fe182613683565b612feb81856136a6565b9350612ff683613673565b8060005b8381101561302757815161300e8882612fa0565b975061301983613699565b925050600181019050612ffa565b5085935050505092915050565b61303d816137ef565b82525050565b61304c81613832565b82525050565b600061305d8261368e565b61306781856136b7565b9350613077818560208601613844565b61308081613a22565b840191505092915050565b60006130986023836136b7565b91506130a382613a33565b604082019050919050565b60006130bb6026836136b7565b91506130c682613a82565b604082019050919050565b60006130de6022836136b7565b91506130e982613ad1565b604082019050919050565b6000613101601d836136b7565b915061310c82613b20565b602082019050919050565b60006131246026836136b7565b915061312f82613b49565b604082019050919050565b60006131476037836136b7565b915061315282613b98565b604082019050919050565b600061316a6038836136b7565b915061317582613be7565b604082019050919050565b600061318d6022836136b7565b915061319882613c36565b604082019050919050565b60006131b06020836136b7565b91506131bb82613c85565b602082019050919050565b60006131d36042836136b7565b91506131de82613cae565b606082019050919050565b60006131f66025836136b7565b915061320182613d23565b604082019050919050565b6000613219603e836136b7565b915061322482613d72565b604082019050919050565b600061323c6024836136b7565b915061324782613dc1565b604082019050919050565b600061325f6041836136b7565b915061326a82613e10565b606082019050919050565b6000613282601f836136b7565b915061328d82613e85565b602082019050919050565b60006132a56025836136b7565b91506132b082613eae565b604082019050919050565b6132c48161381b565b82525050565b6132d381613825565b82525050565b60006020820190506132ee6000830184612fc7565b92915050565b600060c0820190506133096000830189612fc7565b61331660208301886132bb565b6133236040830187613043565b6133306060830186613043565b61333d6080830185612fc7565b61334a60a08301846132bb565b979650505050505050565b600060208201905061336a6000830184613034565b92915050565b6000602082019050818103600083015261338a8184613052565b905092915050565b600060208201905081810360008301526133ab8161308b565b9050919050565b600060208201905081810360008301526133cb816130ae565b9050919050565b600060208201905081810360008301526133eb816130d1565b9050919050565b6000602082019050818103600083015261340b816130f4565b9050919050565b6000602082019050818103600083015261342b81613117565b9050919050565b6000602082019050818103600083015261344b8161313a565b9050919050565b6000602082019050818103600083015261346b8161315d565b9050919050565b6000602082019050818103600083015261348b81613180565b9050919050565b600060208201905081810360008301526134ab816131a3565b9050919050565b600060208201905081810360008301526134cb816131c6565b9050919050565b600060208201905081810360008301526134eb816131e9565b9050919050565b6000602082019050818103600083015261350b8161320c565b9050919050565b6000602082019050818103600083015261352b8161322f565b9050919050565b6000602082019050818103600083015261354b81613252565b9050919050565b6000602082019050818103600083015261356b81613275565b9050919050565b6000602082019050818103600083015261358b81613298565b9050919050565b60006020820190506135a760008301846132bb565b92915050565b600060a0820190506135c260008301886132bb565b6135cf6020830187613043565b81810360408301526135e18186612fd6565b90506135f06060830185612fc7565b6135fd60808301846132bb565b9695505050505050565b600060208201905061361c60008301846132ca565b92915050565b600061362c61363d565b905061363882826138a9565b919050565b6000604051905090565b600067ffffffffffffffff821115613662576136616139df565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006136d38261381b565b91506136de8361381b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561371357613712613923565b5b828201905092915050565b60006137298261381b565b91506137348361381b565b92508261374457613743613952565b5b828204905092915050565b600061375a8261381b565b91506137658361381b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561379e5761379d613923565b5b828202905092915050565b60006137b48261381b565b91506137bf8361381b565b9250828210156137d2576137d1613923565b5b828203905092915050565b60006137e8826137fb565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061383d8261381b565b9050919050565b60005b83811015613862578082015181840152602081019050613847565b83811115613871576000848401525b50505050565b6000600282049050600182168061388f57607f821691505b602082108114156138a3576138a2613981565b5b50919050565b6138b282613a22565b810181811067ffffffffffffffff821117156138d1576138d06139df565b5b80604052505050565b60006138e58261381b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561391857613917613923565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53776170207468726573686f6c642063616e6e6f74206265206869676865722060008201527f7468616e20302e352520746f74616c20737570706c792e000000000000000000602082015250565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460008201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208201527f742e000000000000000000000000000000000000000000000000000000000000604082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f752068617665206265656e20626c61636b6c69737465642c20796f75206160008201527f726520756e61626c6520746f207472616e73666572206f7220737761702e0000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b7f5f7472616e736665723a3a204d61782077616c6c657420657863656564656400600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b613f06816137dd565b8114613f1157600080fd5b50565b613f1d816137ef565b8114613f2857600080fd5b50565b613f348161381b565b8114613f3f57600080fd5b5056fea2646970667358221220dfd0b4b437f67e5104918c609baff72f297d4e99ad0246d344b40cc5f161d6e964736f6c63430008070033
Deployed Bytecode Sourcemap
354:9884:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4390:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2196:100:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4547:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;844:31:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1040:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3316:108:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5328:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3158:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6032:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;804:33:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4253:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3516:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3487:127:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1714:103:9;;;;;;;;;;;;;:::i;:::-;;3243:121:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4703:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3730:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3039:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3843:402;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1063:87:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2415:104:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6775:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3820:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3372:132:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;680:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;722:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4910:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10089:109;;;;;;;;;;;;;:::i;:::-;;4076:151:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1972:201:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;763:24:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4390:301;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4470:6:1::1;4465:219;4486:9;:16;4482:1;:20;4465:219;;;4544:13;;;;;;;;;;;4528:29;;:9;4538:1;4528:12;;;;;;;;:::i;:::-;;;;;;;;:29;;;;:73;;;;;4585:15;;;;;;;;;;;4561:40;;:9;4571:1;4561:12;;;;;;;;:::i;:::-;;;;;;;;:40;;;;4528:73;4524:149;;;4653:4;4622:14;:28;4637:9;4647:1;4637:12;;;;;;;;:::i;:::-;;;;;;;;4622:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;4524:149;4504:3;;;;;:::i;:::-;;;;4465:219;;;;4390:301:::0;:::o;2196:100:2:-;2250:13;2283:5;2276:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2196:100;:::o;4547:201::-;4630:4;4647:13;4663:12;:10;:12::i;:::-;4647:28;;4686:32;4695:5;4702:7;4711:6;4686:8;:32::i;:::-;4736:4;4729:11;;;4547:201;;;;:::o;844:31:1:-;;;;;;;;;;;;;:::o;1040:51::-;;;;:::o;3316:108:2:-;3377:7;3404:12;;3397:19;;3316:108;:::o;5328:295::-;5459:4;5476:15;5494:12;:10;:12::i;:::-;5476:30;;5517:38;5533:4;5539:7;5548:6;5517:15;:38::i;:::-;5566:27;5576:4;5582:2;5586:6;5566:9;:27::i;:::-;5611:4;5604:11;;;5328:295;;;;;:::o;3158:93::-;3216:5;3241:2;3234:9;;3158:93;:::o;6032:240::-;6120:4;6137:13;6153:12;:10;:12::i;:::-;6137:28;;6176:66;6185:5;6192:7;6231:10;6201:11;:18;6213:5;6201:18;;;;;;;;;;;;;;;:27;6220:7;6201:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;6176:8;:66::i;:::-;6260:4;6253:11;;;6032:240;;;;:::o;804:33:1:-;;;;;;;;;;;;;:::o;4253:125::-;4318:4;4342:19;:28;4362:7;4342:28;;;;;;;;;;;;;;;;;;;;;;;;;4335:35;;4253:125;;;:::o;3516:206::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3642:1:1::1;3613:25;3625:12;3613:7;:11;;:25;;;;:::i;:::-;:30;;3605:39;;;::::0;::::1;;3668:7;3657:8;:18;;;;3702:12;3686:13;:28;;;;3516:206:::0;;:::o;3487:127:2:-;3561:7;3588:9;:18;3598:7;3588:18;;;;;;;;;;;;;;;;3581:25;;3487:127;;;:::o;1714:103:9:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1779:30:::1;1806:1;1779:18;:30::i;:::-;1714:103::o:0;3243:121:1:-;3295:4;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3329:5:1::1;3312:14;;:22;;;;;;;;;;;;;;;;;;3352:4;3345:11;;3243:121:::0;:::o;4703:195::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4789:6:1::1;4784:107;4805:9;:16;4801:1;:20;4784:107;;;4874:5;4843:14;:28;4858:9;4868:1;4858:12;;;;;;;;:::i;:::-;;;;;;;;4843:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;4823:3;;;;;:::i;:::-;;;;4784:107;;;;4703:195:::0;:::o;3730:105::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3818:9:1::1;3805:10;;:22;;;;;;;;;;;;;;;;;;3730:105:::0;:::o;3039:143::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3122:4:1::1;3108:11;;:18;;;;;;;;;;;;;;;;;;3150:24;3167:6;3150:12;:16;;:24;;;;:::i;:::-;3137:10;:37;;;;3039:143:::0;:::o;3843:402::-;3928:4;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3988:6:1::1;3984:1;3968:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;3952:12;:42;;3944:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;4109:4;4105:1;4089:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;4073:12;:40;;4065:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;4205:12;4183:19;:34;;;;4234:4;4227:11;;3843:402:::0;;;:::o;1063:87:9:-;1109:7;1136:6;;;;;;;;;;;1129:13;;1063:87;:::o;2415:104:2:-;2471:13;2504:7;2497:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2415:104;:::o;6775:438::-;6868:4;6885:13;6901:12;:10;:12::i;:::-;6885:28;;6924:24;6951:11;:18;6963:5;6951:18;;;;;;;;;;;;;;;:27;6970:7;6951:27;;;;;;;;;;;;;;;;6924:54;;7017:15;6997:16;:35;;6989:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;7110:60;7119:5;7126:7;7154:15;7135:16;:34;7110:8;:60::i;:::-;7201:4;7194:11;;;;6775:438;;;;:::o;3820:193::-;3899:4;3916:13;3932:12;:10;:12::i;:::-;3916:28;;3955;3965:5;3972:2;3976:6;3955:9;:28::i;:::-;4001:4;3994:11;;;3820:193;;;;:::o;3372:132:1:-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3488:8:1::1;3457:19;:28;3477:7;3457:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;3372:132:::0;;:::o;680:35::-;;;;:::o;722:34::-;;;;:::o;4910:108::-;4966:4;4990:14;:20;5005:4;4990:20;;;;;;;;;;;;;;;;;;;;;;;;;4983:27;;4910:108;;;:::o;10089:109::-;10147:10;;;;;;;;;;;10139:28;;:51;10168:21;10139:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10089:109::o;4076:151:2:-;4165:7;4192:11;:18;4204:5;4192:18;;;;;;;;;;;;;;;:27;4211:7;4192:27;;;;;;;;;;;;;;;;4185:34;;4076:151;;;;:::o;1972:201:9:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:1:::1;2061:22;;:8;:22;;;;2053:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2137:28;2156:8;2137:18;:28::i;:::-;1972:201:::0;:::o;763:24:1:-;;;;:::o;656:98:0:-;709:7;736:10;729:17;;656:98;:::o;10411:380:2:-;10564:1;10547:19;;:5;:19;;;;10539:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10645:1;10626:21;;:7;:21;;;;10618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10729:6;10699:11;:18;10711:5;10699:18;;;;;;;;;;;;;;;:27;10718:7;10699:27;;;;;;;;;;;;;;;:36;;;;10767:7;10751:32;;10760:5;10751:32;;;10776:6;10751:32;;;;;;:::i;:::-;;;;;;;;10411:380;;;:::o;11078:453::-;11213:24;11240:25;11250:5;11257:7;11240:9;:25::i;:::-;11213:52;;11300:17;11280:16;:37;11276:248;;11362:6;11342:16;:26;;11334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11446:51;11455:5;11462:7;11490:6;11471:16;:25;11446:8;:51::i;:::-;11276:248;11202:329;11078:453;;;:::o;5026:3109:1:-;5174:1;5158:18;;:4;:18;;;;5150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5251:1;5237:16;;:2;:16;;;;5229:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;5313:14;:20;5328:4;5313:20;;;;;;;;;;;;;;;;;;;;;;;;;5312:21;5304:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;5435:1;5425:6;:11;5421:93;;;5453:28;5469:4;5475:2;5479:1;5453:15;:28::i;:::-;5496:7;;5421:93;5572:14;;;;;;;;;;;5568:1352;;;5633:7;:5;:7::i;:::-;5625:15;;:4;:15;;;;:49;;;;;5667:7;:5;:7::i;:::-;5661:13;;:2;:13;;;;5625:49;:86;;;;;5709:1;5695:16;;:2;:16;;;;5625:86;:128;;;;;5746:6;5732:21;;:2;:21;;;;5625:128;:159;;;;;5775:9;;;;;;;;;;;5774:10;5625:159;5603:1306;;;5824:11;;;;;;;;;;;5819:117;;5845:19;:25;5865:4;5845:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;5874:19;:23;5894:2;5874:23;;;;;;;;;;;;;;;;;;;;;;;;;5845:52;5837:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;5819:117;5973:12;5959:10;;:26;5955:57;;6008:4;5987:14;:18;6002:2;5987:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;5955:57;6082:25;:31;6108:4;6082:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;6118:31;:35;6150:2;6118:35;;;;;;;;;;;;;;;;;;;;;;;;;6117:36;6082:71;6078:816;;;6196:20;;6186:6;:30;;6178:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;6343:9;;6326:13;6336:2;6326:9;:13::i;:::-;6317:6;:22;;;;:::i;:::-;:35;;6309:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;6078:816;;;6482:25;:29;6508:2;6482:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;6516:31;:37;6548:4;6516:37;;;;;;;;;;;;;;;;;;;;;;;;;6515:38;6482:71;6478:416;;;6596:20;;6586:6;:30;;6578:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;6478:416;;;6735:31;:35;6767:2;6735:35;;;;;;;;;;;;;;;;;;;;;;;;;6730:164;;6829:9;;6812:13;6822:2;6812:9;:13::i;:::-;6803:6;:22;;;;:::i;:::-;:35;;6795:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;6730:164;6478:416;6078:816;5603:1306;5568:1352;6934:28;6965:24;6983:4;6965:9;:24::i;:::-;6934:55;;7000:12;7039:19;;7015:20;:43;;7000:58;;7087:7;:34;;;;;7112:9;;;;;;;;;;;7111:10;7087:34;:83;;;;;7139:25;:31;7165:4;7139:31;;;;;;;;;;;;;;;;;;;;;;;;;7138:32;7087:83;:126;;;;;7188:19;:25;7208:4;7188:25;;;;;;;;;;;;;;;;;;;;;;;;;7187:26;7087:126;:167;;;;;7231:19;:23;7251:2;7231:23;;;;;;;;;;;;;;;;;;;;;;;;;7230:24;7087:167;7069:297;;;7293:4;7281:9;;:16;;;;;;;;;;;;;;;;;;7312:10;:8;:10::i;:::-;7349:5;7337:9;;:17;;;;;;;;;;;;;;;;;;7069:297;7378:12;7394:9;;;;;;;;;;;7393:10;7378:25;;7524:19;:25;7544:4;7524:25;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;7567:19;:23;7587:2;7567:23;;;;;;;;;;;;;;;;;;;;;;;;;7524:66;:152;;;;7610:25;:31;7636:4;7610:31;;;;;;;;;;;;;;;;;;;;;;;;;7609:32;:66;;;;;7646:25;:29;7672:2;7646:29;;;;;;;;;;;;;;;;;;;;;;;;;7645:30;7609:66;7524:152;7506:197;;;7698:5;7688:15;;7506:197;7724:12;7755:7;7751:331;;;7786:30;7812:3;7786:21;7797:9;;7786:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;7779:37;;7879:9;;7863:13;;7856:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;7833:19;;:55;;;;;;;:::i;:::-;;;;;;;;7939:9;;7928:8;;7921:4;:15;;;;:::i;:::-;:27;;;;:::i;:::-;7903:14;;:45;;;;;;;:::i;:::-;;;;;;;;7988:1;7981:4;:8;7977:56;;;7991:42;8007:4;8021;8028;7991:15;:42::i;:::-;7977:56;8066:4;8056:14;;;;;:::i;:::-;;;7751:331;8094:33;8110:4;8116:2;8120:6;8094:15;:33::i;:::-;5139:2996;;;;5026:3109;;;;:::o;2833:98:10:-;2891:7;2922:1;2918;:5;;;;:::i;:::-;2911:12;;2833:98;;;;:::o;2333:191:9:-;2407:16;2426:6;;;;;;;;;;;2407:25;;2452:8;2443:6;;:17;;;;;;;;;;;;;;;;;;2507:8;2476:40;;2497:8;2476:40;;;;;;;;;;;;2396:128;2333:191;:::o;7692:671:2:-;7839:1;7823:18;;:4;:18;;;;7815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7916:1;7902:16;;:2;:16;;;;7894:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7971:38;7992:4;7998:2;8002:6;7971:20;:38::i;:::-;8022:19;8044:9;:15;8054:4;8044:15;;;;;;;;;;;;;;;;8022:37;;8093:6;8078:11;:21;;8070:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;8210:6;8196:11;:20;8178:9;:15;8188:4;8178:15;;;;;;;;;;;;;;;:38;;;;8255:6;8238:9;:13;8248:2;8238:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;8294:2;8279:26;;8288:4;8279:26;;;8298:6;8279:26;;;;;;:::i;:::-;;;;;;;;8318:37;8338:4;8344:2;8348:6;8318:19;:37::i;:::-;7804:559;7692:671;;;:::o;9001:1080:1:-;9040:23;9066:24;9084:4;9066:9;:24::i;:::-;9040:50;;9101:25;9151:14;;9129:19;;:36;;;;:::i;:::-;9101:64;;9201:1;9182:15;:20;9178:33;;;9204:7;;;;9178:33;9243:19;;9225:15;:37;9221:80;;;9282:19;;9264:37;;9221:80;9314:23;9400:1;9380:17;9358:19;;9340:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;9314:87;;9412:26;9441:36;9461:15;9441;:19;;:36;;;;:::i;:::-;9412:65;;9490:25;9518:21;9490:49;;9552:37;9570:18;9552:17;:37::i;:::-;9611:18;9632:44;9658:17;9632:21;:25;;:44;;;;:::i;:::-;9611:65;;9687:18;9708:53;9743:17;9708:30;9723:14;;9708:10;:14;;:30;;;;:::i;:::-;:34;;:53;;;;:::i;:::-;9687:74;;9772:23;9811:10;9798;:23;;;;:::i;:::-;9772:49;;9851:1;9834:14;:18;;;;9885:1;9863:19;:23;;;;9907:10;;;;;;;;;;;9899:28;;:40;9928:10;9899:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9974:1;9956:15;:19;:42;;;;;9997:1;9979:15;:19;9956:42;9952:122;;;10015:47;10029:15;10046;10015:13;:47::i;:::-;9952:122;9029:1052;;;;;;;;9001:1080;:::o;3571:98:10:-;3629:7;3660:1;3656;:5;;;;:::i;:::-;3649:12;;3571:98;;;;:::o;3970:::-;4028:7;4059:1;4055;:5;;;;:::i;:::-;4048:12;;3970:98;;;;:::o;12131:125:2:-;;;;:::o;12860:124::-;;;;:::o;3214:98:10:-;3272:7;3303:1;3299;:5;;;;:::i;:::-;3292:12;;3214:98;;;;:::o;8143:476:1:-;8210:21;8248:1;8234:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8210:40;;8279:4;8261;8266:1;8261:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;8305:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8295:4;8300:1;8295:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;8340:62;8357:4;8372:15;;;;;;;;;;;8390:11;8340:8;:62::i;:::-;8415:15;;;;;;;;;;;:66;;;8496:11;8522:1;8538:4;8565;8585:15;8415:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8199:420;8143:476;:::o;8627:366::-;8709:62;8726:4;8741:15;;;;;;;;;;;8759:11;8709:8;:62::i;:::-;8784:15;;;;;;;;;;;:31;;;8823:9;8856:4;8876:11;8902:1;8918;8934:10;;;;;;;;;;;8959:15;8784:201;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;8627:366;;:::o;24:722:11:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;752:139;;;;:::o;897:143::-;954:5;985:6;979:13;970:22;;1001:33;1028:5;1001:33;:::i;:::-;897:143;;;;:::o;1063:370::-;1134:5;1183:3;1176:4;1168:6;1164:17;1160:27;1150:122;;1191:79;;:::i;:::-;1150:122;1308:6;1295:20;1333:94;1423:3;1415:6;1408:4;1400:6;1396:17;1333:94;:::i;:::-;1324:103;;1140:293;1063:370;;;;:::o;1439:133::-;1482:5;1520:6;1507:20;1498:29;;1536:30;1560:5;1536:30;:::i;:::-;1439:133;;;;:::o;1578:139::-;1624:5;1662:6;1649:20;1640:29;;1678:33;1705:5;1678:33;:::i;:::-;1578:139;;;;:::o;1723:143::-;1780:5;1811:6;1805:13;1796:22;;1827:33;1854:5;1827:33;:::i;:::-;1723:143;;;;:::o;1872:329::-;1931:6;1980:2;1968:9;1959:7;1955:23;1951:32;1948:119;;;1986:79;;:::i;:::-;1948:119;2106:1;2131:53;2176:7;2167:6;2156:9;2152:22;2131:53;:::i;:::-;2121:63;;2077:117;1872:329;;;;:::o;2207:351::-;2277:6;2326:2;2314:9;2305:7;2301:23;2297:32;2294:119;;;2332:79;;:::i;:::-;2294:119;2452:1;2477:64;2533:7;2524:6;2513:9;2509:22;2477:64;:::i;:::-;2467:74;;2423:128;2207:351;;;;:::o;2564:474::-;2632:6;2640;2689:2;2677:9;2668:7;2664:23;2660:32;2657:119;;;2695:79;;:::i;:::-;2657:119;2815:1;2840:53;2885:7;2876:6;2865:9;2861:22;2840:53;:::i;:::-;2830:63;;2786:117;2942:2;2968:53;3013:7;3004:6;2993:9;2989:22;2968:53;:::i;:::-;2958:63;;2913:118;2564:474;;;;;:::o;3044:619::-;3121:6;3129;3137;3186:2;3174:9;3165:7;3161:23;3157:32;3154:119;;;3192:79;;:::i;:::-;3154:119;3312:1;3337:53;3382:7;3373:6;3362:9;3358:22;3337:53;:::i;:::-;3327:63;;3283:117;3439:2;3465:53;3510:7;3501:6;3490:9;3486:22;3465:53;:::i;:::-;3455:63;;3410:118;3567:2;3593:53;3638:7;3629:6;3618:9;3614:22;3593:53;:::i;:::-;3583:63;;3538:118;3044:619;;;;;:::o;3669:468::-;3734:6;3742;3791:2;3779:9;3770:7;3766:23;3762:32;3759:119;;;3797:79;;:::i;:::-;3759:119;3917:1;3942:53;3987:7;3978:6;3967:9;3963:22;3942:53;:::i;:::-;3932:63;;3888:117;4044:2;4070:50;4112:7;4103:6;4092:9;4088:22;4070:50;:::i;:::-;4060:60;;4015:115;3669:468;;;;;:::o;4143:474::-;4211:6;4219;4268:2;4256:9;4247:7;4243:23;4239:32;4236:119;;;4274:79;;:::i;:::-;4236:119;4394:1;4419:53;4464:7;4455:6;4444:9;4440:22;4419:53;:::i;:::-;4409:63;;4365:117;4521:2;4547:53;4592:7;4583:6;4572:9;4568:22;4547:53;:::i;:::-;4537:63;;4492:118;4143:474;;;;;:::o;4623:539::-;4707:6;4756:2;4744:9;4735:7;4731:23;4727:32;4724:119;;;4762:79;;:::i;:::-;4724:119;4910:1;4899:9;4895:17;4882:31;4940:18;4932:6;4929:30;4926:117;;;4962:79;;:::i;:::-;4926:117;5067:78;5137:7;5128:6;5117:9;5113:22;5067:78;:::i;:::-;5057:88;;4853:302;4623:539;;;;:::o;5168:329::-;5227:6;5276:2;5264:9;5255:7;5251:23;5247:32;5244:119;;;5282:79;;:::i;:::-;5244:119;5402:1;5427:53;5472:7;5463:6;5452:9;5448:22;5427:53;:::i;:::-;5417:63;;5373:117;5168:329;;;;:::o;5503:474::-;5571:6;5579;5628:2;5616:9;5607:7;5603:23;5599:32;5596:119;;;5634:79;;:::i;:::-;5596:119;5754:1;5779:53;5824:7;5815:6;5804:9;5800:22;5779:53;:::i;:::-;5769:63;;5725:117;5881:2;5907:53;5952:7;5943:6;5932:9;5928:22;5907:53;:::i;:::-;5897:63;;5852:118;5503:474;;;;;:::o;5983:663::-;6071:6;6079;6087;6136:2;6124:9;6115:7;6111:23;6107:32;6104:119;;;6142:79;;:::i;:::-;6104:119;6262:1;6287:64;6343:7;6334:6;6323:9;6319:22;6287:64;:::i;:::-;6277:74;;6233:128;6400:2;6426:64;6482:7;6473:6;6462:9;6458:22;6426:64;:::i;:::-;6416:74;;6371:129;6539:2;6565:64;6621:7;6612:6;6601:9;6597:22;6565:64;:::i;:::-;6555:74;;6510:129;5983:663;;;;;:::o;6652:179::-;6721:10;6742:46;6784:3;6776:6;6742:46;:::i;:::-;6820:4;6815:3;6811:14;6797:28;;6652:179;;;;:::o;6837:108::-;6914:24;6932:5;6914:24;:::i;:::-;6909:3;6902:37;6837:108;;:::o;6951:118::-;7038:24;7056:5;7038:24;:::i;:::-;7033:3;7026:37;6951:118;;:::o;7105:732::-;7224:3;7253:54;7301:5;7253:54;:::i;:::-;7323:86;7402:6;7397:3;7323:86;:::i;:::-;7316:93;;7433:56;7483:5;7433:56;:::i;:::-;7512:7;7543:1;7528:284;7553:6;7550:1;7547:13;7528:284;;;7629:6;7623:13;7656:63;7715:3;7700:13;7656:63;:::i;:::-;7649:70;;7742:60;7795:6;7742:60;:::i;:::-;7732:70;;7588:224;7575:1;7572;7568:9;7563:14;;7528:284;;;7532:14;7828:3;7821:10;;7229:608;;;7105:732;;;;:::o;7843:109::-;7924:21;7939:5;7924:21;:::i;:::-;7919:3;7912:34;7843:109;;:::o;7958:147::-;8053:45;8092:5;8053:45;:::i;:::-;8048:3;8041:58;7958:147;;:::o;8111:364::-;8199:3;8227:39;8260:5;8227:39;:::i;:::-;8282:71;8346:6;8341:3;8282:71;:::i;:::-;8275:78;;8362:52;8407:6;8402:3;8395:4;8388:5;8384:16;8362:52;:::i;:::-;8439:29;8461:6;8439:29;:::i;:::-;8434:3;8430:39;8423:46;;8203:272;8111:364;;;;:::o;8481:366::-;8623:3;8644:67;8708:2;8703:3;8644:67;:::i;:::-;8637:74;;8720:93;8809:3;8720:93;:::i;:::-;8838:2;8833:3;8829:12;8822:19;;8481:366;;;:::o;8853:::-;8995:3;9016:67;9080:2;9075:3;9016:67;:::i;:::-;9009:74;;9092:93;9181:3;9092:93;:::i;:::-;9210:2;9205:3;9201:12;9194:19;;8853:366;;;:::o;9225:::-;9367:3;9388:67;9452:2;9447:3;9388:67;:::i;:::-;9381:74;;9464:93;9553:3;9464:93;:::i;:::-;9582:2;9577:3;9573:12;9566:19;;9225:366;;;:::o;9597:::-;9739:3;9760:67;9824:2;9819:3;9760:67;:::i;:::-;9753:74;;9836:93;9925:3;9836:93;:::i;:::-;9954:2;9949:3;9945:12;9938:19;;9597:366;;;:::o;9969:::-;10111:3;10132:67;10196:2;10191:3;10132:67;:::i;:::-;10125:74;;10208:93;10297:3;10208:93;:::i;:::-;10326:2;10321:3;10317:12;10310:19;;9969:366;;;:::o;10341:::-;10483:3;10504:67;10568:2;10563:3;10504:67;:::i;:::-;10497:74;;10580:93;10669:3;10580:93;:::i;:::-;10698:2;10693:3;10689:12;10682:19;;10341:366;;;:::o;10713:::-;10855:3;10876:67;10940:2;10935:3;10876:67;:::i;:::-;10869:74;;10952:93;11041:3;10952:93;:::i;:::-;11070:2;11065:3;11061:12;11054:19;;10713:366;;;:::o;11085:::-;11227:3;11248:67;11312:2;11307:3;11248:67;:::i;:::-;11241:74;;11324:93;11413:3;11324:93;:::i;:::-;11442:2;11437:3;11433:12;11426:19;;11085:366;;;:::o;11457:::-;11599:3;11620:67;11684:2;11679:3;11620:67;:::i;:::-;11613:74;;11696:93;11785:3;11696:93;:::i;:::-;11814:2;11809:3;11805:12;11798:19;;11457:366;;;:::o;11829:::-;11971:3;11992:67;12056:2;12051:3;11992:67;:::i;:::-;11985:74;;12068:93;12157:3;12068:93;:::i;:::-;12186:2;12181:3;12177:12;12170:19;;11829:366;;;:::o;12201:::-;12343:3;12364:67;12428:2;12423:3;12364:67;:::i;:::-;12357:74;;12440:93;12529:3;12440:93;:::i;:::-;12558:2;12553:3;12549:12;12542:19;;12201:366;;;:::o;12573:::-;12715:3;12736:67;12800:2;12795:3;12736:67;:::i;:::-;12729:74;;12812:93;12901:3;12812:93;:::i;:::-;12930:2;12925:3;12921:12;12914:19;;12573:366;;;:::o;12945:::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:::-;13459:3;13480:67;13544:2;13539:3;13480:67;:::i;:::-;13473:74;;13556:93;13645:3;13556:93;:::i;:::-;13674:2;13669:3;13665:12;13658:19;;13317:366;;;:::o;13689:::-;13831:3;13852:67;13916:2;13911:3;13852:67;:::i;:::-;13845:74;;13928:93;14017:3;13928:93;:::i;:::-;14046:2;14041:3;14037:12;14030:19;;13689:366;;;:::o;14061:::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:118::-;14520:24;14538:5;14520:24;:::i;:::-;14515:3;14508:37;14433:118;;:::o;14557:112::-;14640:22;14656:5;14640:22;:::i;:::-;14635:3;14628:35;14557:112;;:::o;14675:222::-;14768:4;14806:2;14795:9;14791:18;14783:26;;14819:71;14887:1;14876:9;14872:17;14863:6;14819:71;:::i;:::-;14675:222;;;;:::o;14903:807::-;15152:4;15190:3;15179:9;15175:19;15167:27;;15204:71;15272:1;15261:9;15257:17;15248:6;15204:71;:::i;:::-;15285:72;15353:2;15342:9;15338:18;15329:6;15285:72;:::i;:::-;15367:80;15443:2;15432:9;15428:18;15419:6;15367:80;:::i;:::-;15457;15533:2;15522:9;15518:18;15509:6;15457:80;:::i;:::-;15547:73;15615:3;15604:9;15600:19;15591:6;15547:73;:::i;:::-;15630;15698:3;15687:9;15683:19;15674:6;15630:73;:::i;:::-;14903:807;;;;;;;;;:::o;15716:210::-;15803:4;15841:2;15830:9;15826:18;15818:26;;15854:65;15916:1;15905:9;15901:17;15892:6;15854:65;:::i;:::-;15716:210;;;;:::o;15932:313::-;16045:4;16083:2;16072:9;16068:18;16060:26;;16132:9;16126:4;16122:20;16118:1;16107:9;16103:17;16096:47;16160:78;16233:4;16224:6;16160:78;:::i;:::-;16152:86;;15932:313;;;;:::o;16251:419::-;16417:4;16455:2;16444:9;16440:18;16432:26;;16504:9;16498:4;16494:20;16490:1;16479:9;16475:17;16468:47;16532:131;16658:4;16532:131;:::i;:::-;16524:139;;16251:419;;;:::o;16676:::-;16842:4;16880:2;16869:9;16865:18;16857:26;;16929:9;16923:4;16919:20;16915:1;16904:9;16900:17;16893:47;16957:131;17083:4;16957:131;:::i;:::-;16949:139;;16676:419;;;:::o;17101:::-;17267:4;17305:2;17294:9;17290:18;17282:26;;17354:9;17348:4;17344:20;17340:1;17329:9;17325:17;17318:47;17382:131;17508:4;17382:131;:::i;:::-;17374:139;;17101:419;;;:::o;17526:::-;17692:4;17730:2;17719:9;17715:18;17707:26;;17779:9;17773:4;17769:20;17765:1;17754:9;17750:17;17743:47;17807:131;17933:4;17807:131;:::i;:::-;17799:139;;17526:419;;;:::o;17951:::-;18117:4;18155:2;18144:9;18140:18;18132:26;;18204:9;18198:4;18194:20;18190:1;18179:9;18175:17;18168:47;18232:131;18358:4;18232:131;:::i;:::-;18224:139;;17951:419;;;:::o;18376:::-;18542:4;18580:2;18569:9;18565:18;18557:26;;18629:9;18623:4;18619:20;18615:1;18604:9;18600:17;18593:47;18657:131;18783:4;18657:131;:::i;:::-;18649:139;;18376:419;;;:::o;18801:::-;18967:4;19005:2;18994:9;18990:18;18982:26;;19054:9;19048:4;19044:20;19040:1;19029:9;19025:17;19018:47;19082:131;19208:4;19082:131;:::i;:::-;19074:139;;18801:419;;;:::o;19226:::-;19392:4;19430:2;19419:9;19415:18;19407:26;;19479:9;19473:4;19469:20;19465:1;19454:9;19450:17;19443:47;19507:131;19633:4;19507:131;:::i;:::-;19499:139;;19226:419;;;:::o;19651:::-;19817:4;19855:2;19844:9;19840:18;19832:26;;19904:9;19898:4;19894:20;19890:1;19879:9;19875:17;19868:47;19932:131;20058:4;19932:131;:::i;:::-;19924:139;;19651:419;;;:::o;20076:::-;20242:4;20280:2;20269:9;20265:18;20257:26;;20329:9;20323:4;20319:20;20315:1;20304:9;20300:17;20293:47;20357:131;20483:4;20357:131;:::i;:::-;20349:139;;20076:419;;;:::o;20501:::-;20667:4;20705:2;20694:9;20690:18;20682:26;;20754:9;20748:4;20744:20;20740:1;20729:9;20725:17;20718:47;20782:131;20908:4;20782:131;:::i;:::-;20774:139;;20501:419;;;:::o;20926:::-;21092:4;21130:2;21119:9;21115:18;21107:26;;21179:9;21173:4;21169:20;21165:1;21154:9;21150:17;21143:47;21207:131;21333:4;21207:131;:::i;:::-;21199:139;;20926:419;;;:::o;21351:::-;21517:4;21555:2;21544:9;21540:18;21532:26;;21604:9;21598:4;21594:20;21590:1;21579:9;21575:17;21568:47;21632:131;21758:4;21632:131;:::i;:::-;21624:139;;21351:419;;;:::o;21776:::-;21942:4;21980:2;21969:9;21965:18;21957:26;;22029:9;22023:4;22019:20;22015:1;22004:9;22000:17;21993:47;22057:131;22183:4;22057:131;:::i;:::-;22049:139;;21776:419;;;:::o;22201:::-;22367:4;22405:2;22394:9;22390:18;22382:26;;22454:9;22448:4;22444:20;22440:1;22429:9;22425:17;22418:47;22482:131;22608:4;22482:131;:::i;:::-;22474:139;;22201:419;;;:::o;22626:::-;22792:4;22830:2;22819:9;22815:18;22807:26;;22879:9;22873:4;22869:20;22865:1;22854:9;22850:17;22843:47;22907:131;23033:4;22907:131;:::i;:::-;22899:139;;22626:419;;;:::o;23051:222::-;23144:4;23182:2;23171:9;23167:18;23159:26;;23195:71;23263:1;23252:9;23248:17;23239:6;23195:71;:::i;:::-;23051:222;;;;:::o;23279:831::-;23542:4;23580:3;23569:9;23565:19;23557:27;;23594:71;23662:1;23651:9;23647:17;23638:6;23594:71;:::i;:::-;23675:80;23751:2;23740:9;23736:18;23727:6;23675:80;:::i;:::-;23802:9;23796:4;23792:20;23787:2;23776:9;23772:18;23765:48;23830:108;23933:4;23924:6;23830:108;:::i;:::-;23822:116;;23948:72;24016:2;24005:9;24001:18;23992:6;23948:72;:::i;:::-;24030:73;24098:3;24087:9;24083:19;24074:6;24030:73;:::i;:::-;23279:831;;;;;;;;:::o;24116:214::-;24205:4;24243:2;24232:9;24228:18;24220:26;;24256:67;24320:1;24309:9;24305:17;24296:6;24256:67;:::i;:::-;24116:214;;;;:::o;24336:129::-;24370:6;24397:20;;:::i;:::-;24387:30;;24426:33;24454:4;24446:6;24426:33;:::i;:::-;24336:129;;;:::o;24471:75::-;24504:6;24537:2;24531:9;24521:19;;24471:75;:::o;24552:311::-;24629:4;24719:18;24711:6;24708:30;24705:56;;;24741:18;;:::i;:::-;24705:56;24791:4;24783:6;24779:17;24771:25;;24851:4;24845;24841:15;24833:23;;24552:311;;;:::o;24869:132::-;24936:4;24959:3;24951:11;;24989:4;24984:3;24980:14;24972:22;;24869:132;;;:::o;25007:114::-;25074:6;25108:5;25102:12;25092:22;;25007:114;;;:::o;25127:99::-;25179:6;25213:5;25207:12;25197:22;;25127:99;;;:::o;25232:113::-;25302:4;25334;25329:3;25325:14;25317:22;;25232:113;;;:::o;25351:184::-;25450:11;25484:6;25479:3;25472:19;25524:4;25519:3;25515:14;25500:29;;25351:184;;;;:::o;25541:169::-;25625:11;25659:6;25654:3;25647:19;25699:4;25694:3;25690:14;25675:29;;25541:169;;;;:::o;25716:305::-;25756:3;25775:20;25793:1;25775:20;:::i;:::-;25770:25;;25809:20;25827:1;25809:20;:::i;:::-;25804:25;;25963:1;25895:66;25891:74;25888:1;25885:81;25882:107;;;25969:18;;:::i;:::-;25882:107;26013:1;26010;26006:9;25999:16;;25716:305;;;;:::o;26027:185::-;26067:1;26084:20;26102:1;26084:20;:::i;:::-;26079:25;;26118:20;26136:1;26118:20;:::i;:::-;26113:25;;26157:1;26147:35;;26162:18;;:::i;:::-;26147:35;26204:1;26201;26197:9;26192:14;;26027:185;;;;:::o;26218:348::-;26258:7;26281:20;26299:1;26281:20;:::i;:::-;26276:25;;26315:20;26333:1;26315:20;:::i;:::-;26310:25;;26503:1;26435:66;26431:74;26428:1;26425:81;26420:1;26413:9;26406:17;26402:105;26399:131;;;26510:18;;:::i;:::-;26399:131;26558:1;26555;26551:9;26540:20;;26218:348;;;;:::o;26572:191::-;26612:4;26632:20;26650:1;26632:20;:::i;:::-;26627:25;;26666:20;26684:1;26666:20;:::i;:::-;26661:25;;26705:1;26702;26699:8;26696:34;;;26710:18;;:::i;:::-;26696:34;26755:1;26752;26748:9;26740:17;;26572:191;;;;:::o;26769:96::-;26806:7;26835:24;26853:5;26835:24;:::i;:::-;26824:35;;26769:96;;;:::o;26871:90::-;26905:7;26948:5;26941:13;26934:21;26923:32;;26871:90;;;:::o;26967:126::-;27004:7;27044:42;27037:5;27033:54;27022:65;;26967:126;;;:::o;27099:77::-;27136:7;27165:5;27154:16;;27099:77;;;:::o;27182:86::-;27217:7;27257:4;27250:5;27246:16;27235:27;;27182:86;;;:::o;27274:121::-;27332:9;27365:24;27383:5;27365:24;:::i;:::-;27352:37;;27274:121;;;:::o;27401:307::-;27469:1;27479:113;27493:6;27490:1;27487:13;27479:113;;;27578:1;27573:3;27569:11;27563:18;27559:1;27554:3;27550:11;27543:39;27515:2;27512:1;27508:10;27503:15;;27479:113;;;27610:6;27607:1;27604:13;27601:101;;;27690:1;27681:6;27676:3;27672:16;27665:27;27601:101;27450:258;27401:307;;;:::o;27714:320::-;27758:6;27795:1;27789:4;27785:12;27775:22;;27842:1;27836:4;27832:12;27863:18;27853:81;;27919:4;27911:6;27907:17;27897:27;;27853:81;27981:2;27973:6;27970:14;27950:18;27947:38;27944:84;;;28000:18;;:::i;:::-;27944:84;27765:269;27714:320;;;:::o;28040:281::-;28123:27;28145:4;28123:27;:::i;:::-;28115:6;28111:40;28253:6;28241:10;28238:22;28217:18;28205:10;28202:34;28199:62;28196:88;;;28264:18;;:::i;:::-;28196:88;28304:10;28300:2;28293:22;28083:238;28040:281;;:::o;28327:233::-;28366:3;28389:24;28407:5;28389:24;:::i;:::-;28380:33;;28435:66;28428:5;28425:77;28422:103;;;28505:18;;:::i;:::-;28422:103;28552:1;28545:5;28541:13;28534:20;;28327:233;;;:::o;28566:180::-;28614:77;28611:1;28604:88;28711:4;28708:1;28701:15;28735:4;28732:1;28725:15;28752:180;28800:77;28797:1;28790:88;28897:4;28894:1;28887:15;28921:4;28918:1;28911:15;28938:180;28986:77;28983:1;28976:88;29083:4;29080:1;29073:15;29107:4;29104:1;29097:15;29124:180;29172:77;29169:1;29162:88;29269:4;29266:1;29259:15;29293:4;29290:1;29283:15;29310:180;29358:77;29355:1;29348:88;29455:4;29452:1;29445:15;29479:4;29476:1;29469:15;29496:117;29605:1;29602;29595:12;29619:117;29728:1;29725;29718:12;29742:117;29851:1;29848;29841:12;29865:117;29974:1;29971;29964:12;29988:102;30029:6;30080:2;30076:7;30071:2;30064:5;30060:14;30056:28;30046:38;;29988:102;;;:::o;30096:222::-;30236:34;30232:1;30224:6;30220:14;30213:58;30305:5;30300:2;30292:6;30288:15;30281:30;30096:222;:::o;30324:225::-;30464:34;30460:1;30452:6;30448:14;30441:58;30533:8;30528:2;30520:6;30516:15;30509:33;30324:225;:::o;30555:221::-;30695:34;30691:1;30683:6;30679:14;30672:58;30764:4;30759:2;30751:6;30747:15;30740:29;30555:221;:::o;30782:179::-;30922:31;30918:1;30910:6;30906:14;30899:55;30782:179;:::o;30967:225::-;31107:34;31103:1;31095:6;31091:14;31084:58;31176:8;31171:2;31163:6;31159:15;31152:33;30967:225;:::o;31198:242::-;31338:34;31334:1;31326:6;31322:14;31315:58;31407:25;31402:2;31394:6;31390:15;31383:50;31198:242;:::o;31446:243::-;31586:34;31582:1;31574:6;31570:14;31563:58;31655:26;31650:2;31642:6;31638:15;31631:51;31446:243;:::o;31695:221::-;31835:34;31831:1;31823:6;31819:14;31812:58;31904:4;31899:2;31891:6;31887:15;31880:29;31695:221;:::o;31922:182::-;32062:34;32058:1;32050:6;32046:14;32039:58;31922:182;:::o;32110:290::-;32250:34;32246:1;32238:6;32234:14;32227:58;32319:34;32314:2;32306:6;32302:15;32295:59;32388:4;32383:2;32375:6;32371:15;32364:29;32110:290;:::o;32406:224::-;32546:34;32542:1;32534:6;32530:14;32523:58;32615:7;32610:2;32602:6;32598:15;32591:32;32406:224;:::o;32636:249::-;32776:34;32772:1;32764:6;32760:14;32753:58;32845:32;32840:2;32832:6;32828:15;32821:57;32636:249;:::o;32891:223::-;33031:34;33027:1;33019:6;33015:14;33008:58;33100:6;33095:2;33087:6;33083:15;33076:31;32891:223;:::o;33120:289::-;33260:34;33256:1;33248:6;33244:14;33237:58;33329:34;33324:2;33316:6;33312:15;33305:59;33398:3;33393:2;33385:6;33381:15;33374:28;33120:289;:::o;33415:181::-;33555:33;33551:1;33543:6;33539:14;33532:57;33415:181;:::o;33602:224::-;33742:34;33738:1;33730:6;33726:14;33719:58;33811:7;33806:2;33798:6;33794:15;33787:32;33602:224;:::o;33832:122::-;33905:24;33923:5;33905:24;:::i;:::-;33898:5;33895:35;33885:63;;33944:1;33941;33934:12;33885:63;33832:122;:::o;33960:116::-;34030:21;34045:5;34030:21;:::i;:::-;34023:5;34020:32;34010:60;;34066:1;34063;34056:12;34010:60;33960:116;:::o;34082:122::-;34155:24;34173:5;34155:24;:::i;:::-;34148:5;34145:35;34135:63;;34194:1;34191;34184:12;34135:63;34082:122;:::o
Swarm Source
ipfs://dfd0b4b437f67e5104918c609baff72f297d4e99ad0246d344b40cc5f161d6e9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,394.32 | 0.00568231 | $19.29 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.