Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 106 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 20564031 | 140 days ago | IN | 0 ETH | 0.00010005 | ||||
Approve | 20558759 | 141 days ago | IN | 0 ETH | 0.00004827 | ||||
Approve | 20558589 | 141 days ago | IN | 0 ETH | 0.00004413 | ||||
Approve | 20557620 | 141 days ago | IN | 0 ETH | 0.00007391 | ||||
Approve | 20557572 | 141 days ago | IN | 0 ETH | 0.00007088 | ||||
Approve | 20557124 | 141 days ago | IN | 0 ETH | 0.00016565 | ||||
Approve | 20556902 | 141 days ago | IN | 0 ETH | 0.00013273 | ||||
Approve | 20556525 | 141 days ago | IN | 0 ETH | 0.00016549 | ||||
Set Blacklist | 20556304 | 141 days ago | IN | 0 ETH | 0.00008787 | ||||
Set Blacklist | 20556269 | 141 days ago | IN | 0 ETH | 0.00006308 | ||||
Approve | 20555983 | 141 days ago | IN | 0 ETH | 0.00008688 | ||||
Approve | 20555580 | 141 days ago | IN | 0 ETH | 0.00006966 | ||||
Approve | 20555410 | 141 days ago | IN | 0 ETH | 0.00014387 | ||||
Approve | 20554907 | 141 days ago | IN | 0 ETH | 0.00022103 | ||||
Transfer | 20554730 | 141 days ago | IN | 0 ETH | 0.0001013 | ||||
Transfer | 20554721 | 141 days ago | IN | 0 ETH | 0.00009749 | ||||
Transfer | 20554716 | 141 days ago | IN | 0 ETH | 0.00009929 | ||||
Transfer | 20554713 | 141 days ago | IN | 0 ETH | 0.00012845 | ||||
Approve | 20554654 | 141 days ago | IN | 0 ETH | 0.00008327 | ||||
Approve | 20554650 | 141 days ago | IN | 0 ETH | 0.00008309 | ||||
Approve | 20554646 | 141 days ago | IN | 0 ETH | 0.00008393 | ||||
Approve | 20554570 | 141 days ago | IN | 0 ETH | 0.00006359 | ||||
Approve | 20554274 | 141 days ago | IN | 0 ETH | 0.00004469 | ||||
Approve | 20554273 | 141 days ago | IN | 0 ETH | 0.00009723 | ||||
Approve | 20551109 | 142 days ago | IN | 0 ETH | 0.00002256 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
SatoParents
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-08-16 */ /* * SPDX-License-Identifier: MIT * https://x.com/satosparents * https://t.me/satoparents * https://satoparents.xyz */ pragma solidity 0.8.19; 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; } } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer( address recipient, uint256 amount ) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, 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}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the upd allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - 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 upd allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][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 upd 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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), 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: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, 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 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 {} } 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); } } interface IDexFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract SatoParents is ERC20, Ownable { using SafeMath for uint256; IDexRouter private immutable dexRouter; address public immutable dexPair; // Swapback bool private swapping; bool private swapbackEnabled = false; uint256 private swapBackValueMin; uint256 private swapBackValueMax; //Anti-whale bool private limitsEnabled = true; uint256 private maxWallet; uint256 private maxTx; mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public tradingEnabled = false; // Fee receivers address private marketingWallet; address private projectWallet; uint256 private buyTaxTotal; uint256 private buyMarketingTax; uint256 private buyProjectTax; uint256 private sellTaxTotal; uint256 private sellMarketingTax; uint256 private sellProjectTax; uint256 private transferTaxTotal; uint256 private transferMarketingTax; uint256 private transferProjectTax; uint256 private tokensForMarketing; uint256 private tokensForProject; /******************/ // exclude from fees and max transaction amount mapping(address => bool) private transferTaxExempt; mapping(address => bool) private transferLimitExempt; mapping(address => bool) private automatedMarketMakerPairs; bool private blacklistEnabled = true; bool private canChangeBlacklist = true; mapping(address => bool) private blacklist; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeFromLimits(address indexed account, bool isExcluded); event SetDexPair(address indexed pair, bool indexed value); event TradingEnabled(uint256 indexed timestamp); event LimitsRemoved(uint256 indexed timestamp); event DisabledTransferDelay(uint256 indexed timestamp); event SwapbackSettingsUpdated( bool enabled, uint256 swapBackValueMin, uint256 swapBackValueMax ); event MaxTxUpdated(uint256 maxTx); event MaxWalletUpdated(uint256 maxWallet); event MarketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event ProjectWalletUpdated( address indexed newWallet, address indexed oldWallet ); event BuyFeeUpdated( uint256 buyTaxTotal, uint256 buyMarketingTax, uint256 buyProjectTax ); event SellFeeUpdated( uint256 sellTaxTotal, uint256 sellMarketingTax, uint256 sellProjectTax ); constructor() ERC20("SatoParents", "$SATOS") { IDexRouter _dexRouter = IDexRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); transactionLimitsExempt(address(_dexRouter), true); dexRouter = _dexRouter; dexPair = IDexFactory(_dexRouter.factory()).createPair( address(this), _dexRouter.WETH() ); transactionLimitsExempt(address(dexPair), true); _setDexPair(address(dexPair), true); uint256 _buyMarketingTax = 20; uint256 _buyProjectTax = 0; uint256 _sellMarketingTax = 80; uint256 _sellProjectTax = 0; uint256 _transferMarketingTax = 20; uint256 _transferProjectTax = 0; uint256 _totalSupply = 1_000_000_000 * 10 ** decimals(); maxTx = (_totalSupply * 10) / 1000; maxWallet = (_totalSupply * 10) / 1000; swapBackValueMin = (_totalSupply * 1) / 1000; swapBackValueMax = (_totalSupply * 2) / 100; buyMarketingTax = _buyMarketingTax; buyProjectTax = _buyProjectTax; buyTaxTotal = buyMarketingTax + buyProjectTax; sellMarketingTax = _sellMarketingTax; sellProjectTax = _sellProjectTax; sellTaxTotal = sellMarketingTax + sellProjectTax; transferMarketingTax = _transferMarketingTax; transferProjectTax = _transferProjectTax; transferTaxTotal = transferMarketingTax + transferProjectTax; marketingWallet = address(0x5dE3f2923C2A81DEb57440Fe113484511dfA651e); projectWallet = address(msg.sender); // exclude from paying fees or having max transaction amount transactionTaxesExempt(msg.sender, true); transactionTaxesExempt(address(this), true); transactionTaxesExempt(address(0xdead), true); transactionTaxesExempt(marketingWallet, true); transactionLimitsExempt(msg.sender, true); transactionLimitsExempt(address(this), true); transactionLimitsExempt(address(0xdead), true); transactionLimitsExempt(marketingWallet, true); transferOwnership(msg.sender); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, _totalSupply); } receive() external payable {} /** * @notice Opens public trading for the token * @dev onlyOwner. */ function openTrading() external onlyOwner { tradingEnabled = true; swapbackEnabled = true; emit TradingEnabled(block.timestamp); } /** * @notice Removes the max wallet and max transaction limits * @dev onlyOwner. * Emits an {LimitsRemoved} event */ function transactionLimitsRemove() external onlyOwner { limitsEnabled = false; emit LimitsRemoved(block.timestamp); } /** * @notice sets if swapback is enabled and sets the minimum and maximum amounts * @dev onlyOwner. * Emits an {SwapbackSettingsUpdated} event * @param _enable If swapback is enabled * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100. * @param _max The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100. */ function swapBackMinMaxEnabledSet( bool _enable, uint256 _min, uint256 _max ) external onlyOwner { require( _min >= 1, "Swap amount cannot be lower than 0.01% total supply." ); require(_max >= _min, "maximum amount cant be higher than minimum"); swapbackEnabled = _enable; swapBackValueMin = (totalSupply() * _min) / 10000; swapBackValueMax = (totalSupply() * _max) / 10000; emit SwapbackSettingsUpdated(_enable, _min, _max); } /** * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction * @dev onlyOwner. * Emits an {MaxTxUpdated} event * @param newMaxTxLimit Base 1000, so 1% = 10 */ function maxTransactionLimitChange( uint256 newMaxTxLimit ) external onlyOwner { require(newMaxTxLimit >= 2, "Cannot set maxTx lower than 0.2%"); maxTx = (newMaxTxLimit * totalSupply()) / 1000; emit MaxTxUpdated(maxTx); } /** * @notice Changes the maximum amount of tokens a wallet can hold * @dev onlyOwner. * Emits an {MaxWalletUpdated} event * @param newMaxWalletLimit Base 1000, so 1% = 10 */ function maxWalletLimitChange( uint256 newMaxWalletLimit ) external onlyOwner { require(newMaxWalletLimit >= 5, "Cannot set maxWallet lower than 0.5%"); maxWallet = (newMaxWalletLimit * totalSupply()) / 1000; emit MaxWalletUpdated(maxWallet); } function setBlacklistEnabled(bool _enabled) external onlyOwner { blacklistEnabled = _enabled; } function setCanChangeBlacklist(bool _canChange) external onlyOwner { canChangeBlacklist = _canChange; } function setMultipleBlacklist(address[] calldata addresses, bool _isBlacklisted) external onlyOwner { require(canChangeBlacklist, "Blacklist cannot be changed anymore"); for (uint256 i = 0; i < addresses.length; i++) { blacklist[addresses[i]] = _isBlacklisted; } } function setBlacklist(address adr, bool _isBlacklisted) external onlyOwner { require(canChangeBlacklist, "Blacklist cannot be changed anymore"); blacklist[adr] = _isBlacklisted; } /** * @notice Sets if a wallet is excluded from the max wallet and tx limits * @dev onlyOwner. * Emits an {ExcludeFromLimits} event * @param updAds The wallet to update * @param isEx If the wallet is excluded or not */ function transactionLimitsExempt( address updAds, bool isEx ) public onlyOwner { transferLimitExempt[updAds] = isEx; emit ExcludeFromLimits(updAds, isEx); } /** * @notice Sets the fees for buys * @dev onlyOwner. * Emits a {BuyFeeUpdated} event * All fees added up must be less than 100 * @param _marketingFee The fee for the marketing wallet * @param _devFee The fee for the dev wallet */ function feesOnBuysSet( uint256 _marketingFee, uint256 _devFee ) external onlyOwner { buyMarketingTax = _marketingFee; buyProjectTax = _devFee; buyTaxTotal = buyMarketingTax + buyProjectTax; require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%"); emit BuyFeeUpdated(buyTaxTotal, buyMarketingTax, buyProjectTax); } /** * @notice Sets the fees for sells * @dev onlyOwner. * Emits a {SellFeeUpdated} event * All fees added up must be less than 100 * @param _marketingFee The fee for the marketing wallet * @param _devFee The fee for the dev wallet */ function feesOnSellsChange( uint256 _marketingFee, uint256 _devFee ) external onlyOwner { sellMarketingTax = _marketingFee; sellProjectTax = _devFee; sellTaxTotal = sellMarketingTax + sellProjectTax; require( sellTaxTotal <= 100, "Total sell fee cannot be higher than 100%" ); emit SellFeeUpdated(sellTaxTotal, sellMarketingTax, sellProjectTax); } function feesOnTransfersChange( uint256 _marketingFee, uint256 _devFee ) external onlyOwner { transferMarketingTax = _marketingFee; transferProjectTax = _devFee; transferTaxTotal = transferMarketingTax + transferProjectTax; require( transferTaxTotal <= 100, "Total transfer fee cannot be higher than 100%" ); } /** * @notice Sets if an address is excluded from fees * @dev onlyOwner. * Emits an {ExcludeFromFees} event * @param account The wallet to update * @param excluded If the wallet is excluded or not */ function transactionTaxesExempt( address account, bool excluded ) public onlyOwner { transferTaxExempt[account] = excluded; emit ExcludeFromFees(account, excluded); } /** * @notice Sets an address as a new liquidity pair. You probably dont want to do this. * @dev onlyOwner. * Emits a {SetDexPair} event * @param pair the address of the pair * @param value If the pair is a automated market maker pair or not */ function setDexPair(address pair, bool value) public onlyOwner { require( pair != dexPair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setDexPair(pair, value); } function _setDexPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetDexPair(pair, value); } /** * @notice Sets the marketing wallet * @dev onlyOwner. * Emits an {MarketingWalletUpdated} event * @param newMktWal The new marketing wallet */ function marketingWalletChange(address newMktWal) external onlyOwner { emit MarketingWalletUpdated(newMktWal, marketingWallet); marketingWallet = newMktWal; } /** * @notice Sets the project wallet * @dev onlyOwner. * Emits an {ProjectWalletUpdated} event * @param newDevWal The new dev wallet */ function developerWalletChange(address newDevWal) external onlyOwner { emit ProjectWalletUpdated(newDevWal, projectWallet); projectWallet = newDevWal; } /** * @notice Information about the swapback settings * @return _swapbackEnabled if swapback is enabled * @return _swapBackValueMin the minimum amount of tokens in the contract balance to trigger swapback * @return _swapBackValueMax the maximum amount of tokens in the contract balance to trigger swapback */ function valuesForSwapback() external view returns ( bool _swapbackEnabled, uint256 _swapBackValueMin, uint256 _swapBackValueMax ) { _swapbackEnabled = swapbackEnabled; _swapBackValueMin = swapBackValueMin; _swapBackValueMax = swapBackValueMax; } /** * @notice Information about the anti whale parameters * @return _limitsEnabled if the wallet limits are in effect * @return _maxWallet The maximum amount of tokens that can be held by a wallet * @return _maxTx The maximum amount of tokens that can be bought or sold in a single transaction */ function valuesForLimits() external view returns (bool _limitsEnabled, uint256 _maxWallet, uint256 _maxTx) { _limitsEnabled = limitsEnabled; _maxWallet = maxWallet; _maxTx = maxTx; } /** * @notice The wallets that receive the collected fees * @return _marketingWallet The wallet that receives the marketing fees * @return _projectWallet The wallet that receives the dev fees */ function valuesForReceivers() external view returns (address _marketingWallet, address _projectWallet) { return (marketingWallet, projectWallet); } /** * @notice Fees for buys, sells, and transfers * @return _buyTaxTotal The total fee for buys * @return _buyMarketingTax The fee for buys that gets sent to marketing * @return _buyProjectTax The fee for buys that gets sent to dev * @return _sellTaxTotal The total fee for sells * @return _sellMarketingTax The fee for sells that gets sent to marketing * @return _sellProjectTax The fee for sells that gets sent to dev */ function valuesForTaxes() external view returns ( uint256 _buyTaxTotal, uint256 _buyMarketingTax, uint256 _buyProjectTax, uint256 _sellTaxTotal, uint256 _sellMarketingTax, uint256 _sellProjectTax ) { _buyTaxTotal = buyTaxTotal; _buyMarketingTax = buyMarketingTax; _buyProjectTax = buyProjectTax; _sellTaxTotal = sellTaxTotal; _sellMarketingTax = sellMarketingTax; _sellProjectTax = sellProjectTax; } /** * @notice If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair * @param _target The wallet to check * @return _transferTaxExempt If the wallet is excluded from fees * @return _transferLimitExempt If the wallet is excluded from max transaction amount * @return _automatedMarketMakerPairs If the wallet is a automated market maker pair */ function addressPermissions( address _target ) external view returns ( bool _transferTaxExempt, bool _transferLimitExempt, bool _automatedMarketMakerPairs ) { _transferTaxExempt = transferTaxExempt[_target]; _transferLimitExempt = transferLimitExempt[_target]; _automatedMarketMakerPairs = automatedMarketMakerPairs[_target]; } 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"); if (amount == 0) { super._transfer(from, to, 0); return; } if (blacklistEnabled) { require( !blacklist[from] && !blacklist[to], "Blacklisted address" ); } if (limitsEnabled) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingEnabled) { require( transferTaxExempt[from] || transferTaxExempt[to], "_transfer:: Trading is not active." ); } //when buy if ( automatedMarketMakerPairs[from] && !transferLimitExempt[to] ) { require( amount <= maxTx, "Buy transfer amount exceeds the maxTx." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !transferLimitExempt[from] ) { require( amount <= maxTx, "Sell transfer amount exceeds the maxTx." ); } else if (!transferLimitExempt[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapBackValueMin; if ( canSwap && swapbackEnabled && !swapping && !automatedMarketMakerPairs[from] && !transferTaxExempt[from] && !transferTaxExempt[to] ) { swapping = true; swapBack(amount); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (transferTaxExempt[from] || transferTaxExempt[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) { fees = amount.mul(sellTaxTotal).div(100); tokensForProject += (fees * sellProjectTax) / sellTaxTotal; tokensForMarketing += (fees * sellMarketingTax) / sellTaxTotal; } // on buy else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) { fees = amount.mul(buyTaxTotal).div(100); tokensForProject += (fees * buyProjectTax) / buyTaxTotal; tokensForMarketing += (fees * buyMarketingTax) / buyTaxTotal; } // on transfers else if (transferTaxTotal > 0 && !automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]) { fees = amount.mul(transferTaxTotal).div(100); tokensForProject += (fees * transferProjectTax) / transferTaxTotal; tokensForMarketing += (fees * transferMarketingTax) / transferTaxTotal; } if (fees > 0) { uint256 projectFee = fees * 20 / 100; uint256 marketingFee = fees - projectFee; super._transfer(from, projectWallet, projectFee); super._transfer(from, marketingWallet, marketingFee); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); _approve(address(this), address(dexRouter), tokenAmount); // make the swap dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } bool anti = true; function setAnti(bool _anti) external onlyOwner { anti = _anti; } function swapBack(uint256 amount) private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = contractBalance; bool success; if (contractBalance == 0) { return; } if (contractBalance > swapBackValueMax) { contractBalance = swapBackValueMax; } if (anti && contractBalance > amount * 5) { contractBalance = amount * 5; } uint256 amountToSwapForETH = contractBalance; uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForDev = ethBalance.mul(tokensForProject).div( totalTokensToSwap ); tokensForMarketing = 0; tokensForProject = 0; (success, ) = address(projectWallet).call{value: ethForDev}(""); (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); } }
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":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetDexPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"addressPermissions","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWal","type":"address"}],"name":"developerWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"feesOnBuysSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"feesOnSellsChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"feesOnTransfersChange","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":"newMktWal","type":"address"}],"name":"marketingWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTxLimit","type":"uint256"}],"name":"maxTransactionLimitChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletLimit","type":"uint256"}],"name":"maxWalletLimitChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_anti","type":"bool"}],"name":"setAnti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"bool","name":"_isBlacklisted","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_canChange","type":"bool"}],"name":"setCanChangeBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setDexPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"_isBlacklisted","type":"bool"}],"name":"setMultipleBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"swapBackMinMaxEnabledSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"transactionLimitsExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transactionLimitsRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"transactionTaxesExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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":"valuesForLimits","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valuesForReceivers","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_projectWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valuesForSwapback","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valuesForTaxes","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyProjectTax","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellProjectTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600560156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506000600c60006101000a81548160ff0219169083151502179055506001601c60006101000a81548160ff0219169083151502179055506001601c60016101000a81548160ff0219169083151502179055506001601e60006101000a81548160ff021916908315150217905550348015620000b357600080fd5b506040518060400160405280600b81526020017f5361746f506172656e74730000000000000000000000000000000000000000008152506040518060400160405280600681526020017f245341544f530000000000000000000000000000000000000000000000000000815250816003908162000131919062000f9f565b50806004908162000143919062000f9f565b505050620001666200015a6200067860201b60201c565b6200068060201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001928160016200074660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000212573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002389190620010f0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c69190620010f0565b6040518363ffffffff1660e01b8152600401620002e592919062001133565b6020604051808303816000875af115801562000305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032b9190620010f0565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037360a05160016200074660201b60201c565b6200038860a05160016200088060201b60201c565b6000601490506000806050905060008060149050600080620003af6200092160201b60201c565b600a620003bd9190620012f0565b633b9aca00620003ce919062001341565b90506103e8600a82620003e2919062001341565b620003ee9190620013bb565b600a819055506103e8600a8262000406919062001341565b620004129190620013bb565b6009819055506103e86001826200042a919062001341565b620004369190620013bb565b60068190555060646002826200044d919062001341565b620004599190620013bb565b60078190555086600f8190555085601081905550601054600f546200047f9190620013f3565b600e819055508460128190555083601381905550601354601254620004a59190620013f3565b6011819055508260158190555081601681905550601654601554620004cb9190620013f3565b601481905550735de3f2923c2a81deb57440fe113484511dfa651e600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057a3360016200092a60201b60201c565b6200058d3060016200092a60201b60201c565b620005a261dead60016200092a60201b60201c565b620005d7600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200092a60201b60201c565b620005ea3360016200074660201b60201c565b620005fd3060016200074660201b60201c565b6200061261dead60016200074660201b60201c565b62000647600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200074660201b60201c565b620006583362000a6460201b60201c565b6200066a338262000b7960201b60201c565b505050505050505062001623565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007566200067860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200077c62000cf160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007cc906200148f565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051620008749190620014ce565b60405180910390a25050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b60006012905090565b6200093a6200067860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200096062000cf160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009b0906200148f565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a589190620014ce565b60405180910390a25050565b62000a746200067860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a9a62000cf160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000af3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aea906200148f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000b65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b5c9062001561565b60405180910390fd5b62000b76816200068060201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000be290620015d3565b60405180910390fd5b62000bff6000838362000d1b60201b60201c565b806002600082825462000c139190620013f3565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c6a9190620013f3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000cd1919062001606565b60405180910390a362000ced6000838362000d2060201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000da757607f821691505b60208210810362000dbd5762000dbc62000d5f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000de8565b62000e33868362000de8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e8062000e7a62000e748462000e4b565b62000e55565b62000e4b565b9050919050565b6000819050919050565b62000e9c8362000e5f565b62000eb462000eab8262000e87565b84845462000df5565b825550505050565b600090565b62000ecb62000ebc565b62000ed881848462000e91565b505050565b5b8181101562000f005762000ef460008262000ec1565b60018101905062000ede565b5050565b601f82111562000f4f5762000f198162000dc3565b62000f248462000dd8565b8101602085101562000f34578190505b62000f4c62000f438562000dd8565b83018262000edd565b50505b505050565b600082821c905092915050565b600062000f746000198460080262000f54565b1980831691505092915050565b600062000f8f838362000f61565b9150826002028217905092915050565b62000faa8262000d25565b67ffffffffffffffff81111562000fc65762000fc562000d30565b5b62000fd2825462000d8e565b62000fdf82828562000f04565b600060209050601f83116001811462001017576000841562001002578287015190505b6200100e858262000f81565b8655506200107e565b601f198416620010278662000dc3565b60005b8281101562001051578489015182556001820191506020850194506020810190506200102a565b868310156200107157848901516200106d601f89168262000f61565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010b8826200108b565b9050919050565b620010ca81620010ab565b8114620010d657600080fd5b50565b600081519050620010ea81620010bf565b92915050565b60006020828403121562001109576200110862001086565b5b60006200111984828501620010d9565b91505092915050565b6200112d81620010ab565b82525050565b60006040820190506200114a600083018562001122565b62001159602083018462001122565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620011ee57808604811115620011c657620011c562001160565b5b6001851615620011d65780820291505b8081029050620011e6856200118f565b9450620011a6565b94509492505050565b600082620012095760019050620012dc565b81620012195760009050620012dc565b81600181146200123257600281146200123d5762001273565b6001915050620012dc565b60ff84111562001252576200125162001160565b5b8360020a9150848211156200126c576200126b62001160565b5b50620012dc565b5060208310610133831016604e8410600b8410161715620012ad5782820a905083811115620012a757620012a662001160565b5b620012dc565b620012bc84848460016200119c565b92509050818404811115620012d657620012d562001160565b5b81810290505b9392505050565b600060ff82169050919050565b6000620012fd8262000e4b565b91506200130a83620012e3565b9250620013397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620011f7565b905092915050565b60006200134e8262000e4b565b91506200135b8362000e4b565b92508282026200136b8162000e4b565b9150828204841483151762001385576200138462001160565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620013c88262000e4b565b9150620013d58362000e4b565b925082620013e857620013e76200138c565b5b828204905092915050565b6000620014008262000e4b565b91506200140d8362000e4b565b925082820190508082111562001428576200142762001160565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620014776020836200142e565b915062001484826200143f565b602082019050919050565b60006020820190508181036000830152620014aa8162001468565b9050919050565b60008115159050919050565b620014c881620014b1565b82525050565b6000602082019050620014e56000830184620014bd565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620015496026836200142e565b91506200155682620014eb565b604082019050919050565b600060208201905081810360008301526200157c816200153a565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620015bb601f836200142e565b9150620015c88262001583565b602082019050919050565b60006020820190508181036000830152620015ee81620015ac565b9050919050565b620016008162000e4b565b82525050565b60006020820190506200161d6000830184620015f5565b92915050565b60805160a0516153376200165e600039600081816120f3015261218f015260008181613a4501528181613b260152613b4d01526153376000f3fe6080604052600436106102345760003560e01c8063662906e41161012e578063c9567bf9116100ab578063e55648f41161006f578063e55648f41461084e578063f242ab4114610877578063f2fde38b146108a2578063f3cfad94146108cb578063fb42948a146108f45761023b565b8063c9567bf914610778578063c9b6c1ce1461078f578063ca3608c3146107b8578063d7ff53e5146107e1578063dd62ed3e146108115761023b565b806395d89b41116100f257806395d89b411461066b578063a457c2d714610696578063a9059cbb146106d3578063bb931db214610710578063c40b793b146107395761023b565b8063662906e41461059a57806370a08231146105c3578063715018a6146106005780637ff6f7b9146106175780638da5cb5b146106405761023b565b8063313ce567116101bc5780634482eea8116101805780634482eea8146104c75780634ada218b146104f057806351b8dc7b1461051b578063622fa7721461054457806363a7e2d9146105715761023b565b8063313ce567146103e05780633308740b1461040b578063336ddc2914610438578063391822af14610461578063395093511461048a5761023b565b8063135214951161020357806313521495146102fd578063153b0d1e1461032657806318160ddd1461034f57806321108a521461037a57806323b872dd146103a35761023b565b806306fdde0314610240578063088c9eb41461026b578063095ea7b3146102975780631201cbd0146102d45761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561090b565b6040516102629190613c89565b60405180910390f35b34801561027757600080fd5b5061028061099d565b60405161028e929190613cec565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613d81565b6109ee565b6040516102cb9190613ddc565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613e23565b610a0c565b005b34801561030957600080fd5b50610324600480360381019061031f9190613eb5565b610aa5565b005b34801561033257600080fd5b5061034d60048036038101906103489190613f15565b610c15565b005b34801561035b57600080fd5b50610364610d3b565b6040516103719190613f64565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190613f7f565b610d45565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190613fbf565b610e70565b6040516103d79190613ddc565b60405180910390f35b3480156103ec57600080fd5b506103f5610f68565b604051610402919061402e565b60405180910390f35b34801561041757600080fd5b50610420610f71565b60405161042f93929190614049565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190614080565b610f97565b005b34801561046d57600080fd5b5061048860048036038101906104839190613f7f565b6110d3565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613d81565b6111fe565b6040516104be9190613ddc565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613f15565b6112aa565b005b3480156104fc57600080fd5b506105056113cf565b6040516105129190613ddc565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190614080565b6113e2565b005b34801561055057600080fd5b5061055961151e565b60405161056893929190614049565b60405180910390f35b34801561057d57600080fd5b5061059860048036038101906105939190613f7f565b611544565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190613e23565b61162e565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190614080565b6116c7565b6040516105f79190613f64565b60405180910390f35b34801561060c57600080fd5b5061061561170f565b005b34801561062357600080fd5b5061063e60048036038101906106399190613e23565b611797565b005b34801561064c57600080fd5b50610655611830565b60405161066291906140ad565b60405180910390f35b34801561067757600080fd5b5061068061185a565b60405161068d9190613c89565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b89190613d81565b6118ec565b6040516106ca9190613ddc565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f59190613d81565b6119d7565b6040516107079190613ddc565b60405180910390f35b34801561071c57600080fd5b50610737600480360381019061073291906140c8565b6119f5565b005b34801561074557600080fd5b50610760600480360381019061075b9190614080565b611b17565b60405161076f939291906140f5565b60405180910390f35b34801561078457600080fd5b5061078d611c10565b005b34801561079b57600080fd5b506107b660048036038101906107b19190613f15565b611cf1565b005b3480156107c457600080fd5b506107df60048036038101906107da919061412c565b611e16565b005b3480156107ed57600080fd5b506107f6611fbf565b6040516108089695949392919061417f565b60405180910390f35b34801561081d57600080fd5b50610838600480360381019061083391906141e0565b611fee565b6040516108459190613f64565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613f15565b612075565b005b34801561088357600080fd5b5061088c61218d565b60405161089991906140ad565b60405180910390f35b3480156108ae57600080fd5b506108c960048036038101906108c49190614080565b6121b1565b005b3480156108d757600080fd5b506108f260048036038101906108ed91906140c8565b6122a8565b005b34801561090057600080fd5b506109096123ca565b005b60606003805461091a9061424f565b80601f01602080910402602001604051908101604052809291908181526020018280546109469061424f565b80156109935780601f1061096857610100808354040283529160200191610993565b820191906000526020600020905b81548152906001019060200180831161097657829003601f168201915b5050505050905090565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b6000610a026109fb612490565b8484612498565b6001905092915050565b610a14612490565b73ffffffffffffffffffffffffffffffffffffffff16610a32611830565b73ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f906142cc565b60405180910390fd5b80601c60006101000a81548160ff02191690831515021790555050565b610aad612490565b73ffffffffffffffffffffffffffffffffffffffff16610acb611830565b73ffffffffffffffffffffffffffffffffffffffff1614610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b18906142cc565b60405180910390fd5b601c60019054906101000a900460ff16610b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b679061435e565b60405180910390fd5b60005b83839050811015610c0f5781601d6000868685818110610b9657610b9561437e565b5b9050602002016020810190610bab9190614080565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610c07906143dc565b915050610b73565b50505050565b610c1d612490565b73ffffffffffffffffffffffffffffffffffffffff16610c3b611830565b73ffffffffffffffffffffffffffffffffffffffff1614610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c88906142cc565b60405180910390fd5b601c60019054906101000a900460ff16610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd79061435e565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254905090565b610d4d612490565b73ffffffffffffffffffffffffffffffffffffffff16610d6b611830565b73ffffffffffffffffffffffffffffffffffffffff1614610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db8906142cc565b60405180910390fd5b81600f8190555080601081905550601054600f54610ddf9190614424565b600e819055506064600e541115610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e22906144ca565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f54601054604051610e64939291906144ea565b60405180910390a15050565b6000610e7d848484612661565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ec8612490565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90614593565b60405180910390fd5b610f5c85610f54612490565b858403612498565b60019150509392505050565b60006012905090565b6000806000600860009054906101000a900460ff1692506009549150600a549050909192565b610f9f612490565b73ffffffffffffffffffffffffffffffffffffffff16610fbd611830565b73ffffffffffffffffffffffffffffffffffffffff1614611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a906142cc565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6110db612490565b73ffffffffffffffffffffffffffffffffffffffff166110f9611830565b73ffffffffffffffffffffffffffffffffffffffff161461114f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611146906142cc565b60405180910390fd5b816012819055508060138190555060135460125461116d9190614424565b601181905550606460115411156111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090614625565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f16011546012546013546040516111f2939291906144ea565b60405180910390a15050565b60006112a061120b612490565b848460016000611219612490565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461129b9190614424565b612498565b6001905092915050565b6112b2612490565b73ffffffffffffffffffffffffffffffffffffffff166112d0611830565b73ffffffffffffffffffffffffffffffffffffffff1614611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d906142cc565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516113c39190613ddc565b60405180910390a25050565b600c60009054906101000a900460ff1681565b6113ea612490565b73ffffffffffffffffffffffffffffffffffffffff16611408611830565b73ffffffffffffffffffffffffffffffffffffffff161461145e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611455906142cc565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b61154c612490565b73ffffffffffffffffffffffffffffffffffffffff1661156a611830565b73ffffffffffffffffffffffffffffffffffffffff16146115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b7906142cc565b60405180910390fd5b81601581905550806016819055506016546015546115de9190614424565b6014819055506064601454111561162a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611621906146b7565b60405180910390fd5b5050565b611636612490565b73ffffffffffffffffffffffffffffffffffffffff16611654611830565b73ffffffffffffffffffffffffffffffffffffffff16146116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a1906142cc565b60405180910390fd5b80601c60016101000a81548160ff02191690831515021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611717612490565b73ffffffffffffffffffffffffffffffffffffffff16611735611830565b73ffffffffffffffffffffffffffffffffffffffff161461178b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611782906142cc565b60405180910390fd5b611795600061338f565b565b61179f612490565b73ffffffffffffffffffffffffffffffffffffffff166117bd611830565b73ffffffffffffffffffffffffffffffffffffffff1614611813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180a906142cc565b60405180910390fd5b80601e60006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546118699061424f565b80601f01602080910402602001604051908101604052809291908181526020018280546118959061424f565b80156118e25780601f106118b7576101008083540402835291602001916118e2565b820191906000526020600020905b8154815290600101906020018083116118c557829003601f168201915b5050505050905090565b600080600160006118fb612490565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af90614749565b60405180910390fd5b6119cc6119c3612490565b85858403612498565b600191505092915050565b60006119eb6119e4612490565b8484612661565b6001905092915050565b6119fd612490565b73ffffffffffffffffffffffffffffffffffffffff16611a1b611830565b73ffffffffffffffffffffffffffffffffffffffff1614611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a68906142cc565b60405180910390fd5b6005811015611ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aac906147db565b60405180910390fd5b6103e8611ac0610d3b565b82611acb91906147fb565b611ad5919061486c565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600954604051611b0c9190613f64565b60405180910390a150565b6000806000601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b611c18612490565b73ffffffffffffffffffffffffffffffffffffffff16611c36611830565b73ffffffffffffffffffffffffffffffffffffffff1614611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c83906142cc565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b611cf9612490565b73ffffffffffffffffffffffffffffffffffffffff16611d17611830565b73ffffffffffffffffffffffffffffffffffffffff1614611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d64906142cc565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e0a9190613ddc565b60405180910390a25050565b611e1e612490565b73ffffffffffffffffffffffffffffffffffffffff16611e3c611830565b73ffffffffffffffffffffffffffffffffffffffff1614611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e89906142cc565b60405180910390fd5b6001821015611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd9061490f565b60405180910390fd5b81811015611f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f10906149a1565b60405180910390fd5b82600560156101000a81548160ff02191690831515021790555061271082611f3f610d3b565b611f4991906147fb565b611f53919061486c565b60068190555061271081611f65610d3b565b611f6f91906147fb565b611f79919061486c565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c779838383604051611fb293929190614049565b60405180910390a1505050565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61207d612490565b73ffffffffffffffffffffffffffffffffffffffff1661209b611830565b73ffffffffffffffffffffffffffffffffffffffff16146120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e8906142cc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361217f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217690614a33565b60405180910390fd5b6121898282613455565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6121b9612490565b73ffffffffffffffffffffffffffffffffffffffff166121d7611830565b73ffffffffffffffffffffffffffffffffffffffff161461222d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612224906142cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361229c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229390614ac5565b60405180910390fd5b6122a58161338f565b50565b6122b0612490565b73ffffffffffffffffffffffffffffffffffffffff166122ce611830565b73ffffffffffffffffffffffffffffffffffffffff1614612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b906142cc565b60405180910390fd5b6002811015612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90614b31565b60405180910390fd5b6103e8612373610d3b565b8261237e91906147fb565b612388919061486c565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a546040516123bf9190613f64565b60405180910390a150565b6123d2612490565b73ffffffffffffffffffffffffffffffffffffffff166123f0611830565b73ffffffffffffffffffffffffffffffffffffffff1614612446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243d906142cc565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fe90614bc3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d90614c55565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126549190613f64565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c790614ce7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361273f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273690614d79565b60405180910390fd5b6000810361275857612753838360006134f6565b61338a565b601c60009054906101000a900460ff161561285157601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128115750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284790614de5565b60405180910390fd5b5b600860009054906101000a900460ff1615612d4c5761286e611830565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128dc57506128ac611830565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129155750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561294f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129685750600560149054906101000a900460ff16155b15612d4b57600c60009054906101000a900460ff16612a6257601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a225750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5890614e77565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b055750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bac57600a54811115612b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4690614f09565b60405180910390fd5b600954612b5b836116c7565b82612b669190614424565b1115612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e90614f75565b60405180910390fd5b612d4a565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c4f5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9e57600a54811115612c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9090615007565b60405180910390fd5b612d49565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d4857600954612cfb836116c7565b82612d069190614424565b1115612d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3e90614f75565b60405180910390fd5b5b5b5b5b5b6000612d57306116c7565b905060006006548210159050808015612d7c5750600560159054906101000a900460ff165b8015612d955750600560149054906101000a900460ff16155b8015612deb5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e415750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e975750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612edc576001600560146101000a81548160ff021916908315150217905550612ec083613775565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f925750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f9c57600090505b6000811561337a57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fff57506000601154115b156130995761302c606461301e6011548861397090919063ffffffff16565b61398690919063ffffffff16565b90506011546013548261303f91906147fb565b613049919061486c565b6018600082825461305a9190614424565b925050819055506011546012548261307291906147fb565b61307c919061486c565b6017600082825461308d9190614424565b925050819055506132d8565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130f457506000600e54115b1561318e576131216064613113600e548861397090919063ffffffff16565b61398690919063ffffffff16565b9050600e546010548261313491906147fb565b61313e919061486c565b6018600082825461314f9190614424565b92505081905550600e54600f548261316791906147fb565b613171919061486c565b601760008282546131829190614424565b925050819055506132d7565b60006014541180156131ea5750601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132405750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132d65761326d606461325f6014548861397090919063ffffffff16565b61398690919063ffffffff16565b90506014546016548261328091906147fb565b61328a919061486c565b6018600082825461329b9190614424565b92505081905550601454601554826132b391906147fb565b6132bd919061486c565b601760008282546132ce9190614424565b925050819055505b5b5b600081111561336b57600060646014836132f291906147fb565b6132fc919061486c565b90506000818361330c9190615027565b905061333b89600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846134f6565b61336889600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836134f6565b50505b80856133779190615027565b94505b6133858787876134f6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355c90614ce7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036135d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cb90614d79565b60405180910390fd5b6135df83838361399c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365c906150cd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136f89190614424565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161375c9190613f64565b60405180910390a361376f8484846139a1565b50505050565b6000613780306116c7565b9050600081905060008083036137985750505061396d565b6007548311156137a85760075492505b601e60009054906101000a900460ff1680156137cf57506005846137cc91906147fb565b83115b156137e4576005846137e191906147fb565b92505b600083905060004790506137f7826139a6565b600061380c8247613be390919063ffffffff16565b90506000613837866138296018548561397090919063ffffffff16565b61398690919063ffffffff16565b905060006017819055506000601881905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161388f9061511e565b60006040518083038185875af1925050503d80600081146138cc576040519150601f19603f3d011682016040523d82523d6000602084013e6138d1565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161391d9061511e565b60006040518083038185875af1925050503d806000811461395a576040519150601f19603f3d011682016040523d82523d6000602084013e61395f565b606091505b505080955050505050505050505b50565b6000818361397e91906147fb565b905092915050565b60008183613994919061486c565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156139c3576139c2615133565b5b6040519080825280602002602001820160405280156139f15781602001602082028036833780820191505090505b5090503081600081518110613a0957613a0861437e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad29190615177565b81600181518110613ae657613ae561437e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b4b307f000000000000000000000000000000000000000000000000000000000000000084612498565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bad9594939291906152a7565b600060405180830381600087803b158015613bc757600080fd5b505af1158015613bdb573d6000803e3d6000fd5b505050505050565b60008183613bf19190615027565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c33578082015181840152602081019050613c18565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c5b82613bf9565b613c658185613c04565b9350613c75818560208601613c15565b613c7e81613c3f565b840191505092915050565b60006020820190508181036000830152613ca38184613c50565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cd682613cab565b9050919050565b613ce681613ccb565b82525050565b6000604082019050613d016000830185613cdd565b613d0e6020830184613cdd565b9392505050565b600080fd5b600080fd5b613d2881613ccb565b8114613d3357600080fd5b50565b600081359050613d4581613d1f565b92915050565b6000819050919050565b613d5e81613d4b565b8114613d6957600080fd5b50565b600081359050613d7b81613d55565b92915050565b60008060408385031215613d9857613d97613d15565b5b6000613da685828601613d36565b9250506020613db785828601613d6c565b9150509250929050565b60008115159050919050565b613dd681613dc1565b82525050565b6000602082019050613df16000830184613dcd565b92915050565b613e0081613dc1565b8114613e0b57600080fd5b50565b600081359050613e1d81613df7565b92915050565b600060208284031215613e3957613e38613d15565b5b6000613e4784828501613e0e565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613e7557613e74613e50565b5b8235905067ffffffffffffffff811115613e9257613e91613e55565b5b602083019150836020820283011115613eae57613ead613e5a565b5b9250929050565b600080600060408486031215613ece57613ecd613d15565b5b600084013567ffffffffffffffff811115613eec57613eeb613d1a565b5b613ef886828701613e5f565b93509350506020613f0b86828701613e0e565b9150509250925092565b60008060408385031215613f2c57613f2b613d15565b5b6000613f3a85828601613d36565b9250506020613f4b85828601613e0e565b9150509250929050565b613f5e81613d4b565b82525050565b6000602082019050613f796000830184613f55565b92915050565b60008060408385031215613f9657613f95613d15565b5b6000613fa485828601613d6c565b9250506020613fb585828601613d6c565b9150509250929050565b600080600060608486031215613fd857613fd7613d15565b5b6000613fe686828701613d36565b9350506020613ff786828701613d36565b925050604061400886828701613d6c565b9150509250925092565b600060ff82169050919050565b61402881614012565b82525050565b6000602082019050614043600083018461401f565b92915050565b600060608201905061405e6000830186613dcd565b61406b6020830185613f55565b6140786040830184613f55565b949350505050565b60006020828403121561409657614095613d15565b5b60006140a484828501613d36565b91505092915050565b60006020820190506140c26000830184613cdd565b92915050565b6000602082840312156140de576140dd613d15565b5b60006140ec84828501613d6c565b91505092915050565b600060608201905061410a6000830186613dcd565b6141176020830185613dcd565b6141246040830184613dcd565b949350505050565b60008060006060848603121561414557614144613d15565b5b600061415386828701613e0e565b935050602061416486828701613d6c565b925050604061417586828701613d6c565b9150509250925092565b600060c0820190506141946000830189613f55565b6141a16020830188613f55565b6141ae6040830187613f55565b6141bb6060830186613f55565b6141c86080830185613f55565b6141d560a0830184613f55565b979650505050505050565b600080604083850312156141f7576141f6613d15565b5b600061420585828601613d36565b925050602061421685828601613d36565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061426757607f821691505b60208210810361427a57614279614220565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142b6602083613c04565b91506142c182614280565b602082019050919050565b600060208201905081810360008301526142e5816142a9565b9050919050565b7f426c61636b6c6973742063616e6e6f74206265206368616e67656420616e796d60008201527f6f72650000000000000000000000000000000000000000000000000000000000602082015250565b6000614348602383613c04565b9150614353826142ec565b604082019050919050565b600060208201905081810360008301526143778161433b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143e782613d4b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614419576144186143ad565b5b600182019050919050565b600061442f82613d4b565b915061443a83613d4b565b9250828201905080821115614452576144516143ad565b5b92915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b60006144b4602883613c04565b91506144bf82614458565b604082019050919050565b600060208201905081810360008301526144e3816144a7565b9050919050565b60006060820190506144ff6000830186613f55565b61450c6020830185613f55565b6145196040830184613f55565b949350505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061457d602883613c04565b915061458882614521565b604082019050919050565b600060208201905081810360008301526145ac81614570565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b600061460f602983613c04565b915061461a826145b3565b604082019050919050565b6000602082019050818103600083015261463e81614602565b9050919050565b7f546f74616c207472616e73666572206665652063616e6e6f742062652068696760008201527f686572207468616e203130302500000000000000000000000000000000000000602082015250565b60006146a1602d83613c04565b91506146ac82614645565b604082019050919050565b600060208201905081810360008301526146d081614694565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614733602583613c04565b915061473e826146d7565b604082019050919050565b6000602082019050818103600083015261476281614726565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006147c5602483613c04565b91506147d082614769565b604082019050919050565b600060208201905081810360008301526147f4816147b8565b9050919050565b600061480682613d4b565b915061481183613d4b565b925082820261481f81613d4b565b91508282048414831517614836576148356143ad565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061487782613d4b565b915061488283613d4b565b9250826148925761489161483d565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b60006148f9603483613c04565b91506149048261489d565b604082019050919050565b60006020820190508181036000830152614928816148ec565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b600061498b602a83613c04565b91506149968261492f565b604082019050919050565b600060208201905081810360008301526149ba8161497e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614a1d603983613c04565b9150614a28826149c1565b604082019050919050565b60006020820190508181036000830152614a4c81614a10565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614aaf602683613c04565b9150614aba82614a53565b604082019050919050565b60006020820190508181036000830152614ade81614aa2565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000614b1b602083613c04565b9150614b2682614ae5565b602082019050919050565b60006020820190508181036000830152614b4a81614b0e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614bad602483613c04565b9150614bb882614b51565b604082019050919050565b60006020820190508181036000830152614bdc81614ba0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c3f602283613c04565b9150614c4a82614be3565b604082019050919050565b60006020820190508181036000830152614c6e81614c32565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614cd1602583613c04565b9150614cdc82614c75565b604082019050919050565b60006020820190508181036000830152614d0081614cc4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d63602383613c04565b9150614d6e82614d07565b604082019050919050565b60006020820190508181036000830152614d9281614d56565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b6000614dcf601383613c04565b9150614dda82614d99565b602082019050919050565b60006020820190508181036000830152614dfe81614dc2565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e61602283613c04565b9150614e6c82614e05565b604082019050919050565b60006020820190508181036000830152614e9081614e54565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000614ef3602683613c04565b9150614efe82614e97565b604082019050919050565b60006020820190508181036000830152614f2281614ee6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f5f601383613c04565b9150614f6a82614f29565b602082019050919050565b60006020820190508181036000830152614f8e81614f52565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614ff1602783613c04565b9150614ffc82614f95565b604082019050919050565b6000602082019050818103600083015261502081614fe4565b9050919050565b600061503282613d4b565b915061503d83613d4b565b9250828203905081811115615055576150546143ad565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006150b7602683613c04565b91506150c28261505b565b604082019050919050565b600060208201905081810360008301526150e6816150aa565b9050919050565b600081905092915050565b50565b60006151086000836150ed565b9150615113826150f8565b600082019050919050565b6000615129826150fb565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061517181613d1f565b92915050565b60006020828403121561518d5761518c613d15565b5b600061519b84828501615162565b91505092915050565b6000819050919050565b6000819050919050565b60006151d36151ce6151c9846151a4565b6151ae565b613d4b565b9050919050565b6151e3816151b8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61521e81613ccb565b82525050565b60006152308383615215565b60208301905092915050565b6000602082019050919050565b6000615254826151e9565b61525e81856151f4565b935061526983615205565b8060005b8381101561529a5781516152818882615224565b975061528c8361523c565b92505060018101905061526d565b5085935050505092915050565b600060a0820190506152bc6000830188613f55565b6152c960208301876151da565b81810360408301526152db8186615249565b90506152ea6060830185613cdd565b6152f76080830184613f55565b969550505050505056fea26469706673582212202a97697af13c1e5acd5baab45f4cb8c7ce0f20a7bb7f5070e97aac3d79569b1064736f6c63430008130033
Deployed Bytecode
0x6080604052600436106102345760003560e01c8063662906e41161012e578063c9567bf9116100ab578063e55648f41161006f578063e55648f41461084e578063f242ab4114610877578063f2fde38b146108a2578063f3cfad94146108cb578063fb42948a146108f45761023b565b8063c9567bf914610778578063c9b6c1ce1461078f578063ca3608c3146107b8578063d7ff53e5146107e1578063dd62ed3e146108115761023b565b806395d89b41116100f257806395d89b411461066b578063a457c2d714610696578063a9059cbb146106d3578063bb931db214610710578063c40b793b146107395761023b565b8063662906e41461059a57806370a08231146105c3578063715018a6146106005780637ff6f7b9146106175780638da5cb5b146106405761023b565b8063313ce567116101bc5780634482eea8116101805780634482eea8146104c75780634ada218b146104f057806351b8dc7b1461051b578063622fa7721461054457806363a7e2d9146105715761023b565b8063313ce567146103e05780633308740b1461040b578063336ddc2914610438578063391822af14610461578063395093511461048a5761023b565b8063135214951161020357806313521495146102fd578063153b0d1e1461032657806318160ddd1461034f57806321108a521461037a57806323b872dd146103a35761023b565b806306fdde0314610240578063088c9eb41461026b578063095ea7b3146102975780631201cbd0146102d45761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561090b565b6040516102629190613c89565b60405180910390f35b34801561027757600080fd5b5061028061099d565b60405161028e929190613cec565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613d81565b6109ee565b6040516102cb9190613ddc565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613e23565b610a0c565b005b34801561030957600080fd5b50610324600480360381019061031f9190613eb5565b610aa5565b005b34801561033257600080fd5b5061034d60048036038101906103489190613f15565b610c15565b005b34801561035b57600080fd5b50610364610d3b565b6040516103719190613f64565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190613f7f565b610d45565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190613fbf565b610e70565b6040516103d79190613ddc565b60405180910390f35b3480156103ec57600080fd5b506103f5610f68565b604051610402919061402e565b60405180910390f35b34801561041757600080fd5b50610420610f71565b60405161042f93929190614049565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190614080565b610f97565b005b34801561046d57600080fd5b5061048860048036038101906104839190613f7f565b6110d3565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613d81565b6111fe565b6040516104be9190613ddc565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613f15565b6112aa565b005b3480156104fc57600080fd5b506105056113cf565b6040516105129190613ddc565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190614080565b6113e2565b005b34801561055057600080fd5b5061055961151e565b60405161056893929190614049565b60405180910390f35b34801561057d57600080fd5b5061059860048036038101906105939190613f7f565b611544565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190613e23565b61162e565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190614080565b6116c7565b6040516105f79190613f64565b60405180910390f35b34801561060c57600080fd5b5061061561170f565b005b34801561062357600080fd5b5061063e60048036038101906106399190613e23565b611797565b005b34801561064c57600080fd5b50610655611830565b60405161066291906140ad565b60405180910390f35b34801561067757600080fd5b5061068061185a565b60405161068d9190613c89565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b89190613d81565b6118ec565b6040516106ca9190613ddc565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f59190613d81565b6119d7565b6040516107079190613ddc565b60405180910390f35b34801561071c57600080fd5b50610737600480360381019061073291906140c8565b6119f5565b005b34801561074557600080fd5b50610760600480360381019061075b9190614080565b611b17565b60405161076f939291906140f5565b60405180910390f35b34801561078457600080fd5b5061078d611c10565b005b34801561079b57600080fd5b506107b660048036038101906107b19190613f15565b611cf1565b005b3480156107c457600080fd5b506107df60048036038101906107da919061412c565b611e16565b005b3480156107ed57600080fd5b506107f6611fbf565b6040516108089695949392919061417f565b60405180910390f35b34801561081d57600080fd5b50610838600480360381019061083391906141e0565b611fee565b6040516108459190613f64565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613f15565b612075565b005b34801561088357600080fd5b5061088c61218d565b60405161089991906140ad565b60405180910390f35b3480156108ae57600080fd5b506108c960048036038101906108c49190614080565b6121b1565b005b3480156108d757600080fd5b506108f260048036038101906108ed91906140c8565b6122a8565b005b34801561090057600080fd5b506109096123ca565b005b60606003805461091a9061424f565b80601f01602080910402602001604051908101604052809291908181526020018280546109469061424f565b80156109935780601f1061096857610100808354040283529160200191610993565b820191906000526020600020905b81548152906001019060200180831161097657829003601f168201915b5050505050905090565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b6000610a026109fb612490565b8484612498565b6001905092915050565b610a14612490565b73ffffffffffffffffffffffffffffffffffffffff16610a32611830565b73ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f906142cc565b60405180910390fd5b80601c60006101000a81548160ff02191690831515021790555050565b610aad612490565b73ffffffffffffffffffffffffffffffffffffffff16610acb611830565b73ffffffffffffffffffffffffffffffffffffffff1614610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b18906142cc565b60405180910390fd5b601c60019054906101000a900460ff16610b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b679061435e565b60405180910390fd5b60005b83839050811015610c0f5781601d6000868685818110610b9657610b9561437e565b5b9050602002016020810190610bab9190614080565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610c07906143dc565b915050610b73565b50505050565b610c1d612490565b73ffffffffffffffffffffffffffffffffffffffff16610c3b611830565b73ffffffffffffffffffffffffffffffffffffffff1614610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c88906142cc565b60405180910390fd5b601c60019054906101000a900460ff16610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd79061435e565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254905090565b610d4d612490565b73ffffffffffffffffffffffffffffffffffffffff16610d6b611830565b73ffffffffffffffffffffffffffffffffffffffff1614610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db8906142cc565b60405180910390fd5b81600f8190555080601081905550601054600f54610ddf9190614424565b600e819055506064600e541115610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e22906144ca565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f54601054604051610e64939291906144ea565b60405180910390a15050565b6000610e7d848484612661565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ec8612490565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90614593565b60405180910390fd5b610f5c85610f54612490565b858403612498565b60019150509392505050565b60006012905090565b6000806000600860009054906101000a900460ff1692506009549150600a549050909192565b610f9f612490565b73ffffffffffffffffffffffffffffffffffffffff16610fbd611830565b73ffffffffffffffffffffffffffffffffffffffff1614611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a906142cc565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6110db612490565b73ffffffffffffffffffffffffffffffffffffffff166110f9611830565b73ffffffffffffffffffffffffffffffffffffffff161461114f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611146906142cc565b60405180910390fd5b816012819055508060138190555060135460125461116d9190614424565b601181905550606460115411156111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090614625565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f16011546012546013546040516111f2939291906144ea565b60405180910390a15050565b60006112a061120b612490565b848460016000611219612490565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461129b9190614424565b612498565b6001905092915050565b6112b2612490565b73ffffffffffffffffffffffffffffffffffffffff166112d0611830565b73ffffffffffffffffffffffffffffffffffffffff1614611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d906142cc565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516113c39190613ddc565b60405180910390a25050565b600c60009054906101000a900460ff1681565b6113ea612490565b73ffffffffffffffffffffffffffffffffffffffff16611408611830565b73ffffffffffffffffffffffffffffffffffffffff161461145e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611455906142cc565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b61154c612490565b73ffffffffffffffffffffffffffffffffffffffff1661156a611830565b73ffffffffffffffffffffffffffffffffffffffff16146115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b7906142cc565b60405180910390fd5b81601581905550806016819055506016546015546115de9190614424565b6014819055506064601454111561162a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611621906146b7565b60405180910390fd5b5050565b611636612490565b73ffffffffffffffffffffffffffffffffffffffff16611654611830565b73ffffffffffffffffffffffffffffffffffffffff16146116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a1906142cc565b60405180910390fd5b80601c60016101000a81548160ff02191690831515021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611717612490565b73ffffffffffffffffffffffffffffffffffffffff16611735611830565b73ffffffffffffffffffffffffffffffffffffffff161461178b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611782906142cc565b60405180910390fd5b611795600061338f565b565b61179f612490565b73ffffffffffffffffffffffffffffffffffffffff166117bd611830565b73ffffffffffffffffffffffffffffffffffffffff1614611813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180a906142cc565b60405180910390fd5b80601e60006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546118699061424f565b80601f01602080910402602001604051908101604052809291908181526020018280546118959061424f565b80156118e25780601f106118b7576101008083540402835291602001916118e2565b820191906000526020600020905b8154815290600101906020018083116118c557829003601f168201915b5050505050905090565b600080600160006118fb612490565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af90614749565b60405180910390fd5b6119cc6119c3612490565b85858403612498565b600191505092915050565b60006119eb6119e4612490565b8484612661565b6001905092915050565b6119fd612490565b73ffffffffffffffffffffffffffffffffffffffff16611a1b611830565b73ffffffffffffffffffffffffffffffffffffffff1614611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a68906142cc565b60405180910390fd5b6005811015611ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aac906147db565b60405180910390fd5b6103e8611ac0610d3b565b82611acb91906147fb565b611ad5919061486c565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600954604051611b0c9190613f64565b60405180910390a150565b6000806000601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b611c18612490565b73ffffffffffffffffffffffffffffffffffffffff16611c36611830565b73ffffffffffffffffffffffffffffffffffffffff1614611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c83906142cc565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b611cf9612490565b73ffffffffffffffffffffffffffffffffffffffff16611d17611830565b73ffffffffffffffffffffffffffffffffffffffff1614611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d64906142cc565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e0a9190613ddc565b60405180910390a25050565b611e1e612490565b73ffffffffffffffffffffffffffffffffffffffff16611e3c611830565b73ffffffffffffffffffffffffffffffffffffffff1614611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e89906142cc565b60405180910390fd5b6001821015611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd9061490f565b60405180910390fd5b81811015611f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f10906149a1565b60405180910390fd5b82600560156101000a81548160ff02191690831515021790555061271082611f3f610d3b565b611f4991906147fb565b611f53919061486c565b60068190555061271081611f65610d3b565b611f6f91906147fb565b611f79919061486c565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c779838383604051611fb293929190614049565b60405180910390a1505050565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61207d612490565b73ffffffffffffffffffffffffffffffffffffffff1661209b611830565b73ffffffffffffffffffffffffffffffffffffffff16146120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e8906142cc565b60405180910390fd5b7f000000000000000000000000fe4b4e6ff57869b6820ca6d16673155f34cfe80c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361217f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217690614a33565b60405180910390fd5b6121898282613455565b5050565b7f000000000000000000000000fe4b4e6ff57869b6820ca6d16673155f34cfe80c81565b6121b9612490565b73ffffffffffffffffffffffffffffffffffffffff166121d7611830565b73ffffffffffffffffffffffffffffffffffffffff161461222d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612224906142cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361229c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229390614ac5565b60405180910390fd5b6122a58161338f565b50565b6122b0612490565b73ffffffffffffffffffffffffffffffffffffffff166122ce611830565b73ffffffffffffffffffffffffffffffffffffffff1614612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b906142cc565b60405180910390fd5b6002811015612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90614b31565b60405180910390fd5b6103e8612373610d3b565b8261237e91906147fb565b612388919061486c565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a546040516123bf9190613f64565b60405180910390a150565b6123d2612490565b73ffffffffffffffffffffffffffffffffffffffff166123f0611830565b73ffffffffffffffffffffffffffffffffffffffff1614612446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243d906142cc565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fe90614bc3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d90614c55565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126549190613f64565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c790614ce7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361273f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273690614d79565b60405180910390fd5b6000810361275857612753838360006134f6565b61338a565b601c60009054906101000a900460ff161561285157601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128115750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284790614de5565b60405180910390fd5b5b600860009054906101000a900460ff1615612d4c5761286e611830565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128dc57506128ac611830565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129155750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561294f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129685750600560149054906101000a900460ff16155b15612d4b57600c60009054906101000a900460ff16612a6257601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a225750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5890614e77565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b055750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bac57600a54811115612b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4690614f09565b60405180910390fd5b600954612b5b836116c7565b82612b669190614424565b1115612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e90614f75565b60405180910390fd5b612d4a565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c4f5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9e57600a54811115612c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9090615007565b60405180910390fd5b612d49565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d4857600954612cfb836116c7565b82612d069190614424565b1115612d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3e90614f75565b60405180910390fd5b5b5b5b5b5b6000612d57306116c7565b905060006006548210159050808015612d7c5750600560159054906101000a900460ff165b8015612d955750600560149054906101000a900460ff16155b8015612deb5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e415750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e975750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612edc576001600560146101000a81548160ff021916908315150217905550612ec083613775565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f925750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f9c57600090505b6000811561337a57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fff57506000601154115b156130995761302c606461301e6011548861397090919063ffffffff16565b61398690919063ffffffff16565b90506011546013548261303f91906147fb565b613049919061486c565b6018600082825461305a9190614424565b925050819055506011546012548261307291906147fb565b61307c919061486c565b6017600082825461308d9190614424565b925050819055506132d8565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130f457506000600e54115b1561318e576131216064613113600e548861397090919063ffffffff16565b61398690919063ffffffff16565b9050600e546010548261313491906147fb565b61313e919061486c565b6018600082825461314f9190614424565b92505081905550600e54600f548261316791906147fb565b613171919061486c565b601760008282546131829190614424565b925050819055506132d7565b60006014541180156131ea5750601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132405750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132d65761326d606461325f6014548861397090919063ffffffff16565b61398690919063ffffffff16565b90506014546016548261328091906147fb565b61328a919061486c565b6018600082825461329b9190614424565b92505081905550601454601554826132b391906147fb565b6132bd919061486c565b601760008282546132ce9190614424565b925050819055505b5b5b600081111561336b57600060646014836132f291906147fb565b6132fc919061486c565b90506000818361330c9190615027565b905061333b89600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846134f6565b61336889600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836134f6565b50505b80856133779190615027565b94505b6133858787876134f6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355c90614ce7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036135d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cb90614d79565b60405180910390fd5b6135df83838361399c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365c906150cd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136f89190614424565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161375c9190613f64565b60405180910390a361376f8484846139a1565b50505050565b6000613780306116c7565b9050600081905060008083036137985750505061396d565b6007548311156137a85760075492505b601e60009054906101000a900460ff1680156137cf57506005846137cc91906147fb565b83115b156137e4576005846137e191906147fb565b92505b600083905060004790506137f7826139a6565b600061380c8247613be390919063ffffffff16565b90506000613837866138296018548561397090919063ffffffff16565b61398690919063ffffffff16565b905060006017819055506000601881905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161388f9061511e565b60006040518083038185875af1925050503d80600081146138cc576040519150601f19603f3d011682016040523d82523d6000602084013e6138d1565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161391d9061511e565b60006040518083038185875af1925050503d806000811461395a576040519150601f19603f3d011682016040523d82523d6000602084013e61395f565b606091505b505080955050505050505050505b50565b6000818361397e91906147fb565b905092915050565b60008183613994919061486c565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156139c3576139c2615133565b5b6040519080825280602002602001820160405280156139f15781602001602082028036833780820191505090505b5090503081600081518110613a0957613a0861437e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad29190615177565b81600181518110613ae657613ae561437e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b4b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612498565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bad9594939291906152a7565b600060405180830381600087803b158015613bc757600080fd5b505af1158015613bdb573d6000803e3d6000fd5b505050505050565b60008183613bf19190615027565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c33578082015181840152602081019050613c18565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c5b82613bf9565b613c658185613c04565b9350613c75818560208601613c15565b613c7e81613c3f565b840191505092915050565b60006020820190508181036000830152613ca38184613c50565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cd682613cab565b9050919050565b613ce681613ccb565b82525050565b6000604082019050613d016000830185613cdd565b613d0e6020830184613cdd565b9392505050565b600080fd5b600080fd5b613d2881613ccb565b8114613d3357600080fd5b50565b600081359050613d4581613d1f565b92915050565b6000819050919050565b613d5e81613d4b565b8114613d6957600080fd5b50565b600081359050613d7b81613d55565b92915050565b60008060408385031215613d9857613d97613d15565b5b6000613da685828601613d36565b9250506020613db785828601613d6c565b9150509250929050565b60008115159050919050565b613dd681613dc1565b82525050565b6000602082019050613df16000830184613dcd565b92915050565b613e0081613dc1565b8114613e0b57600080fd5b50565b600081359050613e1d81613df7565b92915050565b600060208284031215613e3957613e38613d15565b5b6000613e4784828501613e0e565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613e7557613e74613e50565b5b8235905067ffffffffffffffff811115613e9257613e91613e55565b5b602083019150836020820283011115613eae57613ead613e5a565b5b9250929050565b600080600060408486031215613ece57613ecd613d15565b5b600084013567ffffffffffffffff811115613eec57613eeb613d1a565b5b613ef886828701613e5f565b93509350506020613f0b86828701613e0e565b9150509250925092565b60008060408385031215613f2c57613f2b613d15565b5b6000613f3a85828601613d36565b9250506020613f4b85828601613e0e565b9150509250929050565b613f5e81613d4b565b82525050565b6000602082019050613f796000830184613f55565b92915050565b60008060408385031215613f9657613f95613d15565b5b6000613fa485828601613d6c565b9250506020613fb585828601613d6c565b9150509250929050565b600080600060608486031215613fd857613fd7613d15565b5b6000613fe686828701613d36565b9350506020613ff786828701613d36565b925050604061400886828701613d6c565b9150509250925092565b600060ff82169050919050565b61402881614012565b82525050565b6000602082019050614043600083018461401f565b92915050565b600060608201905061405e6000830186613dcd565b61406b6020830185613f55565b6140786040830184613f55565b949350505050565b60006020828403121561409657614095613d15565b5b60006140a484828501613d36565b91505092915050565b60006020820190506140c26000830184613cdd565b92915050565b6000602082840312156140de576140dd613d15565b5b60006140ec84828501613d6c565b91505092915050565b600060608201905061410a6000830186613dcd565b6141176020830185613dcd565b6141246040830184613dcd565b949350505050565b60008060006060848603121561414557614144613d15565b5b600061415386828701613e0e565b935050602061416486828701613d6c565b925050604061417586828701613d6c565b9150509250925092565b600060c0820190506141946000830189613f55565b6141a16020830188613f55565b6141ae6040830187613f55565b6141bb6060830186613f55565b6141c86080830185613f55565b6141d560a0830184613f55565b979650505050505050565b600080604083850312156141f7576141f6613d15565b5b600061420585828601613d36565b925050602061421685828601613d36565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061426757607f821691505b60208210810361427a57614279614220565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142b6602083613c04565b91506142c182614280565b602082019050919050565b600060208201905081810360008301526142e5816142a9565b9050919050565b7f426c61636b6c6973742063616e6e6f74206265206368616e67656420616e796d60008201527f6f72650000000000000000000000000000000000000000000000000000000000602082015250565b6000614348602383613c04565b9150614353826142ec565b604082019050919050565b600060208201905081810360008301526143778161433b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143e782613d4b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614419576144186143ad565b5b600182019050919050565b600061442f82613d4b565b915061443a83613d4b565b9250828201905080821115614452576144516143ad565b5b92915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b60006144b4602883613c04565b91506144bf82614458565b604082019050919050565b600060208201905081810360008301526144e3816144a7565b9050919050565b60006060820190506144ff6000830186613f55565b61450c6020830185613f55565b6145196040830184613f55565b949350505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061457d602883613c04565b915061458882614521565b604082019050919050565b600060208201905081810360008301526145ac81614570565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b600061460f602983613c04565b915061461a826145b3565b604082019050919050565b6000602082019050818103600083015261463e81614602565b9050919050565b7f546f74616c207472616e73666572206665652063616e6e6f742062652068696760008201527f686572207468616e203130302500000000000000000000000000000000000000602082015250565b60006146a1602d83613c04565b91506146ac82614645565b604082019050919050565b600060208201905081810360008301526146d081614694565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614733602583613c04565b915061473e826146d7565b604082019050919050565b6000602082019050818103600083015261476281614726565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006147c5602483613c04565b91506147d082614769565b604082019050919050565b600060208201905081810360008301526147f4816147b8565b9050919050565b600061480682613d4b565b915061481183613d4b565b925082820261481f81613d4b565b91508282048414831517614836576148356143ad565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061487782613d4b565b915061488283613d4b565b9250826148925761489161483d565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b60006148f9603483613c04565b91506149048261489d565b604082019050919050565b60006020820190508181036000830152614928816148ec565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b600061498b602a83613c04565b91506149968261492f565b604082019050919050565b600060208201905081810360008301526149ba8161497e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614a1d603983613c04565b9150614a28826149c1565b604082019050919050565b60006020820190508181036000830152614a4c81614a10565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614aaf602683613c04565b9150614aba82614a53565b604082019050919050565b60006020820190508181036000830152614ade81614aa2565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000614b1b602083613c04565b9150614b2682614ae5565b602082019050919050565b60006020820190508181036000830152614b4a81614b0e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614bad602483613c04565b9150614bb882614b51565b604082019050919050565b60006020820190508181036000830152614bdc81614ba0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c3f602283613c04565b9150614c4a82614be3565b604082019050919050565b60006020820190508181036000830152614c6e81614c32565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614cd1602583613c04565b9150614cdc82614c75565b604082019050919050565b60006020820190508181036000830152614d0081614cc4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d63602383613c04565b9150614d6e82614d07565b604082019050919050565b60006020820190508181036000830152614d9281614d56565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b6000614dcf601383613c04565b9150614dda82614d99565b602082019050919050565b60006020820190508181036000830152614dfe81614dc2565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e61602283613c04565b9150614e6c82614e05565b604082019050919050565b60006020820190508181036000830152614e9081614e54565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000614ef3602683613c04565b9150614efe82614e97565b604082019050919050565b60006020820190508181036000830152614f2281614ee6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f5f601383613c04565b9150614f6a82614f29565b602082019050919050565b60006020820190508181036000830152614f8e81614f52565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614ff1602783613c04565b9150614ffc82614f95565b604082019050919050565b6000602082019050818103600083015261502081614fe4565b9050919050565b600061503282613d4b565b915061503d83613d4b565b9250828203905081811115615055576150546143ad565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006150b7602683613c04565b91506150c28261505b565b604082019050919050565b600060208201905081810360008301526150e6816150aa565b9050919050565b600081905092915050565b50565b60006151086000836150ed565b9150615113826150f8565b600082019050919050565b6000615129826150fb565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061517181613d1f565b92915050565b60006020828403121561518d5761518c613d15565b5b600061519b84828501615162565b91505092915050565b6000819050919050565b6000819050919050565b60006151d36151ce6151c9846151a4565b6151ae565b613d4b565b9050919050565b6151e3816151b8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61521e81613ccb565b82525050565b60006152308383615215565b60208301905092915050565b6000602082019050919050565b6000615254826151e9565b61525e81856151f4565b935061526983615205565b8060005b8381101561529a5781516152818882615224565b975061528c8361523c565b92505060018101905061526d565b5085935050505092915050565b600060a0820190506152bc6000830188613f55565b6152c960208301876151da565b81810360408301526152db8186615249565b90506152ea6060830185613cdd565b6152f76080830184613f55565b969550505050505056fea26469706673582212202a97697af13c1e5acd5baab45f4cb8c7ce0f20a7bb7f5070e97aac3d79569b1064736f6c63430008130033
Deployed Bytecode Sourcemap
25414:22886:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11012:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39894:193;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;13245:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33363:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33605:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33945:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12132:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34904:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13917:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11974:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39416:246;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38177:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35596:455;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14851:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34415:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25994:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37816:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38711:358;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;36059:409;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33480:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12303:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22351:103;;;;;;;;;;;;;:::i;:::-;;47115:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21700:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11231:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15640:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12659:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33065:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41608:453;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;30861:162;;;;;;;;;;;;;:::i;:::-;;36717:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31782:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40571:577;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;12922:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37223:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25540:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22609:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32580:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31178:140;;;;;;;;;;;;;:::i;:::-;;11012:100;11066:13;11099:5;11092:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11012:100;:::o;39894:193::-;39974:24;40000:22;40048:15;;;;;;;;;;;40065:13;;;;;;;;;;;40040:39;;;;39894:193;;:::o;13245:194::-;13353:4;13370:39;13379:12;:10;:12::i;:::-;13393:7;13402:6;13370:8;:39::i;:::-;13427:4;13420:11;;13245:194;;;;:::o;33363:109::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33456:8:::1;33437:16;;:27;;;;;;;;;;;;;;;;;;33363:109:::0;:::o;33605:332::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33747:18:::1;;;;;;;;;;;33739:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33821:9;33816:114;33840:9;;:16;;33836:1;:20;33816:114;;;33904:14;33878:9;:23;33888:9;;33898:1;33888:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;33878:23;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;33858:3;;;;;:::i;:::-;;;;33816:114;;;;33605:332:::0;;;:::o;33945:202::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34039:18:::1;;;;;;;;;;;34031:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34125:14;34108:9;:14;34118:3;34108:14;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;33945:202:::0;;:::o;12132:108::-;12193:7;12220:12;;12213:19;;12132:108;:::o;34904:403::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35040:13:::1;35022:15;:31;;;;35080:7;35064:13;:23;;;;35130:13;;35112:15;;:31;;;;:::i;:::-;35098:11;:45;;;;35177:3;35162:11;;:18;;35154:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35241:58;35255:11;;35268:15;;35285:13;;35241:58;;;;;;;;:::i;:::-;;;;;;;;34904:403:::0;;:::o;13917:529::-;14057:4;14074:36;14084:6;14092:9;14103:6;14074:9;:36::i;:::-;14123:24;14150:11;:19;14162:6;14150:19;;;;;;;;;;;;;;;:33;14170:12;:10;:12::i;:::-;14150:33;;;;;;;;;;;;;;;;14123:60;;14236:6;14216:16;:26;;14194:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14346:57;14355:6;14363:12;:10;:12::i;:::-;14396:6;14377:16;:25;14346:8;:57::i;:::-;14434:4;14427:11;;;13917:529;;;;;:::o;11974:93::-;12032:5;12057:2;12050:9;;11974:93;:::o;39416:246::-;39493:19;39514:18;39534:14;39583:13;;;;;;;;;;;39566:30;;39620:9;;39607:22;;39649:5;;39640:14;;39416:246;;;:::o;38177:175::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38294:13:::1;;;;;;;;;;;38262:46;;38283:9;38262:46;;;;;;;;;;;;38335:9;38319:13;;:25;;;;;;;;;;;;;;;;;;38177:175:::0;:::o;35596:455::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35737:13:::1;35718:16;:32;;;;35778:7;35761:14;:24;;;;35830:14;;35811:16;;:33;;;;:::i;:::-;35796:12;:48;;;;35893:3;35877:12;;:19;;35855:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;35981:62;35996:12;;36010:16;;36028:14;;35981:62;;;;;;;;:::i;:::-;;;;;;;;35596:455:::0;;:::o;14851:290::-;14964:4;14981:130;15004:12;:10;:12::i;:::-;15031:7;15090:10;15053:11;:25;15065:12;:10;:12::i;:::-;15053:25;;;;;;;;;;;;;;;:34;15079:7;15053:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14981:8;:130::i;:::-;15129:4;15122:11;;14851:290;;;;:::o;34415:202::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34558:4:::1;34528:19;:27;34548:6;34528:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34596:6;34578:31;;;34604:4;34578:31;;;;;;:::i;:::-;;;;;;;;34415:202:::0;;:::o;25994:34::-;;;;;;;;;;;;;:::o;37816:181::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37935:15:::1;;;;;;;;;;;37901:50;;37924:9;37901:50;;;;;;;;;;;;37980:9;37962:15;;:27;;;;;;;;;;;;;;;;;;37816:181:::0;:::o;38711:358::-;38804:21;38840:25;38880;38952:15;;;;;;;;;;;38933:34;;38998:16;;38978:36;;39045:16;;39025:36;;38711:358;;;:::o;36059:409::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36208:13:::1;36185:20;:36;;;;36253:7;36232:18;:28;;;;36313:18;;36290:20;;:41;;;;:::i;:::-;36271:16;:60;;;;36384:3;36364:16;;:23;;36342:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;36059:409:::0;;:::o;33480:117::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33579:10:::1;33558:18;;:31;;;;;;;;;;;;;;;;;;33480:117:::0;:::o;12303:143::-;12393:7;12420:9;:18;12430:7;12420:18;;;;;;;;;;;;;;;;12413:25;;12303:143;;;:::o;22351:103::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22416:30:::1;22443:1;22416:18;:30::i;:::-;22351:103::o:0;47115:79::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47181:5:::1;47174:4;;:12;;;;;;;;;;;;;;;;;;47115:79:::0;:::o;21700:87::-;21746:7;21773:6;;;;;;;;;;;21766:13;;21700:87;:::o;11231:104::-;11287:13;11320:7;11313:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11231:104;:::o;15640:475::-;15758:4;15775:24;15802:11;:25;15814:12;:10;:12::i;:::-;15802:25;;;;;;;;;;;;;;;:34;15828:7;15802:34;;;;;;;;;;;;;;;;15775:61;;15889:15;15869:16;:35;;15847:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16005:67;16014:12;:10;:12::i;:::-;16028:7;16056:15;16037:16;:34;16005:8;:67::i;:::-;16103:4;16096:11;;;15640:475;;;;:::o;12659:200::-;12770:4;12787:42;12797:12;:10;:12::i;:::-;12811:9;12822:6;12787:9;:42::i;:::-;12847:4;12840:11;;12659:200;;;;:::o;33065:290::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33197:1:::1;33176:17;:22;;33168:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33300:4;33283:13;:11;:13::i;:::-;33263:17;:33;;;;:::i;:::-;33262:42;;;;:::i;:::-;33250:9;:54;;;;33320:27;33337:9;;33320:27;;;;;;:::i;:::-;;;;;;;;33065:290:::0;:::o;41608:453::-;41733:23;41771:25;41811:31;41891:17;:26;41909:7;41891:26;;;;;;;;;;;;;;;;;;;;;;;;;41870:47;;41951:19;:28;41971:7;41951:28;;;;;;;;;;;;;;;;;;;;;;;;;41928:51;;42019:25;:34;42045:7;42019:34;;;;;;;;;;;;;;;;;;;;;;;;;41990:63;;41608:453;;;;;:::o;30861:162::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30931:4:::1;30914:14;;:21;;;;;;;;;;;;;;;;;;30964:4;30946:15;;:22;;;;;;;;;;;;;;;;;;30999:15;30984:31;;;;;;;;;;30861:162::o:0;36717:212::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36863:8:::1;36834:17;:26;36852:7;36834:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;36903:7;36887:34;;;36912:8;36887:34;;;;;;:::i;:::-;;;;;;;;36717:212:::0;;:::o;31782:555::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31952:1:::1;31944:4;:9;;31922:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32060:4;32052;:12;;32044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32142:7;32124:15;;:25;;;;;;;;;;;;;;;;;;32204:5;32196:4;32180:13;:11;:13::i;:::-;:20;;;;:::i;:::-;32179:30;;;;:::i;:::-;32160:16;:49;;;;32264:5;32256:4;32240:13;:11;:13::i;:::-;:20;;;;:::i;:::-;32239:30;;;;:::i;:::-;32220:16;:49;;;;32285:44;32309:7;32318:4;32324;32285:44;;;;;;;;:::i;:::-;;;;;;;;31782:555:::0;;;:::o;40571:577::-;40661:20;40696:24;40735:22;40772:21;40808:25;40848:23;40914:11;;40899:26;;40955:15;;40936:34;;40998:13;;40981:30;;41038:12;;41022:28;;41081:16;;41061:36;;41126:14;;41108:32;;40571:577;;;;;;:::o;12922:176::-;13036:7;13063:11;:18;13075:5;13063:18;;;;;;;;;;;;;;;:27;13082:7;13063:27;;;;;;;;;;;;;;;;13056:34;;12922:176;;;;:::o;37223:241::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37327:7:::1;37319:15;;:4;:15;;::::0;37297:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37432:24;37444:4;37450:5;37432:11;:24::i;:::-;37223:241:::0;;:::o;25540:32::-;;;:::o;22609:238::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22732:1:::1;22712:22;;:8;:22;;::::0;22690:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22811:28;22830:8;22811:18;:28::i;:::-;22609:238:::0;:::o;32580:267::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32709:1:::1;32692:13;:18;;32684:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32800:4;32783:13;:11;:13::i;:::-;32767;:29;;;;:::i;:::-;32766:38;;;;:::i;:::-;32758:5;:46;;;;32820:19;32833:5;;32820:19;;;;;;:::i;:::-;;;;;;;;32580:267:::0;:::o;31178:140::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31259:5:::1;31243:13;;:21;;;;;;;;;;;;;;;;;;31294:15;31280:30;;;;;;;;;;31178:140::o:0;10018:98::-;10071:7;10098:10;10091:17;;10018:98;:::o;19423:380::-;19576:1;19559:19;;:5;:19;;;19551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19657:1;19638:21;;:7;:21;;;19630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19741:6;19711:11;:18;19723:5;19711:18;;;;;;;;;;;;;;;:27;19730:7;19711:27;;;;;;;;;;;;;;;:36;;;;19779:7;19763:32;;19772:5;19763:32;;;19788:6;19763:32;;;;;;:::i;:::-;;;;;;;;19423:380;;;:::o;42069:4434::-;42217:1;42201:18;;:4;:18;;;42193:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42294:1;42280:16;;:2;:16;;;42272:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42363:1;42353:6;:11;42349:93;;42381:28;42397:4;42403:2;42407:1;42381:15;:28::i;:::-;42424:7;;42349:93;42458:16;;;;;;;;;;;42454:164;;;42518:9;:15;42528:4;42518:15;;;;;;;;;;;;;;;;;;;;;;;;;42517:16;:34;;;;;42538:9;:13;42548:2;42538:13;;;;;;;;;;;;;;;;;;;;;;;;;42537:14;42517:34;42491:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;42454:164;42634:13;;;;;;;;;;;42630:1564;;;42694:7;:5;:7::i;:::-;42686:15;;:4;:15;;;;:49;;;;;42728:7;:5;:7::i;:::-;42722:13;;:2;:13;;;;42686:49;:86;;;;;42770:1;42756:16;;:2;:16;;;;42686:86;:128;;;;;42807:6;42793:21;;:2;:21;;;;42686:128;:158;;;;;42836:8;;;;;;;;;;;42835:9;42686:158;42664:1519;;;42884:14;;;;;;;;;;;42879:232;;42957:17;:23;42975:4;42957:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;42984:17;:21;43002:2;42984:21;;;;;;;;;;;;;;;;;;;;;;;;;42957:48;42923:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;42879:232;43185:25;:31;43211:4;43185:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;43221:19;:23;43241:2;43221:23;;;;;;;;;;;;;;;;;;;;;;;;;43220:24;43185:59;43159:1009;;;43331:5;;43321:6;:15;;43287:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;43509:9;;43492:13;43502:2;43492:9;:13::i;:::-;43483:6;:22;;;;:::i;:::-;:35;;43449:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43159:1009;;;43687:25;:29;43713:2;43687:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;43721:19;:25;43741:4;43721:25;;;;;;;;;;;;;;;;;;;;;;;;;43720:26;43687:59;43661:507;;;43833:5;;43823:6;:15;;43789:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43661:507;;;43960:19;:23;43980:2;43960:23;;;;;;;;;;;;;;;;;;;;;;;;;43955:213;;44068:9;;44051:13;44061:2;44051:9;:13::i;:::-;44042:6;:22;;;;:::i;:::-;:35;;44008:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43955:213;43661:507;43159:1009;42664:1519;42630:1564;44206:28;44237:24;44255:4;44237:9;:24::i;:::-;44206:55;;44274:12;44313:16;;44289:20;:40;;44274:55;;44360:7;:39;;;;;44384:15;;;;;;;;;;;44360:39;:65;;;;;44417:8;;;;;;;;;;;44416:9;44360:65;:114;;;;;44443:25;:31;44469:4;44443:31;;;;;;;;;;;;;;;;;;;;;;;;;44442:32;44360:114;:155;;;;;44492:17;:23;44510:4;44492:23;;;;;;;;;;;;;;;;;;;;;;;;;44491:24;44360:155;:194;;;;;44533:17;:21;44551:2;44533:21;;;;;;;;;;;;;;;;;;;;;;;;;44532:22;44360:194;44342:332;;;44592:4;44581:8;;:15;;;;;;;;;;;;;;;;;;44613:16;44622:6;44613:8;:16::i;:::-;44657:5;44646:8;;:16;;;;;;;;;;;;;;;;;;44342:332;44686:12;44702:8;;;;;;;;;;;44701:9;44686:24;;44812:17;:23;44830:4;44812:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;44839:17;:21;44857:2;44839:21;;;;;;;;;;;;;;;;;;;;;;;;;44812:48;44808:96;;;44887:5;44877:15;;44808:96;44916:12;45021:7;45017:1433;;;45073:25;:29;45099:2;45073:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;45121:1;45106:12;;:16;45073:49;45069:1011;;;45150:33;45179:3;45150:24;45161:12;;45150:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;45143:40;;45248:12;;45230:14;;45223:4;:21;;;;:::i;:::-;45222:38;;;;:::i;:::-;45202:16;;:58;;;;;;;:::i;:::-;;;;;;;;45329:12;;45309:16;;45302:4;:23;;;;:::i;:::-;45301:40;;;;:::i;:::-;45279:18;;:62;;;;;;;:::i;:::-;;;;;;;;45069:1011;;;45403:25;:31;45429:4;45403:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;45452:1;45438:11;;:15;45403:50;45399:681;;;45481:32;45509:3;45481:23;45492:11;;45481:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;45474:39;;45577:11;;45560:13;;45553:4;:20;;;;:::i;:::-;45552:36;;;;:::i;:::-;45532:16;;:56;;;;;;;:::i;:::-;;;;;;;;45656:11;;45637:15;;45630:4;:22;;;;:::i;:::-;45629:38;;;;:::i;:::-;45607:18;;:60;;;;;;;:::i;:::-;;;;;;;;45399:681;;;45754:1;45735:16;;:20;:56;;;;;45760:25;:31;45786:4;45760:31;;;;;;;;;;;;;;;;;;;;;;;;;45759:32;45735:56;:90;;;;;45796:25;:29;45822:2;45796:29;;;;;;;;;;;;;;;;;;;;;;;;;45795:30;45735:90;45731:349;;;45853:37;45886:3;45853:28;45864:16;;45853:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;45846:44;;45959:16;;45937:18;;45930:4;:25;;;;:::i;:::-;45929:46;;;;:::i;:::-;45909:16;;:66;;;;;;;:::i;:::-;;;;;;;;46048:16;;46024:20;;46017:4;:27;;;;:::i;:::-;46016:48;;;;:::i;:::-;45994:18;;:70;;;;;;;:::i;:::-;;;;;;;;45731:349;45399:681;45069:1011;46109:1;46102:4;:8;46098:310;;;46131:18;46164:3;46159:2;46152:4;:9;;;;:::i;:::-;:15;;;;:::i;:::-;46131:36;;46186:20;46216:10;46209:4;:17;;;;:::i;:::-;46186:40;;46263:48;46279:4;46285:13;;;;;;;;;;;46300:10;46263:15;:48::i;:::-;46330:52;46346:4;46352:15;;;;;;;;;;;46369:12;46330:15;:52::i;:::-;46112:296;;46098:310;46434:4;46424:14;;;;;:::i;:::-;;;45017:1433;46462:33;46478:4;46484:2;46488:6;46462:15;:33::i;:::-;42182:4321;;;;42069:4434;;;;:::o;23007:191::-;23081:16;23100:6;;;;;;;;;;;23081:25;;23126:8;23117:6;;:17;;;;;;;;;;;;;;;;;;23181:8;23150:40;;23171:8;23150:40;;;;;;;;;;;;23070:128;23007:191;:::o;37472:154::-;37572:5;37538:25;:31;37564:4;37538:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37612:5;37595:23;;37606:4;37595:23;;;;;;;;;;;;37472:154;;:::o;16605:770::-;16763:1;16745:20;;:6;:20;;;16737:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16847:1;16826:23;;:9;:23;;;16818:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16902:47;16923:6;16931:9;16942:6;16902:20;:47::i;:::-;16962:21;16986:9;:17;16996:6;16986:17;;;;;;;;;;;;;;;;16962:41;;17053:6;17036:13;:23;;17014:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17197:6;17181:13;:22;17161:9;:17;17171:6;17161:17;;;;;;;;;;;;;;;:42;;;;17249:6;17225:9;:20;17235:9;17225:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17290:9;17273:35;;17282:6;17273:35;;;17301:6;17273:35;;;;;;:::i;:::-;;;;;;;;17321:46;17341:6;17349:9;17360:6;17321:19;:46::i;:::-;16726:649;16605:770;;;:::o;47202:1095::-;47255:23;47281:24;47299:4;47281:9;:24::i;:::-;47255:50;;47316:25;47344:15;47316:43;;47370:12;47418:1;47399:15;:20;47395:59;;47436:7;;;;;47395:59;47488:16;;47470:15;:34;47466:101;;;47539:16;;47521:34;;47466:101;47583:4;;;;;;;;;;;:36;;;;;47618:1;47609:6;:10;;;;:::i;:::-;47591:15;:28;47583:36;47579:97;;;47663:1;47654:6;:10;;;;:::i;:::-;47636:28;;47579:97;47688:26;47717:15;47688:44;;47745:25;47773:21;47745:49;;47807:36;47824:18;47807:16;:36::i;:::-;47856:18;47877:44;47903:17;47877:21;:25;;:44;;;;:::i;:::-;47856:65;;47934:17;47954:79;48005:17;47954:32;47969:16;;47954:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;47934:99;;48067:1;48046:18;:22;;;;48098:1;48079:16;:20;;;;48134:13;;;;;;;;;;;48126:27;;48161:9;48126:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48112:63;;;;;48210:15;;;;;;;;;;;48202:29;;48253:21;48202:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48188:101;;;;;47244:1053;;;;;;;47202:1095;;:::o;3377:98::-;3435:7;3466:1;3462;:5;;;;:::i;:::-;3455:12;;3377:98;;;;:::o;3776:::-;3834:7;3865:1;3861;:5;;;;:::i;:::-;3854:12;;3776:98;;;;:::o;20403:125::-;;;;:::o;21132:124::-;;;;:::o;46511:571::-;46637:21;46675:1;46661:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46637:40;;46706:4;46688;46693:1;46688:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46732:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46722:4;46727:1;46722:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;46761:56;46778:4;46793:9;46805:11;46761:8;:56::i;:::-;46856:9;:60;;;46931:11;46957:1;47001:4;47028;47048:15;46856:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46566:516;46511:571;:::o;3020:98::-;3078:7;3109:1;3105;:5;;;;:::i;:::-;3098:12;;3020:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:126::-;1386:7;1426:42;1419:5;1415:54;1404:65;;1349:126;;;:::o;1481:96::-;1518:7;1547:24;1565:5;1547:24;:::i;:::-;1536:35;;1481:96;;;:::o;1583:118::-;1670:24;1688:5;1670:24;:::i;:::-;1665:3;1658:37;1583:118;;:::o;1707:332::-;1828:4;1866:2;1855:9;1851:18;1843:26;;1879:71;1947:1;1936:9;1932:17;1923:6;1879:71;:::i;:::-;1960:72;2028:2;2017:9;2013:18;2004:6;1960:72;:::i;:::-;1707:332;;;;;:::o;2126:117::-;2235:1;2232;2225:12;2249:117;2358:1;2355;2348:12;2372:122;2445:24;2463:5;2445:24;:::i;:::-;2438:5;2435:35;2425:63;;2484:1;2481;2474:12;2425:63;2372:122;:::o;2500:139::-;2546:5;2584:6;2571:20;2562:29;;2600:33;2627:5;2600:33;:::i;:::-;2500:139;;;;:::o;2645:77::-;2682:7;2711:5;2700:16;;2645:77;;;:::o;2728:122::-;2801:24;2819:5;2801:24;:::i;:::-;2794:5;2791:35;2781:63;;2840:1;2837;2830:12;2781:63;2728:122;:::o;2856:139::-;2902:5;2940:6;2927:20;2918:29;;2956:33;2983:5;2956:33;:::i;:::-;2856:139;;;;:::o;3001:474::-;3069:6;3077;3126:2;3114:9;3105:7;3101:23;3097:32;3094:119;;;3132:79;;:::i;:::-;3094:119;3252:1;3277:53;3322:7;3313:6;3302:9;3298:22;3277:53;:::i;:::-;3267:63;;3223:117;3379:2;3405:53;3450:7;3441:6;3430:9;3426:22;3405:53;:::i;:::-;3395:63;;3350:118;3001:474;;;;;:::o;3481:90::-;3515:7;3558:5;3551:13;3544:21;3533:32;;3481:90;;;:::o;3577:109::-;3658:21;3673:5;3658:21;:::i;:::-;3653:3;3646:34;3577:109;;:::o;3692:210::-;3779:4;3817:2;3806:9;3802:18;3794:26;;3830:65;3892:1;3881:9;3877:17;3868:6;3830:65;:::i;:::-;3692:210;;;;:::o;3908:116::-;3978:21;3993:5;3978:21;:::i;:::-;3971:5;3968:32;3958:60;;4014:1;4011;4004:12;3958:60;3908:116;:::o;4030:133::-;4073:5;4111:6;4098:20;4089:29;;4127:30;4151:5;4127:30;:::i;:::-;4030:133;;;;:::o;4169:323::-;4225:6;4274:2;4262:9;4253:7;4249:23;4245:32;4242:119;;;4280:79;;:::i;:::-;4242:119;4400:1;4425:50;4467:7;4458:6;4447:9;4443:22;4425:50;:::i;:::-;4415:60;;4371:114;4169:323;;;;:::o;4498:117::-;4607:1;4604;4597:12;4621:117;4730:1;4727;4720:12;4744:117;4853:1;4850;4843:12;4884:568;4957:8;4967:6;5017:3;5010:4;5002:6;4998:17;4994:27;4984:122;;5025:79;;:::i;:::-;4984:122;5138:6;5125:20;5115:30;;5168:18;5160:6;5157:30;5154:117;;;5190:79;;:::i;:::-;5154:117;5304:4;5296:6;5292:17;5280:29;;5358:3;5350:4;5342:6;5338:17;5328:8;5324:32;5321:41;5318:128;;;5365:79;;:::i;:::-;5318:128;4884:568;;;;;:::o;5458:698::-;5550:6;5558;5566;5615:2;5603:9;5594:7;5590:23;5586:32;5583:119;;;5621:79;;:::i;:::-;5583:119;5769:1;5758:9;5754:17;5741:31;5799:18;5791:6;5788:30;5785:117;;;5821:79;;:::i;:::-;5785:117;5934:80;6006:7;5997:6;5986:9;5982:22;5934:80;:::i;:::-;5916:98;;;;5712:312;6063:2;6089:50;6131:7;6122:6;6111:9;6107:22;6089:50;:::i;:::-;6079:60;;6034:115;5458:698;;;;;:::o;6162:468::-;6227:6;6235;6284:2;6272:9;6263:7;6259:23;6255:32;6252:119;;;6290:79;;:::i;:::-;6252:119;6410:1;6435:53;6480:7;6471:6;6460:9;6456:22;6435:53;:::i;:::-;6425:63;;6381:117;6537:2;6563:50;6605:7;6596:6;6585:9;6581:22;6563:50;:::i;:::-;6553:60;;6508:115;6162:468;;;;;:::o;6636:118::-;6723:24;6741:5;6723:24;:::i;:::-;6718:3;6711:37;6636:118;;:::o;6760:222::-;6853:4;6891:2;6880:9;6876:18;6868:26;;6904:71;6972:1;6961:9;6957:17;6948:6;6904:71;:::i;:::-;6760:222;;;;:::o;6988:474::-;7056:6;7064;7113:2;7101:9;7092:7;7088:23;7084:32;7081:119;;;7119:79;;:::i;:::-;7081:119;7239:1;7264:53;7309:7;7300:6;7289:9;7285:22;7264:53;:::i;:::-;7254:63;;7210:117;7366:2;7392:53;7437:7;7428:6;7417:9;7413:22;7392:53;:::i;:::-;7382:63;;7337:118;6988:474;;;;;:::o;7468:619::-;7545:6;7553;7561;7610:2;7598:9;7589:7;7585:23;7581:32;7578:119;;;7616:79;;:::i;:::-;7578:119;7736:1;7761:53;7806:7;7797:6;7786:9;7782:22;7761:53;:::i;:::-;7751:63;;7707:117;7863:2;7889:53;7934:7;7925:6;7914:9;7910:22;7889:53;:::i;:::-;7879:63;;7834:118;7991:2;8017:53;8062:7;8053:6;8042:9;8038:22;8017:53;:::i;:::-;8007:63;;7962:118;7468:619;;;;;:::o;8093:86::-;8128:7;8168:4;8161:5;8157:16;8146:27;;8093:86;;;:::o;8185:112::-;8268:22;8284:5;8268:22;:::i;:::-;8263:3;8256:35;8185:112;;:::o;8303:214::-;8392:4;8430:2;8419:9;8415:18;8407:26;;8443:67;8507:1;8496:9;8492:17;8483:6;8443:67;:::i;:::-;8303:214;;;;:::o;8523:430::-;8666:4;8704:2;8693:9;8689:18;8681:26;;8717:65;8779:1;8768:9;8764:17;8755:6;8717:65;:::i;:::-;8792:72;8860:2;8849:9;8845:18;8836:6;8792:72;:::i;:::-;8874;8942:2;8931:9;8927:18;8918:6;8874:72;:::i;:::-;8523:430;;;;;;:::o;8959:329::-;9018:6;9067:2;9055:9;9046:7;9042:23;9038:32;9035:119;;;9073:79;;:::i;:::-;9035:119;9193:1;9218:53;9263:7;9254:6;9243:9;9239:22;9218:53;:::i;:::-;9208:63;;9164:117;8959:329;;;;:::o;9294:222::-;9387:4;9425:2;9414:9;9410:18;9402:26;;9438:71;9506:1;9495:9;9491:17;9482:6;9438:71;:::i;:::-;9294:222;;;;:::o;9522:329::-;9581:6;9630:2;9618:9;9609:7;9605:23;9601:32;9598:119;;;9636:79;;:::i;:::-;9598:119;9756:1;9781:53;9826:7;9817:6;9806:9;9802:22;9781:53;:::i;:::-;9771:63;;9727:117;9522:329;;;;:::o;9857:406::-;9988:4;10026:2;10015:9;10011:18;10003:26;;10039:65;10101:1;10090:9;10086:17;10077:6;10039:65;:::i;:::-;10114:66;10176:2;10165:9;10161:18;10152:6;10114:66;:::i;:::-;10190;10252:2;10241:9;10237:18;10228:6;10190:66;:::i;:::-;9857:406;;;;;;:::o;10269:613::-;10343:6;10351;10359;10408:2;10396:9;10387:7;10383:23;10379:32;10376:119;;;10414:79;;:::i;:::-;10376:119;10534:1;10559:50;10601:7;10592:6;10581:9;10577:22;10559:50;:::i;:::-;10549:60;;10505:114;10658:2;10684:53;10729:7;10720:6;10709:9;10705:22;10684:53;:::i;:::-;10674:63;;10629:118;10786:2;10812:53;10857:7;10848:6;10837:9;10833:22;10812:53;:::i;:::-;10802:63;;10757:118;10269:613;;;;;:::o;10888:775::-;11121:4;11159:3;11148:9;11144:19;11136:27;;11173:71;11241:1;11230:9;11226:17;11217:6;11173:71;:::i;:::-;11254:72;11322:2;11311:9;11307:18;11298:6;11254:72;:::i;:::-;11336;11404:2;11393:9;11389:18;11380:6;11336:72;:::i;:::-;11418;11486:2;11475:9;11471:18;11462:6;11418:72;:::i;:::-;11500:73;11568:3;11557:9;11553:19;11544:6;11500:73;:::i;:::-;11583;11651:3;11640:9;11636:19;11627:6;11583:73;:::i;:::-;10888:775;;;;;;;;;:::o;11669:474::-;11737:6;11745;11794:2;11782:9;11773:7;11769:23;11765:32;11762:119;;;11800:79;;:::i;:::-;11762:119;11920:1;11945:53;11990:7;11981:6;11970:9;11966:22;11945:53;:::i;:::-;11935:63;;11891:117;12047:2;12073:53;12118:7;12109:6;12098:9;12094:22;12073:53;:::i;:::-;12063:63;;12018:118;11669:474;;;;;:::o;12149:180::-;12197:77;12194:1;12187:88;12294:4;12291:1;12284:15;12318:4;12315:1;12308:15;12335:320;12379:6;12416:1;12410:4;12406:12;12396:22;;12463:1;12457:4;12453:12;12484:18;12474:81;;12540:4;12532:6;12528:17;12518:27;;12474:81;12602:2;12594:6;12591:14;12571:18;12568:38;12565:84;;12621:18;;:::i;:::-;12565:84;12386:269;12335:320;;;:::o;12661:182::-;12801:34;12797:1;12789:6;12785:14;12778:58;12661:182;:::o;12849:366::-;12991:3;13012:67;13076:2;13071:3;13012:67;:::i;:::-;13005:74;;13088:93;13177:3;13088:93;:::i;:::-;13206:2;13201:3;13197:12;13190:19;;12849:366;;;:::o;13221:419::-;13387:4;13425:2;13414:9;13410:18;13402:26;;13474:9;13468:4;13464:20;13460:1;13449:9;13445:17;13438:47;13502:131;13628:4;13502:131;:::i;:::-;13494:139;;13221:419;;;:::o;13646:222::-;13786:34;13782:1;13774:6;13770:14;13763:58;13855:5;13850:2;13842:6;13838:15;13831:30;13646:222;:::o;13874:366::-;14016:3;14037:67;14101:2;14096:3;14037:67;:::i;:::-;14030:74;;14113:93;14202:3;14113:93;:::i;:::-;14231:2;14226:3;14222:12;14215:19;;13874:366;;;:::o;14246:419::-;14412:4;14450:2;14439:9;14435:18;14427:26;;14499:9;14493:4;14489:20;14485:1;14474:9;14470:17;14463:47;14527:131;14653:4;14527:131;:::i;:::-;14519:139;;14246:419;;;:::o;14671:180::-;14719:77;14716:1;14709:88;14816:4;14813:1;14806:15;14840:4;14837:1;14830:15;14857:180;14905:77;14902:1;14895:88;15002:4;14999:1;14992:15;15026:4;15023:1;15016:15;15043:233;15082:3;15105:24;15123:5;15105:24;:::i;:::-;15096:33;;15151:66;15144:5;15141:77;15138:103;;15221:18;;:::i;:::-;15138:103;15268:1;15261:5;15257:13;15250:20;;15043:233;;;:::o;15282:191::-;15322:3;15341:20;15359:1;15341:20;:::i;:::-;15336:25;;15375:20;15393:1;15375:20;:::i;:::-;15370:25;;15418:1;15415;15411:9;15404:16;;15439:3;15436:1;15433:10;15430:36;;;15446:18;;:::i;:::-;15430:36;15282:191;;;;:::o;15479:227::-;15619:34;15615:1;15607:6;15603:14;15596:58;15688:10;15683:2;15675:6;15671:15;15664:35;15479:227;:::o;15712:366::-;15854:3;15875:67;15939:2;15934:3;15875:67;:::i;:::-;15868:74;;15951:93;16040:3;15951:93;:::i;:::-;16069:2;16064:3;16060:12;16053:19;;15712:366;;;:::o;16084:419::-;16250:4;16288:2;16277:9;16273:18;16265:26;;16337:9;16331:4;16327:20;16323:1;16312:9;16308:17;16301:47;16365:131;16491:4;16365:131;:::i;:::-;16357:139;;16084:419;;;:::o;16509:442::-;16658:4;16696:2;16685:9;16681:18;16673:26;;16709:71;16777:1;16766:9;16762:17;16753:6;16709:71;:::i;:::-;16790:72;16858:2;16847:9;16843:18;16834:6;16790:72;:::i;:::-;16872;16940:2;16929:9;16925:18;16916:6;16872:72;:::i;:::-;16509:442;;;;;;:::o;16957:227::-;17097:34;17093:1;17085:6;17081:14;17074:58;17166:10;17161:2;17153:6;17149:15;17142:35;16957:227;:::o;17190:366::-;17332:3;17353:67;17417:2;17412:3;17353:67;:::i;:::-;17346:74;;17429:93;17518:3;17429:93;:::i;:::-;17547:2;17542:3;17538:12;17531:19;;17190:366;;;:::o;17562:419::-;17728:4;17766:2;17755:9;17751:18;17743:26;;17815:9;17809:4;17805:20;17801:1;17790:9;17786:17;17779:47;17843:131;17969:4;17843:131;:::i;:::-;17835:139;;17562:419;;;:::o;17987:228::-;18127:34;18123:1;18115:6;18111:14;18104:58;18196:11;18191:2;18183:6;18179:15;18172:36;17987:228;:::o;18221:366::-;18363:3;18384:67;18448:2;18443:3;18384:67;:::i;:::-;18377:74;;18460:93;18549:3;18460:93;:::i;:::-;18578:2;18573:3;18569:12;18562:19;;18221:366;;;:::o;18593:419::-;18759:4;18797:2;18786:9;18782:18;18774:26;;18846:9;18840:4;18836:20;18832:1;18821:9;18817:17;18810:47;18874:131;19000:4;18874:131;:::i;:::-;18866:139;;18593:419;;;:::o;19018:232::-;19158:34;19154:1;19146:6;19142:14;19135:58;19227:15;19222:2;19214:6;19210:15;19203:40;19018:232;:::o;19256:366::-;19398:3;19419:67;19483:2;19478:3;19419:67;:::i;:::-;19412:74;;19495:93;19584:3;19495:93;:::i;:::-;19613:2;19608:3;19604:12;19597:19;;19256:366;;;:::o;19628:419::-;19794:4;19832:2;19821:9;19817:18;19809:26;;19881:9;19875:4;19871:20;19867:1;19856:9;19852:17;19845:47;19909:131;20035:4;19909:131;:::i;:::-;19901:139;;19628:419;;;:::o;20053:224::-;20193:34;20189:1;20181:6;20177:14;20170:58;20262:7;20257:2;20249:6;20245:15;20238:32;20053:224;:::o;20283:366::-;20425:3;20446:67;20510:2;20505:3;20446:67;:::i;:::-;20439:74;;20522:93;20611:3;20522:93;:::i;:::-;20640:2;20635:3;20631:12;20624:19;;20283:366;;;:::o;20655:419::-;20821:4;20859:2;20848:9;20844:18;20836:26;;20908:9;20902:4;20898:20;20894:1;20883:9;20879:17;20872:47;20936:131;21062:4;20936:131;:::i;:::-;20928:139;;20655:419;;;:::o;21080:223::-;21220:34;21216:1;21208:6;21204:14;21197:58;21289:6;21284:2;21276:6;21272:15;21265:31;21080:223;:::o;21309:366::-;21451:3;21472:67;21536:2;21531:3;21472:67;:::i;:::-;21465:74;;21548:93;21637:3;21548:93;:::i;:::-;21666:2;21661:3;21657:12;21650:19;;21309:366;;;:::o;21681:419::-;21847:4;21885:2;21874:9;21870:18;21862:26;;21934:9;21928:4;21924:20;21920:1;21909:9;21905:17;21898:47;21962:131;22088:4;21962:131;:::i;:::-;21954:139;;21681:419;;;:::o;22106:410::-;22146:7;22169:20;22187:1;22169:20;:::i;:::-;22164:25;;22203:20;22221:1;22203:20;:::i;:::-;22198:25;;22258:1;22255;22251:9;22280:30;22298:11;22280:30;:::i;:::-;22269:41;;22459:1;22450:7;22446:15;22443:1;22440:22;22420:1;22413:9;22393:83;22370:139;;22489:18;;:::i;:::-;22370:139;22154:362;22106:410;;;;:::o;22522:180::-;22570:77;22567:1;22560:88;22667:4;22664:1;22657:15;22691:4;22688:1;22681:15;22708:185;22748:1;22765:20;22783:1;22765:20;:::i;:::-;22760:25;;22799:20;22817:1;22799:20;:::i;:::-;22794:25;;22838:1;22828:35;;22843:18;;:::i;:::-;22828:35;22885:1;22882;22878:9;22873:14;;22708:185;;;;:::o;22899:239::-;23039:34;23035:1;23027:6;23023:14;23016:58;23108:22;23103:2;23095:6;23091:15;23084:47;22899:239;:::o;23144:366::-;23286:3;23307:67;23371:2;23366:3;23307:67;:::i;:::-;23300:74;;23383:93;23472:3;23383:93;:::i;:::-;23501:2;23496:3;23492:12;23485:19;;23144:366;;;:::o;23516:419::-;23682:4;23720:2;23709:9;23705:18;23697:26;;23769:9;23763:4;23759:20;23755:1;23744:9;23740:17;23733:47;23797:131;23923:4;23797:131;:::i;:::-;23789:139;;23516:419;;;:::o;23941:229::-;24081:34;24077:1;24069:6;24065:14;24058:58;24150:12;24145:2;24137:6;24133:15;24126:37;23941:229;:::o;24176:366::-;24318:3;24339:67;24403:2;24398:3;24339:67;:::i;:::-;24332:74;;24415:93;24504:3;24415:93;:::i;:::-;24533:2;24528:3;24524:12;24517:19;;24176:366;;;:::o;24548:419::-;24714:4;24752:2;24741:9;24737:18;24729:26;;24801:9;24795:4;24791:20;24787:1;24776:9;24772:17;24765:47;24829:131;24955:4;24829:131;:::i;:::-;24821:139;;24548:419;;;:::o;24973:244::-;25113:34;25109:1;25101:6;25097:14;25090:58;25182:27;25177:2;25169:6;25165:15;25158:52;24973:244;:::o;25223:366::-;25365:3;25386:67;25450:2;25445:3;25386:67;:::i;:::-;25379:74;;25462:93;25551:3;25462:93;:::i;:::-;25580:2;25575:3;25571:12;25564:19;;25223:366;;;:::o;25595:419::-;25761:4;25799:2;25788:9;25784:18;25776:26;;25848:9;25842:4;25838:20;25834:1;25823:9;25819:17;25812:47;25876:131;26002:4;25876:131;:::i;:::-;25868:139;;25595:419;;;:::o;26020:225::-;26160:34;26156:1;26148:6;26144:14;26137:58;26229:8;26224:2;26216:6;26212:15;26205:33;26020:225;:::o;26251:366::-;26393:3;26414:67;26478:2;26473:3;26414:67;:::i;:::-;26407:74;;26490:93;26579:3;26490:93;:::i;:::-;26608:2;26603:3;26599:12;26592:19;;26251:366;;;:::o;26623:419::-;26789:4;26827:2;26816:9;26812:18;26804:26;;26876:9;26870:4;26866:20;26862:1;26851:9;26847:17;26840:47;26904:131;27030:4;26904:131;:::i;:::-;26896:139;;26623:419;;;:::o;27048:182::-;27188:34;27184:1;27176:6;27172:14;27165:58;27048:182;:::o;27236:366::-;27378:3;27399:67;27463:2;27458:3;27399:67;:::i;:::-;27392:74;;27475:93;27564:3;27475:93;:::i;:::-;27593:2;27588:3;27584:12;27577:19;;27236:366;;;:::o;27608:419::-;27774:4;27812:2;27801:9;27797:18;27789:26;;27861:9;27855:4;27851:20;27847:1;27836:9;27832:17;27825:47;27889:131;28015:4;27889:131;:::i;:::-;27881:139;;27608:419;;;:::o;28033:223::-;28173:34;28169:1;28161:6;28157:14;28150:58;28242:6;28237:2;28229:6;28225:15;28218:31;28033:223;:::o;28262:366::-;28404:3;28425:67;28489:2;28484:3;28425:67;:::i;:::-;28418:74;;28501:93;28590:3;28501:93;:::i;:::-;28619:2;28614:3;28610:12;28603:19;;28262:366;;;:::o;28634:419::-;28800:4;28838:2;28827:9;28823:18;28815:26;;28887:9;28881:4;28877:20;28873:1;28862:9;28858:17;28851:47;28915:131;29041:4;28915:131;:::i;:::-;28907:139;;28634:419;;;:::o;29059:221::-;29199:34;29195:1;29187:6;29183:14;29176:58;29268:4;29263:2;29255:6;29251:15;29244:29;29059:221;:::o;29286:366::-;29428:3;29449:67;29513:2;29508:3;29449:67;:::i;:::-;29442:74;;29525:93;29614:3;29525:93;:::i;:::-;29643:2;29638:3;29634:12;29627:19;;29286:366;;;:::o;29658:419::-;29824:4;29862:2;29851:9;29847:18;29839:26;;29911:9;29905:4;29901:20;29897:1;29886:9;29882:17;29875:47;29939:131;30065:4;29939:131;:::i;:::-;29931:139;;29658:419;;;:::o;30083:224::-;30223:34;30219:1;30211:6;30207:14;30200:58;30292:7;30287:2;30279:6;30275:15;30268:32;30083:224;:::o;30313:366::-;30455:3;30476:67;30540:2;30535:3;30476:67;:::i;:::-;30469:74;;30552:93;30641:3;30552:93;:::i;:::-;30670:2;30665:3;30661:12;30654:19;;30313:366;;;:::o;30685:419::-;30851:4;30889:2;30878:9;30874:18;30866:26;;30938:9;30932:4;30928:20;30924:1;30913:9;30909:17;30902:47;30966:131;31092:4;30966:131;:::i;:::-;30958:139;;30685:419;;;:::o;31110:222::-;31250:34;31246:1;31238:6;31234:14;31227:58;31319:5;31314:2;31306:6;31302:15;31295:30;31110:222;:::o;31338:366::-;31480:3;31501:67;31565:2;31560:3;31501:67;:::i;:::-;31494:74;;31577:93;31666:3;31577:93;:::i;:::-;31695:2;31690:3;31686:12;31679:19;;31338:366;;;:::o;31710:419::-;31876:4;31914:2;31903:9;31899:18;31891:26;;31963:9;31957:4;31953:20;31949:1;31938:9;31934:17;31927:47;31991:131;32117:4;31991:131;:::i;:::-;31983:139;;31710:419;;;:::o;32135:169::-;32275:21;32271:1;32263:6;32259:14;32252:45;32135:169;:::o;32310:366::-;32452:3;32473:67;32537:2;32532:3;32473:67;:::i;:::-;32466:74;;32549:93;32638:3;32549:93;:::i;:::-;32667:2;32662:3;32658:12;32651:19;;32310:366;;;:::o;32682:419::-;32848:4;32886:2;32875:9;32871:18;32863:26;;32935:9;32929:4;32925:20;32921:1;32910:9;32906:17;32899:47;32963:131;33089:4;32963:131;:::i;:::-;32955:139;;32682:419;;;:::o;33107:221::-;33247:34;33243:1;33235:6;33231:14;33224:58;33316:4;33311:2;33303:6;33299:15;33292:29;33107:221;:::o;33334:366::-;33476:3;33497:67;33561:2;33556:3;33497:67;:::i;:::-;33490:74;;33573:93;33662:3;33573:93;:::i;:::-;33691:2;33686:3;33682:12;33675:19;;33334:366;;;:::o;33706:419::-;33872:4;33910:2;33899:9;33895:18;33887:26;;33959:9;33953:4;33949:20;33945:1;33934:9;33930:17;33923:47;33987:131;34113:4;33987:131;:::i;:::-;33979:139;;33706:419;;;:::o;34131:225::-;34271:34;34267:1;34259:6;34255:14;34248:58;34340:8;34335:2;34327:6;34323:15;34316:33;34131:225;:::o;34362:366::-;34504:3;34525:67;34589:2;34584:3;34525:67;:::i;:::-;34518:74;;34601:93;34690:3;34601:93;:::i;:::-;34719:2;34714:3;34710:12;34703:19;;34362:366;;;:::o;34734:419::-;34900:4;34938:2;34927:9;34923:18;34915:26;;34987:9;34981:4;34977:20;34973:1;34962:9;34958:17;34951:47;35015:131;35141:4;35015:131;:::i;:::-;35007:139;;34734:419;;;:::o;35159:169::-;35299:21;35295:1;35287:6;35283:14;35276:45;35159:169;:::o;35334:366::-;35476:3;35497:67;35561:2;35556:3;35497:67;:::i;:::-;35490:74;;35573:93;35662:3;35573:93;:::i;:::-;35691:2;35686:3;35682:12;35675:19;;35334:366;;;:::o;35706:419::-;35872:4;35910:2;35899:9;35895:18;35887:26;;35959:9;35953:4;35949:20;35945:1;35934:9;35930:17;35923:47;35987:131;36113:4;35987:131;:::i;:::-;35979:139;;35706:419;;;:::o;36131:226::-;36271:34;36267:1;36259:6;36255:14;36248:58;36340:9;36335:2;36327:6;36323:15;36316:34;36131:226;:::o;36363:366::-;36505:3;36526:67;36590:2;36585:3;36526:67;:::i;:::-;36519:74;;36602:93;36691:3;36602:93;:::i;:::-;36720:2;36715:3;36711:12;36704:19;;36363:366;;;:::o;36735:419::-;36901:4;36939:2;36928:9;36924:18;36916:26;;36988:9;36982:4;36978:20;36974:1;36963:9;36959:17;36952:47;37016:131;37142:4;37016:131;:::i;:::-;37008:139;;36735:419;;;:::o;37160:194::-;37200:4;37220:20;37238:1;37220:20;:::i;:::-;37215:25;;37254:20;37272:1;37254:20;:::i;:::-;37249:25;;37298:1;37295;37291:9;37283:17;;37322:1;37316:4;37313:11;37310:37;;;37327:18;;:::i;:::-;37310:37;37160:194;;;;:::o;37360:225::-;37500:34;37496:1;37488:6;37484:14;37477:58;37569:8;37564:2;37556:6;37552:15;37545:33;37360:225;:::o;37591:366::-;37733:3;37754:67;37818:2;37813:3;37754:67;:::i;:::-;37747:74;;37830:93;37919:3;37830:93;:::i;:::-;37948:2;37943:3;37939:12;37932:19;;37591:366;;;:::o;37963:419::-;38129:4;38167:2;38156:9;38152:18;38144:26;;38216:9;38210:4;38206:20;38202:1;38191:9;38187:17;38180:47;38244:131;38370:4;38244:131;:::i;:::-;38236:139;;37963:419;;;:::o;38388:147::-;38489:11;38526:3;38511:18;;38388:147;;;;:::o;38541:114::-;;:::o;38661:398::-;38820:3;38841:83;38922:1;38917:3;38841:83;:::i;:::-;38834:90;;38933:93;39022:3;38933:93;:::i;:::-;39051:1;39046:3;39042:11;39035:18;;38661:398;;;:::o;39065:379::-;39249:3;39271:147;39414:3;39271:147;:::i;:::-;39264:154;;39435:3;39428:10;;39065:379;;;:::o;39450:180::-;39498:77;39495:1;39488:88;39595:4;39592:1;39585:15;39619:4;39616:1;39609:15;39636:143;39693:5;39724:6;39718:13;39709:22;;39740:33;39767:5;39740:33;:::i;:::-;39636:143;;;;:::o;39785:351::-;39855:6;39904:2;39892:9;39883:7;39879:23;39875:32;39872:119;;;39910:79;;:::i;:::-;39872:119;40030:1;40055:64;40111:7;40102:6;40091:9;40087:22;40055:64;:::i;:::-;40045:74;;40001:128;39785:351;;;;:::o;40142:85::-;40187:7;40216:5;40205:16;;40142:85;;;:::o;40233:60::-;40261:3;40282:5;40275:12;;40233:60;;;:::o;40299:158::-;40357:9;40390:61;40408:42;40417:32;40443:5;40417:32;:::i;:::-;40408:42;:::i;:::-;40390:61;:::i;:::-;40377:74;;40299:158;;;:::o;40463:147::-;40558:45;40597:5;40558:45;:::i;:::-;40553:3;40546:58;40463:147;;:::o;40616:114::-;40683:6;40717:5;40711:12;40701:22;;40616:114;;;:::o;40736:184::-;40835:11;40869:6;40864:3;40857:19;40909:4;40904:3;40900:14;40885:29;;40736:184;;;;:::o;40926:132::-;40993:4;41016:3;41008:11;;41046:4;41041:3;41037:14;41029:22;;40926:132;;;:::o;41064:108::-;41141:24;41159:5;41141:24;:::i;:::-;41136:3;41129:37;41064:108;;:::o;41178:179::-;41247:10;41268:46;41310:3;41302:6;41268:46;:::i;:::-;41346:4;41341:3;41337:14;41323:28;;41178:179;;;;:::o;41363:113::-;41433:4;41465;41460:3;41456:14;41448:22;;41363:113;;;:::o;41512:732::-;41631:3;41660:54;41708:5;41660:54;:::i;:::-;41730:86;41809:6;41804:3;41730:86;:::i;:::-;41723:93;;41840:56;41890:5;41840:56;:::i;:::-;41919:7;41950:1;41935:284;41960:6;41957:1;41954:13;41935:284;;;42036:6;42030:13;42063:63;42122:3;42107:13;42063:63;:::i;:::-;42056:70;;42149:60;42202:6;42149:60;:::i;:::-;42139:70;;41995:224;41982:1;41979;41975:9;41970:14;;41935:284;;;41939:14;42235:3;42228:10;;41636:608;;;41512:732;;;;:::o;42250:831::-;42513:4;42551:3;42540:9;42536:19;42528:27;;42565:71;42633:1;42622:9;42618:17;42609:6;42565:71;:::i;:::-;42646:80;42722:2;42711:9;42707:18;42698:6;42646:80;:::i;:::-;42773:9;42767:4;42763:20;42758:2;42747:9;42743:18;42736:48;42801:108;42904:4;42895:6;42801:108;:::i;:::-;42793:116;;42919:72;42987:2;42976:9;42972:18;42963:6;42919:72;:::i;:::-;43001:73;43069:3;43058:9;43054:19;43045:6;43001:73;:::i;:::-;42250:831;;;;;;;;:::o
Swarm Source
ipfs://2a97697af13c1e5acd5baab45f4cb8c7ce0f20a7bb7f5070e97aac3d79569b10
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.