More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 133 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 15971106 | 781 days ago | IN | 0 ETH | 0.00043868 | ||||
Approve | 15214531 | 893 days ago | IN | 0 ETH | 0.00050704 | ||||
Approve | 15184795 | 898 days ago | IN | 0 ETH | 0.00054222 | ||||
Approve | 15152243 | 903 days ago | IN | 0 ETH | 0.00027857 | ||||
Approve | 15152243 | 903 days ago | IN | 0 ETH | 0.00048138 | ||||
Approve | 15048687 | 919 days ago | IN | 0 ETH | 0.00127582 | ||||
Approve | 15044692 | 919 days ago | IN | 0 ETH | 0.00087325 | ||||
Transfer | 15042854 | 920 days ago | IN | 0 ETH | 0.00176584 | ||||
Approve | 15042392 | 920 days ago | IN | 0 ETH | 0.00141818 | ||||
Approve | 15040906 | 920 days ago | IN | 0 ETH | 0.0025511 | ||||
Transfer | 15040775 | 920 days ago | IN | 0 ETH | 0.00656891 | ||||
Approve | 15040414 | 920 days ago | IN | 0 ETH | 0.00221104 | ||||
Approve | 15040406 | 920 days ago | IN | 0 ETH | 0.00217844 | ||||
Approve | 15040377 | 920 days ago | IN | 0 ETH | 0.00170038 | ||||
Approve | 15039952 | 920 days ago | IN | 0 ETH | 0.0026593 | ||||
Approve | 15039852 | 920 days ago | IN | 0 ETH | 0.00561349 | ||||
Approve | 15039701 | 920 days ago | IN | 0 ETH | 0.00205071 | ||||
Approve | 15039429 | 920 days ago | IN | 0 ETH | 0.00095802 | ||||
Approve | 15039427 | 920 days ago | IN | 0 ETH | 0.0006497 | ||||
Approve | 15039425 | 920 days ago | IN | 0 ETH | 0.00101998 | ||||
Approve | 15039397 | 920 days ago | IN | 0 ETH | 0.00191887 | ||||
Approve | 15039114 | 920 days ago | IN | 0 ETH | 0.00122612 | ||||
Approve | 15039066 | 920 days ago | IN | 0 ETH | 0.00145071 | ||||
Approve | 15039062 | 920 days ago | IN | 0 ETH | 0.00183526 | ||||
Approve | 15039057 | 920 days ago | IN | 0 ETH | 0.00152144 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
15184803 | 898 days ago | 0.00005591 ETH | ||||
15184803 | 898 days ago | 0.00011982 ETH | ||||
15184803 | 898 days ago | 0.00039942 ETH | ||||
15184803 | 898 days ago | 0.0005706 ETH | ||||
15152251 | 903 days ago | 0.00005591 ETH | ||||
15152251 | 903 days ago | 0.00011982 ETH | ||||
15152251 | 903 days ago | 0.00039942 ETH | ||||
15152251 | 903 days ago | 0.0005706 ETH | ||||
15152251 | 903 days ago | 0.00005706 ETH | ||||
15152251 | 903 days ago | 0.00012227 ETH | ||||
15152251 | 903 days ago | 0.00040758 ETH | ||||
15152251 | 903 days ago | 0.0005827 ETH | ||||
15133859 | 905 days ago | 0.00005811 ETH | ||||
15133859 | 905 days ago | 0.00012453 ETH | ||||
15133859 | 905 days ago | 0.0004151 ETH | ||||
15133859 | 905 days ago | 0.00058767 ETH | ||||
15129898 | 906 days ago | 0.00006063 ETH | ||||
15129898 | 906 days ago | 0.00012993 ETH | ||||
15129898 | 906 days ago | 0.00043311 ETH | ||||
15129898 | 906 days ago | 0.00061865 ETH | ||||
15076694 | 914 days ago | 0.00006189 ETH | ||||
15076694 | 914 days ago | 0.00013262 ETH | ||||
15076694 | 914 days ago | 0.00044207 ETH | ||||
15076694 | 914 days ago | 0.00062488 ETH | ||||
15052921 | 918 days ago | 0.00006481 ETH |
Loading...
Loading
Contract Name:
HBE
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-28 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.14; /** https://linktr.ee/happybirthdayelon * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `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); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `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 updated 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 updated 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 updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { 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 {} } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SignedSafeMath { /** * @dev Returns the multiplication of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { return a * b; } /** * @dev Returns the integer division of two signed integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(int256 a, int256 b) internal pure returns (int256) { return a / b; } /** * @dev Returns the subtraction of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { return a - b; } /** * @dev Returns the addition of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { return a + b; } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow * checks. * * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can * easily result in undesired exploitation or bugs, since developers usually * assume that overflows raise errors. `SafeCast` restores this intuition by * reverting the transaction when such an operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. * * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing * all math on `uint256` and `int256` and then downcasting. */ library SafeCast { /** * @dev Returns the downcasted uint224 from uint256, reverting on * overflow (when the input is greater than largest uint224). * * Counterpart to Solidity's `uint224` operator. * * Requirements: * * - input must fit into 224 bits */ function toUint224(uint256 value) internal pure returns (uint224) { require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits"); return uint224(value); } /** * @dev Returns the downcasted uint128 from uint256, reverting on * overflow (when the input is greater than largest uint128). * * Counterpart to Solidity's `uint128` operator. * * Requirements: * * - input must fit into 128 bits */ function toUint128(uint256 value) internal pure returns (uint128) { require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits"); return uint128(value); } /** * @dev Returns the downcasted uint96 from uint256, reverting on * overflow (when the input is greater than largest uint96). * * Counterpart to Solidity's `uint96` operator. * * Requirements: * * - input must fit into 96 bits */ function toUint96(uint256 value) internal pure returns (uint96) { require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits"); return uint96(value); } /** * @dev Returns the downcasted uint64 from uint256, reverting on * overflow (when the input is greater than largest uint64). * * Counterpart to Solidity's `uint64` operator. * * Requirements: * * - input must fit into 64 bits */ function toUint64(uint256 value) internal pure returns (uint64) { require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits"); return uint64(value); } /** * @dev Returns the downcasted uint32 from uint256, reverting on * overflow (when the input is greater than largest uint32). * * Counterpart to Solidity's `uint32` operator. * * Requirements: * * - input must fit into 32 bits */ function toUint32(uint256 value) internal pure returns (uint32) { require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits"); return uint32(value); } /** * @dev Returns the downcasted uint16 from uint256, reverting on * overflow (when the input is greater than largest uint16). * * Counterpart to Solidity's `uint16` operator. * * Requirements: * * - input must fit into 16 bits */ function toUint16(uint256 value) internal pure returns (uint16) { require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits"); return uint16(value); } /** * @dev Returns the downcasted uint8 from uint256, reverting on * overflow (when the input is greater than largest uint8). * * Counterpart to Solidity's `uint8` operator. * * Requirements: * * - input must fit into 8 bits. */ function toUint8(uint256 value) internal pure returns (uint8) { require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits"); return uint8(value); } /** * @dev Converts a signed int256 into an unsigned uint256. * * Requirements: * * - input must be greater than or equal to 0. */ function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } /** * @dev Returns the downcasted int128 from int256, reverting on * overflow (when the input is less than smallest int128 or * greater than largest int128). * * Counterpart to Solidity's `int128` operator. * * Requirements: * * - input must fit into 128 bits * * _Available since v3.1._ */ function toInt128(int256 value) internal pure returns (int128) { require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits"); return int128(value); } /** * @dev Returns the downcasted int64 from int256, reverting on * overflow (when the input is less than smallest int64 or * greater than largest int64). * * Counterpart to Solidity's `int64` operator. * * Requirements: * * - input must fit into 64 bits * * _Available since v3.1._ */ function toInt64(int256 value) internal pure returns (int64) { require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits"); return int64(value); } /** * @dev Returns the downcasted int32 from int256, reverting on * overflow (when the input is less than smallest int32 or * greater than largest int32). * * Counterpart to Solidity's `int32` operator. * * Requirements: * * - input must fit into 32 bits * * _Available since v3.1._ */ function toInt32(int256 value) internal pure returns (int32) { require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits"); return int32(value); } /** * @dev Returns the downcasted int16 from int256, reverting on * overflow (when the input is less than smallest int16 or * greater than largest int16). * * Counterpart to Solidity's `int16` operator. * * Requirements: * * - input must fit into 16 bits * * _Available since v3.1._ */ function toInt16(int256 value) internal pure returns (int16) { require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits"); return int16(value); } /** * @dev Returns the downcasted int8 from int256, reverting on * overflow (when the input is less than smallest int8 or * greater than largest int8). * * Counterpart to Solidity's `int8` operator. * * Requirements: * * - input must fit into 8 bits. * * _Available since v3.1._ */ function toInt8(int256 value) internal pure returns (int8) { require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits"); return int8(value); } /** * @dev Converts an unsigned uint256 into a signed int256. * * Requirements: * * - input must be less than or equal to maxInt256. */ function toInt256(uint256 value) internal pure returns (int256) { // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256"); return int256(value); } } contract HBE is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; bool private inSwap; bool public swapEnabled = true; uint256 public buyFee = 4; uint256 public sellFee = 2; address payable public marketingWallet = payable(0x0E79482082550FeE7Da4A163D179552EB9dc0fBB); address payable public teamWallet = payable(0x24988F6f6BE17bC95b2a4DDa150869EB8f8946B6); address payable public devWallet = payable(0x2dA26E79aCebe73f98aF42BE0c8571001F13dB2a); uint256 public maxTxAmount = 2806202 * (10**18); uint256 public maxWalletToken = 701550 * (10**18); uint256 public swapTokensAtAmount = 4000 * (10**18); modifier lockTheSwap { inSwap = true; _; inSwap = false; } // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; event ExcludeFromFees(address indexed account, bool isExcluded); event SwapEnabledUpdated(bool enabled); constructor() ERC20("Happy Birthday Elon!", "HBE") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(marketingWallet, true); excludeFromFees(teamWallet, true); excludeFromFees(devWallet, true); excludeFromFees(address(this), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(owner(), 28062022 * (10**18)); } 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; } bool excludedAccount = _isExcludedFromFees[from] || _isExcludedFromFees[to]; if(!excludedAccount) { require(amount <= maxTxAmount, "transaction amount must be less than equal to MaxTx amount"); } if (from == uniswapV2Pair && !excludedAccount) { uint256 contractBalanceRecepient = balanceOf(to); require(contractBalanceRecepient + amount <= maxWalletToken,"Exceeds maximum wallet token amount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount; if( overMinTokenBalance && !inSwap && to == uniswapV2Pair && swapEnabled && from != owner() ) { contractTokenBalance = swapTokensAtAmount; swapTokensForEth(contractTokenBalance); } // if any account belongs to _isExcludedFromFee account then remove the fee if(!excludedAccount) { uint256 fees; if(from == uniswapV2Pair) { fees = amount.mul(buyFee).div(100); } if(to == uniswapV2Pair) { fees = amount.mul(sellFee).div(100); } amount = amount.sub(fees); super._transfer(from, address(this), fees); } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) { _approve(address(this), address(uniswapV2Router), ~uint256(0)); } // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); marketingWallet.transfer(address(this).balance.mul(50).div(100)); teamWallet.transfer(address(this).balance.mul(30).div(100)); devWallet.transfer(address(this).balance.mul(20).div(100)); } function excludeFromFees(address account, bool excluded) public onlyOwner { require(_isExcludedFromFees[account] != excluded, "REIC: Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function setFee(uint256 _buyFee, uint256 _sellFee) public onlyOwner { require(_buyFee <= 10 && _sellFee <= 10, "tax too high"); buyFee = _buyFee; sellFee = _sellFee; } function updateWallets(address payable _marketing, address payable _team, address payable _dev) public onlyOwner { marketingWallet = _marketing; teamWallet = _team; devWallet = _dev; } function setMaxTxAmount(uint256 newAmount) public onlyOwner { maxTxAmount = newAmount; require(maxTxAmount >= totalSupply().div(200), "value too low"); } function setSwapTokensAtAmount(uint256 newAmount) public onlyOwner { swapTokensAtAmount = newAmount; } function setMaxWalletToken(uint256 maxToken) public onlyOwner { maxWalletToken = maxToken; require(maxWalletToken >= totalSupply().div(100), "value too low"); } function setSwapEnabled(bool _enabled) public onlyOwner { swapEnabled = _enabled; emit SwapEnabledUpdated(_enabled); } receive() external payable { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","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":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxToken","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketing","type":"address"},{"internalType":"address payable","name":"_team","type":"address"},{"internalType":"address payable","name":"_dev","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526001600660156101000a81548160ff02191690831515021790555060046007556002600855730e79482082550fee7da4a163d179552eb9dc0fbb600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507324988f6f6be17bc95b2a4dda150869eb8f8946b6600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732da26e79acebe73f98af42be0c8571001f13db2a600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506a02523c83e6e09842a80000600c5569948f1a095ccc3cf80000600d5568d8d726b7177a800000600e553480156200015f57600080fd5b506040518060400160405280601481526020017f486170707920426972746864617920456c6f6e210000000000000000000000008152506040518060400160405280600381526020017f48424500000000000000000000000000000000000000000000000000000000008152508160039080519060200190620001e492919062000968565b508060049080519060200190620001fd92919062000968565b50505062000220620002146200051f60201b60201c565b6200052760201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000287573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ad919062000a82565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033b919062000a82565b6040518363ffffffff1660e01b81526004016200035a92919062000ac5565b6020604051808303816000875af11580156200037a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a0919062000a82565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620004396200042b620005ed60201b60201c565b60016200061760201b60201c565b6200046e600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200061760201b60201c565b620004a3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200061760201b60201c565b620004d8600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200061760201b60201c565b620004eb3060016200061760201b60201c565b62000517620004ff620005ed60201b60201c565b6a17365d42c63359e9580000620007e660201b60201c565b505062000de1565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006276200051f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200064d620005ed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200069d9062000b53565b60405180910390fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036200073b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007329062000beb565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007da919062000c2a565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000858576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200084f9062000c97565b60405180910390fd5b6200086c600083836200095e60201b60201c565b806002600082825462000880919062000cf2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008d7919062000cf2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200093e919062000d60565b60405180910390a36200095a600083836200096360201b60201c565b5050565b505050565b505050565b828054620009769062000dac565b90600052602060002090601f0160209004810192826200099a5760008555620009e6565b82601f10620009b557805160ff1916838001178555620009e6565b82800160010185558215620009e6579182015b82811115620009e5578251825591602001919060010190620009c8565b5b509050620009f59190620009f9565b5090565b5b8082111562000a14576000816000905550600101620009fa565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a4a8262000a1d565b9050919050565b62000a5c8162000a3d565b811462000a6857600080fd5b50565b60008151905062000a7c8162000a51565b92915050565b60006020828403121562000a9b5762000a9a62000a18565b5b600062000aab8482850162000a6b565b91505092915050565b62000abf8162000a3d565b82525050565b600060408201905062000adc600083018562000ab4565b62000aeb602083018462000ab4565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000b3b60208362000af2565b915062000b488262000b03565b602082019050919050565b6000602082019050818103600083015262000b6e8162000b2c565b9050919050565b7f524549433a204163636f756e7420697320616c7265616479207468652076616c60008201527f7565206f6620276578636c756465642700000000000000000000000000000000602082015250565b600062000bd360308362000af2565b915062000be08262000b75565b604082019050919050565b6000602082019050818103600083015262000c068162000bc4565b9050919050565b60008115159050919050565b62000c248162000c0d565b82525050565b600060208201905062000c41600083018462000c19565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000c7f601f8362000af2565b915062000c8c8262000c47565b602082019050919050565b6000602082019050818103600083015262000cb28162000c70565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cff8262000cb9565b915062000d0c8362000cb9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d445762000d4362000cc3565b5b828201905092915050565b62000d5a8162000cb9565b82525050565b600060208201905062000d77600083018462000d4f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000dc557607f821691505b60208210810362000ddb5762000dda62000d7d565b5b50919050565b60805161361062000e1960003960008181610bd401528181611a6601528181611b5b01528181611c1d0152611c9b01526136106000f3fe6080604052600436106101f25760003560e01c8063715018a61161010d578063a9059cbb116100a0578063e01af92c1161006f578063e01af92c14610724578063e2f456051461074d578063e6c75f7114610778578063ec28438a146107a3578063f2fde38b146107cc576101f9565b8063a9059cbb14610658578063afa4f3b214610695578063c0246668146106be578063dd62ed3e146106e7576101f9565b80638ea5220f116100dc5780638ea5220f1461059c57806391d55f41146105c757806395d89b41146105f0578063a457c2d71461061b576101f9565b8063715018a61461050457806375f0a8741461051b5780638c0b5e22146105465780638da5cb5b14610571576101f9565b8063395093511161018557806352f7c9881161015457806352f7c9881461044857806359927044146104715780636ddd17131461049c57806370a08231146104c7576101f9565b8063395093511461037857806347062402146103b557806349bd5a5e146103e05780634fbee1931461040b576101f9565b806318160ddd116101c157806318160ddd146102ba57806323b872dd146102e55780632b14ca5614610322578063313ce5671461034d576101f9565b806306fdde03146101fe578063095ea7b314610229578063147c9f6d146102665780631694505e1461028f576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107f5565b60405161022091906125d3565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b919061268e565b610887565b60405161025d91906126e9565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190612742565b6108a5565b005b34801561029b57600080fd5b506102a46109e9565b6040516102b191906127f4565b60405180910390f35b3480156102c657600080fd5b506102cf610a0f565b6040516102dc919061281e565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190612839565b610a19565b60405161031991906126e9565b60405180910390f35b34801561032e57600080fd5b50610337610b11565b604051610344919061281e565b60405180910390f35b34801561035957600080fd5b50610362610b17565b60405161036f91906128a8565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a919061268e565b610b20565b6040516103ac91906126e9565b60405180910390f35b3480156103c157600080fd5b506103ca610bcc565b6040516103d7919061281e565b60405180910390f35b3480156103ec57600080fd5b506103f5610bd2565b60405161040291906128d2565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d91906128ed565b610bf6565b60405161043f91906126e9565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a919061291a565b610c4c565b005b34801561047d57600080fd5b50610486610d2b565b6040516104939190612969565b60405180910390f35b3480156104a857600080fd5b506104b1610d51565b6040516104be91906126e9565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e991906128ed565b610d64565b6040516104fb919061281e565b60405180910390f35b34801561051057600080fd5b50610519610dac565b005b34801561052757600080fd5b50610530610e34565b60405161053d9190612969565b60405180910390f35b34801561055257600080fd5b5061055b610e5a565b604051610568919061281e565b60405180910390f35b34801561057d57600080fd5b50610586610e60565b60405161059391906128d2565b60405180910390f35b3480156105a857600080fd5b506105b1610e8a565b6040516105be9190612969565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e99190612984565b610eb0565b005b3480156105fc57600080fd5b50610605610f95565b60405161061291906125d3565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d919061268e565b611027565b60405161064f91906126e9565b60405180910390f35b34801561066457600080fd5b5061067f600480360381019061067a919061268e565b611112565b60405161068c91906126e9565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190612984565b611130565b005b3480156106ca57600080fd5b506106e560048036038101906106e091906129dd565b6111b6565b005b3480156106f357600080fd5b5061070e60048036038101906107099190612a1d565b61136d565b60405161071b919061281e565b60405180910390f35b34801561073057600080fd5b5061074b60048036038101906107469190612a5d565b6113f4565b005b34801561075957600080fd5b506107626114c4565b60405161076f919061281e565b60405180910390f35b34801561078457600080fd5b5061078d6114ca565b60405161079a919061281e565b60405180910390f35b3480156107af57600080fd5b506107ca60048036038101906107c59190612984565b6114d0565b005b3480156107d857600080fd5b506107f360048036038101906107ee91906128ed565b6115b5565b005b60606003805461080490612ab9565b80601f016020809104026020016040519081016040528092919081815260200182805461083090612ab9565b801561087d5780601f106108525761010080835404028352916020019161087d565b820191906000526020600020905b81548152906001019060200180831161086057829003601f168201915b5050505050905090565b600061089b6108946116ac565b84846116b4565b6001905092915050565b6108ad6116ac565b73ffffffffffffffffffffffffffffffffffffffff166108cb610e60565b73ffffffffffffffffffffffffffffffffffffffff1614610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091890612b36565b60405180910390fd5b82600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610a2684848461187d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a716116ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae890612bc8565b60405180910390fd5b610b0585610afd6116ac565b8584036116b4565b60019150509392505050565b60085481565b60006012905090565b6000610bc2610b2d6116ac565b848460016000610b3b6116ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bbd9190612c17565b6116b4565b6001905092915050565b60075481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c546116ac565b73ffffffffffffffffffffffffffffffffffffffff16610c72610e60565b73ffffffffffffffffffffffffffffffffffffffff1614610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90612b36565b60405180910390fd5b600a8211158015610cda5750600a8111155b610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090612cb9565b60405180910390fd5b81600781905550806008819055505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610db46116ac565b73ffffffffffffffffffffffffffffffffffffffff16610dd2610e60565b73ffffffffffffffffffffffffffffffffffffffff1614610e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1f90612b36565b60405180910390fd5b610e326000611d4d565b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610eb86116ac565b73ffffffffffffffffffffffffffffffffffffffff16610ed6610e60565b73ffffffffffffffffffffffffffffffffffffffff1614610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2390612b36565b60405180910390fd5b80600d81905550610f4e6064610f40610a0f565b611e1390919063ffffffff16565b600d541015610f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8990612d25565b60405180910390fd5b50565b606060048054610fa490612ab9565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd090612ab9565b801561101d5780601f10610ff25761010080835404028352916020019161101d565b820191906000526020600020905b81548152906001019060200180831161100057829003601f168201915b5050505050905090565b600080600160006110366116ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90612db7565b60405180910390fd5b6111076110fe6116ac565b858584036116b4565b600191505092915050565b600061112661111f6116ac565b848461187d565b6001905092915050565b6111386116ac565b73ffffffffffffffffffffffffffffffffffffffff16611156610e60565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a390612b36565b60405180910390fd5b80600e8190555050565b6111be6116ac565b73ffffffffffffffffffffffffffffffffffffffff166111dc610e60565b73ffffffffffffffffffffffffffffffffffffffff1614611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122990612b36565b60405180910390fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90612e49565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161136191906126e9565b60405180910390a25050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6113fc6116ac565b73ffffffffffffffffffffffffffffffffffffffff1661141a610e60565b73ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790612b36565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a12816040516114b991906126e9565b60405180910390a150565b600e5481565b600d5481565b6114d86116ac565b73ffffffffffffffffffffffffffffffffffffffff166114f6610e60565b73ffffffffffffffffffffffffffffffffffffffff161461154c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154390612b36565b60405180910390fd5b80600c8190555061156e60c8611560610a0f565b611e1390919063ffffffff16565b600c5410156115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990612d25565b60405180910390fd5b50565b6115bd6116ac565b73ffffffffffffffffffffffffffffffffffffffff166115db610e60565b73ffffffffffffffffffffffffffffffffffffffff1614611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890612b36565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169790612edb565b60405180910390fd5b6116a981611d4d565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a90612f6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178990612fff565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611870919061281e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e390613091565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290613123565b60405180910390fd5b600081036119745761196f83836000611e29565b611d48565b6000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611a175750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905080611a6457600c54821115611a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5a906131b5565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611abd575080155b15611b21576000611acd84610d64565b9050600d548382611ade9190612c17565b1115611b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1690613247565b60405180910390fd5b505b6000611b2c30610d64565b90506000600e548210159050808015611b525750600660149054906101000a900460ff16155b8015611ba957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015611bc15750600660159054906101000a900460ff165b8015611c005750611bd0610e60565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15611c1457600e549150611c13826120a8565b5b82611d395760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603611c9957611c966064611c886007548861250490919063ffffffff16565b611e1390919063ffffffff16565b90505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603611d1757611d146064611d066008548861250490919063ffffffff16565b611e1390919063ffffffff16565b90505b611d2a818661251a90919063ffffffff16565b9450611d37873083611e29565b505b611d44868686611e29565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611e219190613296565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f90613091565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efe90613123565b60405180910390fd5b611f12838383612530565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8f90613339565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461202b9190612c17565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161208f919061281e565b60405180910390a36120a2848484612535565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156120e0576120df613359565b5b60405190808252806020026020018201604052801561210e5781602001602082028036833780820191505090505b509050308160008151811061212657612125613388565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f191906133cc565b8160018151811061220557612204613388565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161226c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661136d565b10156122a2576122a130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196116b4565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016123069594939291906134f2565b600060405180830381600087803b15801561232057600080fd5b505af1158015612334573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61239b606461238d60324761250490919063ffffffff16565b611e1390919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156123c6573d6000803e3d6000fd5b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61242a606461241c601e4761250490919063ffffffff16565b611e1390919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612455573d6000803e3d6000fd5b50600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6124b960646124ab60144761250490919063ffffffff16565b611e1390919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156124e4573d6000803e3d6000fd5b50506000600660146101000a81548160ff02191690831515021790555050565b60008183612512919061354c565b905092915050565b6000818361252891906135a6565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612574578082015181840152602081019050612559565b83811115612583576000848401525b50505050565b6000601f19601f8301169050919050565b60006125a58261253a565b6125af8185612545565b93506125bf818560208601612556565b6125c881612589565b840191505092915050565b600060208201905081810360008301526125ed818461259a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612625826125fa565b9050919050565b6126358161261a565b811461264057600080fd5b50565b6000813590506126528161262c565b92915050565b6000819050919050565b61266b81612658565b811461267657600080fd5b50565b60008135905061268881612662565b92915050565b600080604083850312156126a5576126a46125f5565b5b60006126b385828601612643565b92505060206126c485828601612679565b9150509250929050565b60008115159050919050565b6126e3816126ce565b82525050565b60006020820190506126fe60008301846126da565b92915050565b600061270f826125fa565b9050919050565b61271f81612704565b811461272a57600080fd5b50565b60008135905061273c81612716565b92915050565b60008060006060848603121561275b5761275a6125f5565b5b60006127698682870161272d565b935050602061277a8682870161272d565b925050604061278b8682870161272d565b9150509250925092565b6000819050919050565b60006127ba6127b56127b0846125fa565b612795565b6125fa565b9050919050565b60006127cc8261279f565b9050919050565b60006127de826127c1565b9050919050565b6127ee816127d3565b82525050565b600060208201905061280960008301846127e5565b92915050565b61281881612658565b82525050565b6000602082019050612833600083018461280f565b92915050565b600080600060608486031215612852576128516125f5565b5b600061286086828701612643565b935050602061287186828701612643565b925050604061288286828701612679565b9150509250925092565b600060ff82169050919050565b6128a28161288c565b82525050565b60006020820190506128bd6000830184612899565b92915050565b6128cc8161261a565b82525050565b60006020820190506128e760008301846128c3565b92915050565b600060208284031215612903576129026125f5565b5b600061291184828501612643565b91505092915050565b60008060408385031215612931576129306125f5565b5b600061293f85828601612679565b925050602061295085828601612679565b9150509250929050565b61296381612704565b82525050565b600060208201905061297e600083018461295a565b92915050565b60006020828403121561299a576129996125f5565b5b60006129a884828501612679565b91505092915050565b6129ba816126ce565b81146129c557600080fd5b50565b6000813590506129d7816129b1565b92915050565b600080604083850312156129f4576129f36125f5565b5b6000612a0285828601612643565b9250506020612a13858286016129c8565b9150509250929050565b60008060408385031215612a3457612a336125f5565b5b6000612a4285828601612643565b9250506020612a5385828601612643565b9150509250929050565b600060208284031215612a7357612a726125f5565b5b6000612a81848285016129c8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ad157607f821691505b602082108103612ae457612ae3612a8a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612b20602083612545565b9150612b2b82612aea565b602082019050919050565b60006020820190508181036000830152612b4f81612b13565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612bb2602883612545565b9150612bbd82612b56565b604082019050919050565b60006020820190508181036000830152612be181612ba5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c2282612658565b9150612c2d83612658565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c6257612c61612be8565b5b828201905092915050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000612ca3600c83612545565b9150612cae82612c6d565b602082019050919050565b60006020820190508181036000830152612cd281612c96565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000612d0f600d83612545565b9150612d1a82612cd9565b602082019050919050565b60006020820190508181036000830152612d3e81612d02565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612da1602583612545565b9150612dac82612d45565b604082019050919050565b60006020820190508181036000830152612dd081612d94565b9050919050565b7f524549433a204163636f756e7420697320616c7265616479207468652076616c60008201527f7565206f6620276578636c756465642700000000000000000000000000000000602082015250565b6000612e33603083612545565b9150612e3e82612dd7565b604082019050919050565b60006020820190508181036000830152612e6281612e26565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ec5602683612545565b9150612ed082612e69565b604082019050919050565b60006020820190508181036000830152612ef481612eb8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612f57602483612545565b9150612f6282612efb565b604082019050919050565b60006020820190508181036000830152612f8681612f4a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fe9602283612545565b9150612ff482612f8d565b604082019050919050565b6000602082019050818103600083015261301881612fdc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061307b602583612545565b91506130868261301f565b604082019050919050565b600060208201905081810360008301526130aa8161306e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061310d602383612545565b9150613118826130b1565b604082019050919050565b6000602082019050818103600083015261313c81613100565b9050919050565b7f7472616e73616374696f6e20616d6f756e74206d757374206265206c6573732060008201527f7468616e20657175616c20746f204d6178547820616d6f756e74000000000000602082015250565b600061319f603a83612545565b91506131aa82613143565b604082019050919050565b600060208201905081810360008301526131ce81613192565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613231602483612545565b915061323c826131d5565b604082019050919050565b6000602082019050818103600083015261326081613224565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006132a182612658565b91506132ac83612658565b9250826132bc576132bb613267565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613323602683612545565b915061332e826132c7565b604082019050919050565b6000602082019050818103600083015261335281613316565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506133c68161262c565b92915050565b6000602082840312156133e2576133e16125f5565b5b60006133f0848285016133b7565b91505092915050565b6000819050919050565b600061341e613419613414846133f9565b612795565b612658565b9050919050565b61342e81613403565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6134698161261a565b82525050565b600061347b8383613460565b60208301905092915050565b6000602082019050919050565b600061349f82613434565b6134a9818561343f565b93506134b483613450565b8060005b838110156134e55781516134cc888261346f565b97506134d783613487565b9250506001810190506134b8565b5085935050505092915050565b600060a082019050613507600083018861280f565b6135146020830187613425565b81810360408301526135268186613494565b905061353560608301856128c3565b613542608083018461280f565b9695505050505050565b600061355782612658565b915061356283612658565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561359b5761359a612be8565b5b828202905092915050565b60006135b182612658565b91506135bc83612658565b9250828210156135cf576135ce612be8565b5b82820390509291505056fea2646970667358221220bbd192b745affa1ca131cbbad7186cf36a021661ded90f1258c9027b24fe923e64736f6c634300080e0033
Deployed Bytecode
0x6080604052600436106101f25760003560e01c8063715018a61161010d578063a9059cbb116100a0578063e01af92c1161006f578063e01af92c14610724578063e2f456051461074d578063e6c75f7114610778578063ec28438a146107a3578063f2fde38b146107cc576101f9565b8063a9059cbb14610658578063afa4f3b214610695578063c0246668146106be578063dd62ed3e146106e7576101f9565b80638ea5220f116100dc5780638ea5220f1461059c57806391d55f41146105c757806395d89b41146105f0578063a457c2d71461061b576101f9565b8063715018a61461050457806375f0a8741461051b5780638c0b5e22146105465780638da5cb5b14610571576101f9565b8063395093511161018557806352f7c9881161015457806352f7c9881461044857806359927044146104715780636ddd17131461049c57806370a08231146104c7576101f9565b8063395093511461037857806347062402146103b557806349bd5a5e146103e05780634fbee1931461040b576101f9565b806318160ddd116101c157806318160ddd146102ba57806323b872dd146102e55780632b14ca5614610322578063313ce5671461034d576101f9565b806306fdde03146101fe578063095ea7b314610229578063147c9f6d146102665780631694505e1461028f576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107f5565b60405161022091906125d3565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b919061268e565b610887565b60405161025d91906126e9565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190612742565b6108a5565b005b34801561029b57600080fd5b506102a46109e9565b6040516102b191906127f4565b60405180910390f35b3480156102c657600080fd5b506102cf610a0f565b6040516102dc919061281e565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190612839565b610a19565b60405161031991906126e9565b60405180910390f35b34801561032e57600080fd5b50610337610b11565b604051610344919061281e565b60405180910390f35b34801561035957600080fd5b50610362610b17565b60405161036f91906128a8565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a919061268e565b610b20565b6040516103ac91906126e9565b60405180910390f35b3480156103c157600080fd5b506103ca610bcc565b6040516103d7919061281e565b60405180910390f35b3480156103ec57600080fd5b506103f5610bd2565b60405161040291906128d2565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d91906128ed565b610bf6565b60405161043f91906126e9565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a919061291a565b610c4c565b005b34801561047d57600080fd5b50610486610d2b565b6040516104939190612969565b60405180910390f35b3480156104a857600080fd5b506104b1610d51565b6040516104be91906126e9565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e991906128ed565b610d64565b6040516104fb919061281e565b60405180910390f35b34801561051057600080fd5b50610519610dac565b005b34801561052757600080fd5b50610530610e34565b60405161053d9190612969565b60405180910390f35b34801561055257600080fd5b5061055b610e5a565b604051610568919061281e565b60405180910390f35b34801561057d57600080fd5b50610586610e60565b60405161059391906128d2565b60405180910390f35b3480156105a857600080fd5b506105b1610e8a565b6040516105be9190612969565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e99190612984565b610eb0565b005b3480156105fc57600080fd5b50610605610f95565b60405161061291906125d3565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d919061268e565b611027565b60405161064f91906126e9565b60405180910390f35b34801561066457600080fd5b5061067f600480360381019061067a919061268e565b611112565b60405161068c91906126e9565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190612984565b611130565b005b3480156106ca57600080fd5b506106e560048036038101906106e091906129dd565b6111b6565b005b3480156106f357600080fd5b5061070e60048036038101906107099190612a1d565b61136d565b60405161071b919061281e565b60405180910390f35b34801561073057600080fd5b5061074b60048036038101906107469190612a5d565b6113f4565b005b34801561075957600080fd5b506107626114c4565b60405161076f919061281e565b60405180910390f35b34801561078457600080fd5b5061078d6114ca565b60405161079a919061281e565b60405180910390f35b3480156107af57600080fd5b506107ca60048036038101906107c59190612984565b6114d0565b005b3480156107d857600080fd5b506107f360048036038101906107ee91906128ed565b6115b5565b005b60606003805461080490612ab9565b80601f016020809104026020016040519081016040528092919081815260200182805461083090612ab9565b801561087d5780601f106108525761010080835404028352916020019161087d565b820191906000526020600020905b81548152906001019060200180831161086057829003601f168201915b5050505050905090565b600061089b6108946116ac565b84846116b4565b6001905092915050565b6108ad6116ac565b73ffffffffffffffffffffffffffffffffffffffff166108cb610e60565b73ffffffffffffffffffffffffffffffffffffffff1614610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091890612b36565b60405180910390fd5b82600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610a2684848461187d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a716116ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae890612bc8565b60405180910390fd5b610b0585610afd6116ac565b8584036116b4565b60019150509392505050565b60085481565b60006012905090565b6000610bc2610b2d6116ac565b848460016000610b3b6116ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bbd9190612c17565b6116b4565b6001905092915050565b60075481565b7f0000000000000000000000008a36f1fed94e02950ef0c57d933cfd8e249b723281565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c546116ac565b73ffffffffffffffffffffffffffffffffffffffff16610c72610e60565b73ffffffffffffffffffffffffffffffffffffffff1614610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90612b36565b60405180910390fd5b600a8211158015610cda5750600a8111155b610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090612cb9565b60405180910390fd5b81600781905550806008819055505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610db46116ac565b73ffffffffffffffffffffffffffffffffffffffff16610dd2610e60565b73ffffffffffffffffffffffffffffffffffffffff1614610e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1f90612b36565b60405180910390fd5b610e326000611d4d565b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610eb86116ac565b73ffffffffffffffffffffffffffffffffffffffff16610ed6610e60565b73ffffffffffffffffffffffffffffffffffffffff1614610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2390612b36565b60405180910390fd5b80600d81905550610f4e6064610f40610a0f565b611e1390919063ffffffff16565b600d541015610f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8990612d25565b60405180910390fd5b50565b606060048054610fa490612ab9565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd090612ab9565b801561101d5780601f10610ff25761010080835404028352916020019161101d565b820191906000526020600020905b81548152906001019060200180831161100057829003601f168201915b5050505050905090565b600080600160006110366116ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90612db7565b60405180910390fd5b6111076110fe6116ac565b858584036116b4565b600191505092915050565b600061112661111f6116ac565b848461187d565b6001905092915050565b6111386116ac565b73ffffffffffffffffffffffffffffffffffffffff16611156610e60565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a390612b36565b60405180910390fd5b80600e8190555050565b6111be6116ac565b73ffffffffffffffffffffffffffffffffffffffff166111dc610e60565b73ffffffffffffffffffffffffffffffffffffffff1614611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122990612b36565b60405180910390fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90612e49565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161136191906126e9565b60405180910390a25050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6113fc6116ac565b73ffffffffffffffffffffffffffffffffffffffff1661141a610e60565b73ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790612b36565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a12816040516114b991906126e9565b60405180910390a150565b600e5481565b600d5481565b6114d86116ac565b73ffffffffffffffffffffffffffffffffffffffff166114f6610e60565b73ffffffffffffffffffffffffffffffffffffffff161461154c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154390612b36565b60405180910390fd5b80600c8190555061156e60c8611560610a0f565b611e1390919063ffffffff16565b600c5410156115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990612d25565b60405180910390fd5b50565b6115bd6116ac565b73ffffffffffffffffffffffffffffffffffffffff166115db610e60565b73ffffffffffffffffffffffffffffffffffffffff1614611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890612b36565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169790612edb565b60405180910390fd5b6116a981611d4d565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a90612f6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178990612fff565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611870919061281e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e390613091565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290613123565b60405180910390fd5b600081036119745761196f83836000611e29565b611d48565b6000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611a175750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905080611a6457600c54821115611a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5a906131b5565b60405180910390fd5b5b7f0000000000000000000000008a36f1fed94e02950ef0c57d933cfd8e249b723273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611abd575080155b15611b21576000611acd84610d64565b9050600d548382611ade9190612c17565b1115611b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1690613247565b60405180910390fd5b505b6000611b2c30610d64565b90506000600e548210159050808015611b525750600660149054906101000a900460ff16155b8015611ba957507f0000000000000000000000008a36f1fed94e02950ef0c57d933cfd8e249b723273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015611bc15750600660159054906101000a900460ff165b8015611c005750611bd0610e60565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15611c1457600e549150611c13826120a8565b5b82611d395760007f0000000000000000000000008a36f1fed94e02950ef0c57d933cfd8e249b723273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603611c9957611c966064611c886007548861250490919063ffffffff16565b611e1390919063ffffffff16565b90505b7f0000000000000000000000008a36f1fed94e02950ef0c57d933cfd8e249b723273ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603611d1757611d146064611d066008548861250490919063ffffffff16565b611e1390919063ffffffff16565b90505b611d2a818661251a90919063ffffffff16565b9450611d37873083611e29565b505b611d44868686611e29565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611e219190613296565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f90613091565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efe90613123565b60405180910390fd5b611f12838383612530565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8f90613339565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461202b9190612c17565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161208f919061281e565b60405180910390a36120a2848484612535565b50505050565b6001600660146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156120e0576120df613359565b5b60405190808252806020026020018201604052801561210e5781602001602082028036833780820191505090505b509050308160008151811061212657612125613388565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f191906133cc565b8160018151811061220557612204613388565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161226c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661136d565b10156122a2576122a130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196116b4565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016123069594939291906134f2565b600060405180830381600087803b15801561232057600080fd5b505af1158015612334573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61239b606461238d60324761250490919063ffffffff16565b611e1390919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156123c6573d6000803e3d6000fd5b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61242a606461241c601e4761250490919063ffffffff16565b611e1390919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015612455573d6000803e3d6000fd5b50600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6124b960646124ab60144761250490919063ffffffff16565b611e1390919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156124e4573d6000803e3d6000fd5b50506000600660146101000a81548160ff02191690831515021790555050565b60008183612512919061354c565b905092915050565b6000818361252891906135a6565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612574578082015181840152602081019050612559565b83811115612583576000848401525b50505050565b6000601f19601f8301169050919050565b60006125a58261253a565b6125af8185612545565b93506125bf818560208601612556565b6125c881612589565b840191505092915050565b600060208201905081810360008301526125ed818461259a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612625826125fa565b9050919050565b6126358161261a565b811461264057600080fd5b50565b6000813590506126528161262c565b92915050565b6000819050919050565b61266b81612658565b811461267657600080fd5b50565b60008135905061268881612662565b92915050565b600080604083850312156126a5576126a46125f5565b5b60006126b385828601612643565b92505060206126c485828601612679565b9150509250929050565b60008115159050919050565b6126e3816126ce565b82525050565b60006020820190506126fe60008301846126da565b92915050565b600061270f826125fa565b9050919050565b61271f81612704565b811461272a57600080fd5b50565b60008135905061273c81612716565b92915050565b60008060006060848603121561275b5761275a6125f5565b5b60006127698682870161272d565b935050602061277a8682870161272d565b925050604061278b8682870161272d565b9150509250925092565b6000819050919050565b60006127ba6127b56127b0846125fa565b612795565b6125fa565b9050919050565b60006127cc8261279f565b9050919050565b60006127de826127c1565b9050919050565b6127ee816127d3565b82525050565b600060208201905061280960008301846127e5565b92915050565b61281881612658565b82525050565b6000602082019050612833600083018461280f565b92915050565b600080600060608486031215612852576128516125f5565b5b600061286086828701612643565b935050602061287186828701612643565b925050604061288286828701612679565b9150509250925092565b600060ff82169050919050565b6128a28161288c565b82525050565b60006020820190506128bd6000830184612899565b92915050565b6128cc8161261a565b82525050565b60006020820190506128e760008301846128c3565b92915050565b600060208284031215612903576129026125f5565b5b600061291184828501612643565b91505092915050565b60008060408385031215612931576129306125f5565b5b600061293f85828601612679565b925050602061295085828601612679565b9150509250929050565b61296381612704565b82525050565b600060208201905061297e600083018461295a565b92915050565b60006020828403121561299a576129996125f5565b5b60006129a884828501612679565b91505092915050565b6129ba816126ce565b81146129c557600080fd5b50565b6000813590506129d7816129b1565b92915050565b600080604083850312156129f4576129f36125f5565b5b6000612a0285828601612643565b9250506020612a13858286016129c8565b9150509250929050565b60008060408385031215612a3457612a336125f5565b5b6000612a4285828601612643565b9250506020612a5385828601612643565b9150509250929050565b600060208284031215612a7357612a726125f5565b5b6000612a81848285016129c8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ad157607f821691505b602082108103612ae457612ae3612a8a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612b20602083612545565b9150612b2b82612aea565b602082019050919050565b60006020820190508181036000830152612b4f81612b13565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612bb2602883612545565b9150612bbd82612b56565b604082019050919050565b60006020820190508181036000830152612be181612ba5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c2282612658565b9150612c2d83612658565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c6257612c61612be8565b5b828201905092915050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000612ca3600c83612545565b9150612cae82612c6d565b602082019050919050565b60006020820190508181036000830152612cd281612c96565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000612d0f600d83612545565b9150612d1a82612cd9565b602082019050919050565b60006020820190508181036000830152612d3e81612d02565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612da1602583612545565b9150612dac82612d45565b604082019050919050565b60006020820190508181036000830152612dd081612d94565b9050919050565b7f524549433a204163636f756e7420697320616c7265616479207468652076616c60008201527f7565206f6620276578636c756465642700000000000000000000000000000000602082015250565b6000612e33603083612545565b9150612e3e82612dd7565b604082019050919050565b60006020820190508181036000830152612e6281612e26565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ec5602683612545565b9150612ed082612e69565b604082019050919050565b60006020820190508181036000830152612ef481612eb8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612f57602483612545565b9150612f6282612efb565b604082019050919050565b60006020820190508181036000830152612f8681612f4a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fe9602283612545565b9150612ff482612f8d565b604082019050919050565b6000602082019050818103600083015261301881612fdc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061307b602583612545565b91506130868261301f565b604082019050919050565b600060208201905081810360008301526130aa8161306e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061310d602383612545565b9150613118826130b1565b604082019050919050565b6000602082019050818103600083015261313c81613100565b9050919050565b7f7472616e73616374696f6e20616d6f756e74206d757374206265206c6573732060008201527f7468616e20657175616c20746f204d6178547820616d6f756e74000000000000602082015250565b600061319f603a83612545565b91506131aa82613143565b604082019050919050565b600060208201905081810360008301526131ce81613192565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613231602483612545565b915061323c826131d5565b604082019050919050565b6000602082019050818103600083015261326081613224565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006132a182612658565b91506132ac83612658565b9250826132bc576132bb613267565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613323602683612545565b915061332e826132c7565b604082019050919050565b6000602082019050818103600083015261335281613316565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506133c68161262c565b92915050565b6000602082840312156133e2576133e16125f5565b5b60006133f0848285016133b7565b91505092915050565b6000819050919050565b600061341e613419613414846133f9565b612795565b612658565b9050919050565b61342e81613403565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6134698161261a565b82525050565b600061347b8383613460565b60208301905092915050565b6000602082019050919050565b600061349f82613434565b6134a9818561343f565b93506134b483613450565b8060005b838110156134e55781516134cc888261346f565b97506134d783613487565b9250506001810190506134b8565b5085935050505092915050565b600060a082019050613507600083018861280f565b6135146020830187613425565b81810360408301526135268186613494565b905061353560608301856128c3565b613542608083018461280f565b9695505050505050565b600061355782612658565b915061356283612658565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561359b5761359a612be8565b5b828202905092915050565b60006135b182612658565b91506135bc83612658565b9250828210156135cf576135ce612be8565b5b82820390509291505056fea2646970667358221220bbd192b745affa1ca131cbbad7186cf36a021661ded90f1258c9027b24fe923e64736f6c634300080e0033
Deployed Bytecode Sourcemap
39840:6450:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5711:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7878:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45373:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39913:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6831:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8529:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40105:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6673:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9430:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40073:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39961:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45029:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45162:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40240:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40034:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7002:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17233:94;;;;;;;;;;;;;:::i;:::-;;40140:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40435:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16582:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40335;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45909:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5930:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10148:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7342:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45785:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44721:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7580:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46100:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40545:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40489:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45601:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17482:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5711:100;5765:13;5798:5;5791:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5711:100;:::o;7878:169::-;7961:4;7978:39;7987:12;:10;:12::i;:::-;8001:7;8010:6;7978:8;:39::i;:::-;8035:4;8028:11;;7878:169;;;;:::o;45373:216::-;16813:12;:10;:12::i;:::-;16802:23;;:7;:5;:7::i;:::-;:23;;;16794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45515:10:::1;45497:15;;:28;;;;;;;;;;;;;;;;;;45549:5;45536:10;;:18;;;;;;;;;;;;;;;;;;45577:4;45565:9;;:16;;;;;;;;;;;;;;;;;;45373:216:::0;;;:::o;39913:41::-;;;;;;;;;;;;;:::o;6831:108::-;6892:7;6919:12;;6912:19;;6831:108;:::o;8529:492::-;8669:4;8686:36;8696:6;8704:9;8715:6;8686:9;:36::i;:::-;8735:24;8762:11;:19;8774:6;8762:19;;;;;;;;;;;;;;;:33;8782:12;:10;:12::i;:::-;8762:33;;;;;;;;;;;;;;;;8735:60;;8834:6;8814:16;:26;;8806:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8921:57;8930:6;8938:12;:10;:12::i;:::-;8971:6;8952:16;:25;8921:8;:57::i;:::-;9009:4;9002:11;;;8529:492;;;;;:::o;40105:26::-;;;;:::o;6673:93::-;6731:5;6756:2;6749:9;;6673:93;:::o;9430:215::-;9518:4;9535:80;9544:12;:10;:12::i;:::-;9558:7;9604:10;9567:11;:25;9579:12;:10;:12::i;:::-;9567:25;;;;;;;;;;;;;;;:34;9593:7;9567:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9535:8;:80::i;:::-;9633:4;9626:11;;9430:215;;;;:::o;40073:25::-;;;;:::o;39961:38::-;;;:::o;45029:125::-;45094:4;45118:19;:28;45138:7;45118:28;;;;;;;;;;;;;;;;;;;;;;;;;45111:35;;45029:125;;;:::o;45162:199::-;16813:12;:10;:12::i;:::-;16802:23;;:7;:5;:7::i;:::-;:23;;;16794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45260:2:::1;45249:7;:13;;:31;;;;;45278:2;45266:8;:14;;45249:31;45241:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;45317:7;45308:6;:16;;;;45345:8;45335:7;:18;;;;45162:199:::0;;:::o;40240:88::-;;;;;;;;;;;;;:::o;40034:30::-;;;;;;;;;;;;;:::o;7002:127::-;7076:7;7103:9;:18;7113:7;7103:18;;;;;;;;;;;;;;;;7096:25;;7002:127;;;:::o;17233:94::-;16813:12;:10;:12::i;:::-;16802:23;;:7;:5;:7::i;:::-;:23;;;16794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17298:21:::1;17316:1;17298:9;:21::i;:::-;17233:94::o:0;40140:93::-;;;;;;;;;;;;;:::o;40435:47::-;;;;:::o;16582:87::-;16628:7;16655:6;;;;;;;;;;;16648:13;;16582:87;:::o;40335:::-;;;;;;;;;;;;;:::o;45909:183::-;16813:12;:10;:12::i;:::-;16802:23;;:7;:5;:7::i;:::-;:23;;;16794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45999:8:::1;45982:14;:25;;;;46044:22;46062:3;46044:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;46026:14;;:40;;46018:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45909:183:::0;:::o;5930:104::-;5986:13;6019:7;6012:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5930:104;:::o;10148:413::-;10241:4;10258:24;10285:11;:25;10297:12;:10;:12::i;:::-;10285:25;;;;;;;;;;;;;;;:34;10311:7;10285:34;;;;;;;;;;;;;;;;10258:61;;10358:15;10338:16;:35;;10330:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10451:67;10460:12;:10;:12::i;:::-;10474:7;10502:15;10483:16;:34;10451:8;:67::i;:::-;10549:4;10542:11;;;10148:413;;;;:::o;7342:175::-;7428:4;7445:42;7455:12;:10;:12::i;:::-;7469:9;7480:6;7445:9;:42::i;:::-;7505:4;7498:11;;7342:175;;;;:::o;45785:116::-;16813:12;:10;:12::i;:::-;16802:23;;:7;:5;:7::i;:::-;:23;;;16794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45884:9:::1;45863:18;:30;;;;45785:116:::0;:::o;44721:296::-;16813:12;:10;:12::i;:::-;16802:23;;:7;:5;:7::i;:::-;:23;;;16794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44846:8:::1;44814:40;;:19;:28;44834:7;44814:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;44806:101:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;44949:8;44918:19;:28;44938:7;44918:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;44991:7;44975:34;;;45000:8;44975:34;;;;;;:::i;:::-;;;;;;;;44721:296:::0;;:::o;7580:151::-;7669:7;7696:11;:18;7708:5;7696:18;;;;;;;;;;;;;;;:27;7715:7;7696:27;;;;;;;;;;;;;;;;7689:34;;7580:151;;;;:::o;46100:141::-;16813:12;:10;:12::i;:::-;16802:23;;:7;:5;:7::i;:::-;:23;;;16794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46181:8:::1;46167:11;;:22;;;;;;;;;;;;;;;;;;46205:28;46224:8;46205:28;;;;;;:::i;:::-;;;;;;;;46100:141:::0;:::o;40545:51::-;;;;:::o;40489:49::-;;;;:::o;45601:176::-;16813:12;:10;:12::i;:::-;16802:23;;:7;:5;:7::i;:::-;:23;;;16794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45686:9:::1;45672:11;:23;;;;45729:22;45747:3;45729:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;45714:11;;:37;;45706:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;45601:176:::0;:::o;17482:192::-;16813:12;:10;:12::i;:::-;16802:23;;:7;:5;:7::i;:::-;:23;;;16794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17591:1:::1;17571:22;;:8;:22;;::::0;17563:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17647:19;17657:8;17647:9;:19::i;:::-;17482:192:::0;:::o;237:98::-;290:7;317:10;310:17;;237:98;:::o;13832:380::-;13985:1;13968:19;;:5;:19;;;13960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14066:1;14047:21;;:7;:21;;;14039:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14150:6;14120:11;:18;14132:5;14120:18;;;;;;;;;;;;;;;:27;14139:7;14120:27;;;;;;;;;;;;;;;:36;;;;14188:7;14172:32;;14181:5;14172:32;;;14197:6;14172:32;;;;;;:::i;:::-;;;;;;;;13832:380;;;:::o;41901:1884::-;42049:1;42033:18;;:4;:18;;;42025:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42126:1;42112:16;;:2;:16;;;42104:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42194:1;42184:6;:11;42181:92;;42212:28;42228:4;42234:2;42238:1;42212:15;:28::i;:::-;42255:7;;42181:92;42285:20;42308:19;:25;42328:4;42308:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42337:19;:23;42357:2;42337:23;;;;;;;;;;;;;;;;;;;;;;;;;42308:52;42285:75;;42385:15;42381:140;;42435:11;;42425:6;:21;;42417:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;42381:140;42545:13;42537:21;;:4;:21;;;:41;;;;;42563:15;42562:16;42537:41;42533:234;;;42593:32;42628:13;42638:2;42628:9;:13::i;:::-;42593:48;;42701:14;;42691:6;42664:24;:33;;;;:::i;:::-;:51;;42656:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;42580:187;42533:234;42779:28;42810:24;42828:4;42810:9;:24::i;:::-;42779:55;;42855:24;42906:18;;42882:20;:42;;42855:69;;42961:19;:43;;;;;42998:6;;;;;;;;;;;42997:7;42961:43;:79;;;;;43027:13;43021:19;;:2;:19;;;42961:79;:108;;;;;43058:11;;;;;;;;;;;42961:108;:140;;;;;43094:7;:5;:7::i;:::-;43086:15;;:4;:15;;;;42961:140;42944:290;;;43151:18;;43128:41;;43184:38;43201:20;43184:16;:38::i;:::-;42944:290;43335:15;43331:399;;43367:12;43419:13;43411:21;;:4;:21;;;43408:95;;43460:27;43483:3;43460:18;43471:6;;43460;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;43453:34;;43408:95;43528:13;43522:19;;:2;:19;;;43519:94;;43569:28;43593:3;43569:19;43580:7;;43569:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;43562:35;;43519:94;43644:16;43655:4;43644:6;:10;;:16;;;;:::i;:::-;43635:25;;43675:42;43691:4;43705;43712;43675:15;:42::i;:::-;43352:378;43331:399;43742:33;43758:4;43764:2;43768:6;43742:15;:33::i;:::-;42014:1771;;;41901:1884;;;;:::o;17682:173::-;17738:16;17757:6;;;;;;;;;;;17738:25;;17783:8;17774:6;;:17;;;;;;;;;;;;;;;;;;17838:8;17807:40;;17828:8;17807:40;;;;;;;;;;;;17727:128;17682:173;:::o;28873:98::-;28931:7;28962:1;28958;:5;;;;:::i;:::-;28951:12;;28873:98;;;;:::o;11051:733::-;11209:1;11191:20;;:6;:20;;;11183:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11293:1;11272:23;;:9;:23;;;11264:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11348:47;11369:6;11377:9;11388:6;11348:20;:47::i;:::-;11408:21;11432:9;:17;11442:6;11432:17;;;;;;;;;;;;;;;;11408:41;;11485:6;11468:13;:23;;11460:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11606:6;11590:13;:22;11570:9;:17;11580:6;11570:17;;;;;;;;;;;;;;;:42;;;;11658:6;11634:9;:20;11644:9;11634:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11699:9;11682:35;;11691:6;11682:35;;;11710:6;11682:35;;;;;;:::i;:::-;;;;;;;;11730:46;11750:6;11758:9;11769:6;11730:19;:46::i;:::-;11172:612;11051:733;;;:::o;43793:920::-;40646:4;40637:6;;:13;;;;;;;;;;;;;;;;;;43931:21:::1;43969:1;43955:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43931:40;;44000:4;43982;43987:1;43982:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;44026:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44016:4;44021:1;44016:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;44117:11;44064:50;44082:4;44097:15;;;;;;;;;;;44064:9;:50::i;:::-;:64;44061:156;;;44143:62;44160:4;44175:15;;;;;;;;;;;44202:1;44193:11;44143:8;:62::i;:::-;44061:156;44255:15;;;;;;;;;;;:66;;;44336:11;44362:1;44406:4;44433;44453:15;44255:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44492:15;;;;;;;;;;;:24;;:64;44517:38;44551:3;44517:29;44543:2;44517:21;:25;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;44492:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44567:10;;;;;;;;;;;:19;;:59;44587:38;44621:3;44587:29;44613:2;44587:21;:25;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;44567:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44637:9;;;;;;;;;;;:18;;:58;44656:38;44690:3;44656:29;44682:2;44656:21;:25;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;44637:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43860:853;40682:5:::0;40673:6;;:14;;;;;;;;;;;;;;;;;;43793:920;:::o;28474:98::-;28532:7;28563:1;28559;:5;;;;:::i;:::-;28552:12;;28474:98;;;;:::o;28117:::-;28175:7;28206:1;28202;:5;;;;:::i;:::-;28195:12;;28117:98;;;;:::o;14812:125::-;;;;:::o;15541:124::-;;;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:104::-;3539:7;3568:24;3586:5;3568:24;:::i;:::-;3557:35;;3494:104;;;:::o;3604:138::-;3685:32;3711:5;3685:32;:::i;:::-;3678:5;3675:43;3665:71;;3732:1;3729;3722:12;3665:71;3604:138;:::o;3748:155::-;3802:5;3840:6;3827:20;3818:29;;3856:41;3891:5;3856:41;:::i;:::-;3748:155;;;;:::o;3909:667::-;4010:6;4018;4026;4075:2;4063:9;4054:7;4050:23;4046:32;4043:119;;;4081:79;;:::i;:::-;4043:119;4201:1;4226:61;4279:7;4270:6;4259:9;4255:22;4226:61;:::i;:::-;4216:71;;4172:125;4336:2;4362:61;4415:7;4406:6;4395:9;4391:22;4362:61;:::i;:::-;4352:71;;4307:126;4472:2;4498:61;4551:7;4542:6;4531:9;4527:22;4498:61;:::i;:::-;4488:71;;4443:126;3909:667;;;;;:::o;4582:60::-;4610:3;4631:5;4624:12;;4582:60;;;:::o;4648:142::-;4698:9;4731:53;4749:34;4758:24;4776:5;4758:24;:::i;:::-;4749:34;:::i;:::-;4731:53;:::i;:::-;4718:66;;4648:142;;;:::o;4796:126::-;4846:9;4879:37;4910:5;4879:37;:::i;:::-;4866:50;;4796:126;;;:::o;4928:153::-;5005:9;5038:37;5069:5;5038:37;:::i;:::-;5025:50;;4928:153;;;:::o;5087:185::-;5201:64;5259:5;5201:64;:::i;:::-;5196:3;5189:77;5087:185;;:::o;5278:276::-;5398:4;5436:2;5425:9;5421:18;5413:26;;5449:98;5544:1;5533:9;5529:17;5520:6;5449:98;:::i;:::-;5278:276;;;;:::o;5560:118::-;5647:24;5665:5;5647:24;:::i;:::-;5642:3;5635:37;5560:118;;:::o;5684:222::-;5777:4;5815:2;5804:9;5800:18;5792:26;;5828:71;5896:1;5885:9;5881:17;5872:6;5828:71;:::i;:::-;5684:222;;;;:::o;5912:619::-;5989:6;5997;6005;6054:2;6042:9;6033:7;6029:23;6025:32;6022:119;;;6060:79;;:::i;:::-;6022:119;6180:1;6205:53;6250:7;6241:6;6230:9;6226:22;6205:53;:::i;:::-;6195:63;;6151:117;6307:2;6333:53;6378:7;6369:6;6358:9;6354:22;6333:53;:::i;:::-;6323:63;;6278:118;6435:2;6461:53;6506:7;6497:6;6486:9;6482:22;6461:53;:::i;:::-;6451:63;;6406:118;5912:619;;;;;:::o;6537:86::-;6572:7;6612:4;6605:5;6601:16;6590:27;;6537:86;;;:::o;6629:112::-;6712:22;6728:5;6712:22;:::i;:::-;6707:3;6700:35;6629:112;;:::o;6747:214::-;6836:4;6874:2;6863:9;6859:18;6851:26;;6887:67;6951:1;6940:9;6936:17;6927:6;6887:67;:::i;:::-;6747:214;;;;:::o;6967:118::-;7054:24;7072:5;7054:24;:::i;:::-;7049:3;7042:37;6967:118;;:::o;7091:222::-;7184:4;7222:2;7211:9;7207:18;7199:26;;7235:71;7303:1;7292:9;7288:17;7279:6;7235:71;:::i;:::-;7091:222;;;;:::o;7319:329::-;7378:6;7427:2;7415:9;7406:7;7402:23;7398:32;7395:119;;;7433:79;;:::i;:::-;7395:119;7553:1;7578:53;7623:7;7614:6;7603:9;7599:22;7578:53;:::i;:::-;7568:63;;7524:117;7319:329;;;;:::o;7654:474::-;7722:6;7730;7779:2;7767:9;7758:7;7754:23;7750:32;7747:119;;;7785:79;;:::i;:::-;7747:119;7905:1;7930:53;7975:7;7966:6;7955:9;7951:22;7930:53;:::i;:::-;7920:63;;7876:117;8032:2;8058:53;8103:7;8094:6;8083:9;8079:22;8058:53;:::i;:::-;8048:63;;8003:118;7654:474;;;;;:::o;8134:142::-;8237:32;8263:5;8237:32;:::i;:::-;8232:3;8225:45;8134:142;;:::o;8282:254::-;8391:4;8429:2;8418:9;8414:18;8406:26;;8442:87;8526:1;8515:9;8511:17;8502:6;8442:87;:::i;:::-;8282:254;;;;:::o;8542:329::-;8601:6;8650:2;8638:9;8629:7;8625:23;8621:32;8618:119;;;8656:79;;:::i;:::-;8618:119;8776:1;8801:53;8846:7;8837:6;8826:9;8822:22;8801:53;:::i;:::-;8791:63;;8747:117;8542:329;;;;:::o;8877:116::-;8947:21;8962:5;8947:21;:::i;:::-;8940:5;8937:32;8927:60;;8983:1;8980;8973:12;8927:60;8877:116;:::o;8999:133::-;9042:5;9080:6;9067:20;9058:29;;9096:30;9120:5;9096:30;:::i;:::-;8999:133;;;;:::o;9138:468::-;9203:6;9211;9260:2;9248:9;9239:7;9235:23;9231:32;9228:119;;;9266:79;;:::i;:::-;9228:119;9386:1;9411:53;9456:7;9447:6;9436:9;9432:22;9411:53;:::i;:::-;9401:63;;9357:117;9513:2;9539:50;9581:7;9572:6;9561:9;9557:22;9539:50;:::i;:::-;9529:60;;9484:115;9138:468;;;;;:::o;9612:474::-;9680:6;9688;9737:2;9725:9;9716:7;9712:23;9708:32;9705:119;;;9743:79;;:::i;:::-;9705:119;9863:1;9888:53;9933:7;9924:6;9913:9;9909:22;9888:53;:::i;:::-;9878:63;;9834:117;9990:2;10016:53;10061:7;10052:6;10041:9;10037:22;10016:53;:::i;:::-;10006:63;;9961:118;9612:474;;;;;:::o;10092:323::-;10148:6;10197:2;10185:9;10176:7;10172:23;10168:32;10165:119;;;10203:79;;:::i;:::-;10165:119;10323:1;10348:50;10390:7;10381:6;10370:9;10366:22;10348:50;:::i;:::-;10338:60;;10294:114;10092:323;;;;:::o;10421:180::-;10469:77;10466:1;10459:88;10566:4;10563:1;10556:15;10590:4;10587:1;10580:15;10607:320;10651:6;10688:1;10682:4;10678:12;10668:22;;10735:1;10729:4;10725:12;10756:18;10746:81;;10812:4;10804:6;10800:17;10790:27;;10746:81;10874:2;10866:6;10863:14;10843:18;10840:38;10837:84;;10893:18;;:::i;:::-;10837:84;10658:269;10607:320;;;:::o;10933:182::-;11073:34;11069:1;11061:6;11057:14;11050:58;10933:182;:::o;11121:366::-;11263:3;11284:67;11348:2;11343:3;11284:67;:::i;:::-;11277:74;;11360:93;11449:3;11360:93;:::i;:::-;11478:2;11473:3;11469:12;11462:19;;11121:366;;;:::o;11493:419::-;11659:4;11697:2;11686:9;11682:18;11674:26;;11746:9;11740:4;11736:20;11732:1;11721:9;11717:17;11710:47;11774:131;11900:4;11774:131;:::i;:::-;11766:139;;11493:419;;;:::o;11918:227::-;12058:34;12054:1;12046:6;12042:14;12035:58;12127:10;12122:2;12114:6;12110:15;12103:35;11918:227;:::o;12151:366::-;12293:3;12314:67;12378:2;12373:3;12314:67;:::i;:::-;12307:74;;12390:93;12479:3;12390:93;:::i;:::-;12508:2;12503:3;12499:12;12492:19;;12151:366;;;:::o;12523:419::-;12689:4;12727:2;12716:9;12712:18;12704:26;;12776:9;12770:4;12766:20;12762:1;12751:9;12747:17;12740:47;12804:131;12930:4;12804:131;:::i;:::-;12796:139;;12523:419;;;:::o;12948:180::-;12996:77;12993:1;12986:88;13093:4;13090:1;13083:15;13117:4;13114:1;13107:15;13134:305;13174:3;13193:20;13211:1;13193:20;:::i;:::-;13188:25;;13227:20;13245:1;13227:20;:::i;:::-;13222:25;;13381:1;13313:66;13309:74;13306:1;13303:81;13300:107;;;13387:18;;:::i;:::-;13300:107;13431:1;13428;13424:9;13417:16;;13134:305;;;;:::o;13445:162::-;13585:14;13581:1;13573:6;13569:14;13562:38;13445:162;:::o;13613:366::-;13755:3;13776:67;13840:2;13835:3;13776:67;:::i;:::-;13769:74;;13852:93;13941:3;13852:93;:::i;:::-;13970:2;13965:3;13961:12;13954:19;;13613:366;;;:::o;13985:419::-;14151:4;14189:2;14178:9;14174:18;14166:26;;14238:9;14232:4;14228:20;14224:1;14213:9;14209:17;14202:47;14266:131;14392:4;14266:131;:::i;:::-;14258:139;;13985:419;;;:::o;14410:163::-;14550:15;14546:1;14538:6;14534:14;14527:39;14410:163;:::o;14579:366::-;14721:3;14742:67;14806:2;14801:3;14742:67;:::i;:::-;14735:74;;14818:93;14907:3;14818:93;:::i;:::-;14936:2;14931:3;14927:12;14920:19;;14579:366;;;:::o;14951:419::-;15117:4;15155:2;15144:9;15140:18;15132:26;;15204:9;15198:4;15194:20;15190:1;15179:9;15175:17;15168:47;15232:131;15358:4;15232:131;:::i;:::-;15224:139;;14951:419;;;:::o;15376:224::-;15516:34;15512:1;15504:6;15500:14;15493:58;15585:7;15580:2;15572:6;15568:15;15561:32;15376:224;:::o;15606:366::-;15748:3;15769:67;15833:2;15828:3;15769:67;:::i;:::-;15762:74;;15845:93;15934:3;15845:93;:::i;:::-;15963:2;15958:3;15954:12;15947:19;;15606:366;;;:::o;15978:419::-;16144:4;16182:2;16171:9;16167:18;16159:26;;16231:9;16225:4;16221:20;16217:1;16206:9;16202:17;16195:47;16259:131;16385:4;16259:131;:::i;:::-;16251:139;;15978:419;;;:::o;16403:235::-;16543:34;16539:1;16531:6;16527:14;16520:58;16612:18;16607:2;16599:6;16595:15;16588:43;16403:235;:::o;16644:366::-;16786:3;16807:67;16871:2;16866:3;16807:67;:::i;:::-;16800:74;;16883:93;16972:3;16883:93;:::i;:::-;17001:2;16996:3;16992:12;16985:19;;16644:366;;;:::o;17016:419::-;17182:4;17220:2;17209:9;17205:18;17197:26;;17269:9;17263:4;17259:20;17255:1;17244:9;17240:17;17233:47;17297:131;17423:4;17297:131;:::i;:::-;17289:139;;17016:419;;;:::o;17441:225::-;17581:34;17577:1;17569:6;17565:14;17558:58;17650:8;17645:2;17637:6;17633:15;17626:33;17441:225;:::o;17672:366::-;17814:3;17835:67;17899:2;17894:3;17835:67;:::i;:::-;17828:74;;17911:93;18000:3;17911:93;:::i;:::-;18029:2;18024:3;18020:12;18013:19;;17672:366;;;:::o;18044:419::-;18210:4;18248:2;18237:9;18233:18;18225:26;;18297:9;18291:4;18287:20;18283:1;18272:9;18268:17;18261:47;18325:131;18451:4;18325:131;:::i;:::-;18317:139;;18044:419;;;:::o;18469:223::-;18609:34;18605:1;18597:6;18593:14;18586:58;18678:6;18673:2;18665:6;18661:15;18654:31;18469:223;:::o;18698:366::-;18840:3;18861:67;18925:2;18920:3;18861:67;:::i;:::-;18854:74;;18937:93;19026:3;18937:93;:::i;:::-;19055:2;19050:3;19046:12;19039:19;;18698:366;;;:::o;19070:419::-;19236:4;19274:2;19263:9;19259:18;19251:26;;19323:9;19317:4;19313:20;19309:1;19298:9;19294:17;19287:47;19351:131;19477:4;19351:131;:::i;:::-;19343:139;;19070:419;;;:::o;19495:221::-;19635:34;19631:1;19623:6;19619:14;19612:58;19704:4;19699:2;19691:6;19687:15;19680:29;19495:221;:::o;19722:366::-;19864:3;19885:67;19949:2;19944:3;19885:67;:::i;:::-;19878:74;;19961:93;20050:3;19961:93;:::i;:::-;20079:2;20074:3;20070:12;20063:19;;19722:366;;;:::o;20094:419::-;20260:4;20298:2;20287:9;20283:18;20275:26;;20347:9;20341:4;20337:20;20333:1;20322:9;20318:17;20311:47;20375:131;20501:4;20375:131;:::i;:::-;20367:139;;20094:419;;;:::o;20519:224::-;20659:34;20655:1;20647:6;20643:14;20636:58;20728:7;20723:2;20715:6;20711:15;20704:32;20519:224;:::o;20749:366::-;20891:3;20912:67;20976:2;20971:3;20912:67;:::i;:::-;20905:74;;20988:93;21077:3;20988:93;:::i;:::-;21106:2;21101:3;21097:12;21090:19;;20749:366;;;:::o;21121:419::-;21287:4;21325:2;21314:9;21310:18;21302:26;;21374:9;21368:4;21364:20;21360:1;21349:9;21345:17;21338:47;21402:131;21528:4;21402:131;:::i;:::-;21394:139;;21121:419;;;:::o;21546:222::-;21686:34;21682:1;21674:6;21670:14;21663:58;21755:5;21750:2;21742:6;21738:15;21731:30;21546:222;:::o;21774:366::-;21916:3;21937:67;22001:2;21996:3;21937:67;:::i;:::-;21930:74;;22013:93;22102:3;22013:93;:::i;:::-;22131:2;22126:3;22122:12;22115:19;;21774:366;;;:::o;22146:419::-;22312:4;22350:2;22339:9;22335:18;22327:26;;22399:9;22393:4;22389:20;22385:1;22374:9;22370:17;22363:47;22427:131;22553:4;22427:131;:::i;:::-;22419:139;;22146:419;;;:::o;22571:245::-;22711:34;22707:1;22699:6;22695:14;22688:58;22780:28;22775:2;22767:6;22763:15;22756:53;22571:245;:::o;22822:366::-;22964:3;22985:67;23049:2;23044:3;22985:67;:::i;:::-;22978:74;;23061:93;23150:3;23061:93;:::i;:::-;23179:2;23174:3;23170:12;23163:19;;22822:366;;;:::o;23194:419::-;23360:4;23398:2;23387:9;23383:18;23375:26;;23447:9;23441:4;23437:20;23433:1;23422:9;23418:17;23411:47;23475:131;23601:4;23475:131;:::i;:::-;23467:139;;23194:419;;;:::o;23619:223::-;23759:34;23755:1;23747:6;23743:14;23736:58;23828:6;23823:2;23815:6;23811:15;23804:31;23619:223;:::o;23848:366::-;23990:3;24011:67;24075:2;24070:3;24011:67;:::i;:::-;24004:74;;24087:93;24176:3;24087:93;:::i;:::-;24205:2;24200:3;24196:12;24189:19;;23848:366;;;:::o;24220:419::-;24386:4;24424:2;24413:9;24409:18;24401:26;;24473:9;24467:4;24463:20;24459:1;24448:9;24444:17;24437:47;24501:131;24627:4;24501:131;:::i;:::-;24493:139;;24220:419;;;:::o;24645:180::-;24693:77;24690:1;24683:88;24790:4;24787:1;24780:15;24814:4;24811:1;24804:15;24831:185;24871:1;24888:20;24906:1;24888:20;:::i;:::-;24883:25;;24922:20;24940:1;24922:20;:::i;:::-;24917:25;;24961:1;24951:35;;24966:18;;:::i;:::-;24951:35;25008:1;25005;25001:9;24996:14;;24831:185;;;;:::o;25022:225::-;25162:34;25158:1;25150:6;25146:14;25139:58;25231:8;25226:2;25218:6;25214:15;25207:33;25022:225;:::o;25253:366::-;25395:3;25416:67;25480:2;25475:3;25416:67;:::i;:::-;25409:74;;25492:93;25581:3;25492:93;:::i;:::-;25610:2;25605:3;25601:12;25594:19;;25253:366;;;:::o;25625:419::-;25791:4;25829:2;25818:9;25814:18;25806:26;;25878:9;25872:4;25868:20;25864:1;25853:9;25849:17;25842:47;25906:131;26032:4;25906:131;:::i;:::-;25898:139;;25625:419;;;:::o;26050:180::-;26098:77;26095:1;26088:88;26195:4;26192:1;26185:15;26219:4;26216:1;26209:15;26236:180;26284:77;26281:1;26274:88;26381:4;26378:1;26371:15;26405:4;26402:1;26395:15;26422:143;26479:5;26510:6;26504:13;26495:22;;26526:33;26553:5;26526:33;:::i;:::-;26422:143;;;;:::o;26571:351::-;26641:6;26690:2;26678:9;26669:7;26665:23;26661:32;26658:119;;;26696:79;;:::i;:::-;26658:119;26816:1;26841:64;26897:7;26888:6;26877:9;26873:22;26841:64;:::i;:::-;26831:74;;26787:128;26571:351;;;;:::o;26928:85::-;26973:7;27002:5;26991:16;;26928:85;;;:::o;27019:158::-;27077:9;27110:61;27128:42;27137:32;27163:5;27137:32;:::i;:::-;27128:42;:::i;:::-;27110:61;:::i;:::-;27097:74;;27019:158;;;:::o;27183:147::-;27278:45;27317:5;27278:45;:::i;:::-;27273:3;27266:58;27183:147;;:::o;27336:114::-;27403:6;27437:5;27431:12;27421:22;;27336:114;;;:::o;27456:184::-;27555:11;27589:6;27584:3;27577:19;27629:4;27624:3;27620:14;27605:29;;27456:184;;;;:::o;27646:132::-;27713:4;27736:3;27728:11;;27766:4;27761:3;27757:14;27749:22;;27646:132;;;:::o;27784:108::-;27861:24;27879:5;27861:24;:::i;:::-;27856:3;27849:37;27784:108;;:::o;27898:179::-;27967:10;27988:46;28030:3;28022:6;27988:46;:::i;:::-;28066:4;28061:3;28057:14;28043:28;;27898:179;;;;:::o;28083:113::-;28153:4;28185;28180:3;28176:14;28168:22;;28083:113;;;:::o;28232:732::-;28351:3;28380:54;28428:5;28380:54;:::i;:::-;28450:86;28529:6;28524:3;28450:86;:::i;:::-;28443:93;;28560:56;28610:5;28560:56;:::i;:::-;28639:7;28670:1;28655:284;28680:6;28677:1;28674:13;28655:284;;;28756:6;28750:13;28783:63;28842:3;28827:13;28783:63;:::i;:::-;28776:70;;28869:60;28922:6;28869:60;:::i;:::-;28859:70;;28715:224;28702:1;28699;28695:9;28690:14;;28655:284;;;28659:14;28955:3;28948:10;;28356:608;;;28232:732;;;;:::o;28970:831::-;29233:4;29271:3;29260:9;29256:19;29248:27;;29285:71;29353:1;29342:9;29338:17;29329:6;29285:71;:::i;:::-;29366:80;29442:2;29431:9;29427:18;29418:6;29366:80;:::i;:::-;29493:9;29487:4;29483:20;29478:2;29467:9;29463:18;29456:48;29521:108;29624:4;29615:6;29521:108;:::i;:::-;29513:116;;29639:72;29707:2;29696:9;29692:18;29683:6;29639:72;:::i;:::-;29721:73;29789:3;29778:9;29774:19;29765:6;29721:73;:::i;:::-;28970:831;;;;;;;;:::o;29807:348::-;29847:7;29870:20;29888:1;29870:20;:::i;:::-;29865:25;;29904:20;29922:1;29904:20;:::i;:::-;29899:25;;30092:1;30024:66;30020:74;30017:1;30014:81;30009:1;30002:9;29995:17;29991:105;29988:131;;;30099:18;;:::i;:::-;29988:131;30147:1;30144;30140:9;30129:20;;29807:348;;;;:::o;30161:191::-;30201:4;30221:20;30239:1;30221:20;:::i;:::-;30216:25;;30255:20;30273:1;30255:20;:::i;:::-;30250:25;;30294:1;30291;30288:8;30285:34;;;30299:18;;:::i;:::-;30285:34;30344:1;30341;30337:9;30329:17;;30161:191;;;;:::o
Swarm Source
ipfs://bbd192b745affa1ca131cbbad7186cf36a021661ded90f1258c9027b24fe923e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,593.64 | 0.00022368 | $0.803818 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.