Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 7 from a total of 7 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Stuck E... | 18124072 | 468 days ago | IN | 0 ETH | 0.00020851 | ||||
Enable Trading | 18123722 | 468 days ago | IN | 0 ETH | 0.00029394 | ||||
Enable Trading | 18123654 | 468 days ago | IN | 0 ETH | 0.00028715 | ||||
Enable Trading | 18123654 | 468 days ago | IN | 0 ETH | 0.00028715 | ||||
Enable Trading | 18123654 | 468 days ago | IN | 0 ETH | 0.00028715 | ||||
Approve | 18123576 | 468 days ago | IN | 0 ETH | 0.00042514 | ||||
Approve | 18123553 | 468 days ago | IN | 0 ETH | 0.00063126 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MEMECOIN
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-12 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.21; pragma experimental ABIEncoderV2; // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) // pragma solidity ^0.8.21; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) // pragma solidity ^0.8.21; // import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) // pragma solidity ^0.8.21; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) // pragma solidity ^0.8.21; // import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) // pragma solidity ^0.8.21; // import "./IERC20.sol"; // import "./extensions/IERC20Metadata.sol"; // import "../../utils/Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require( fromBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) // pragma solidity ^0.8.21; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction 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; } } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // pragma solidity >=0.6.2; // import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract MEMECOIN is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketingWallet; address public developmentWallet; address public communityWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public tradingActive = false; bool public swapEnabled = false; uint256 public buyTotalFees; uint256 private buyMarketingFee; uint256 private buyDevelopmentFee; uint256 private buyCommunityFee; uint256 public sellTotalFees; uint256 private sellMarketingFee; uint256 private sellDevelopmentFee; uint256 private sellCommunityFee; uint256 private tokensForMarketing; uint256 private tokensForDevelopment; uint256 private tokensForCommunity; uint256 private previousFee; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedMaxTransactionAmount; mapping(address => bool) private automatedMarketMakerPairs; event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event developmentWalletUpdated( address indexed newWallet, address indexed oldWallet ); event communityWalletUpdated( address indexed newWallet, address indexed oldWallet ); constructor() ERC20("Meme Capital", "MC") { uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); _approve(address(this), address(uniswapV2Router), type(uint256).max); uint256 totalSupply = 5_000_000_000 ether; maxTransactionAmount = (totalSupply * 2) / 100; maxWallet = (totalSupply * 2) / 100; swapTokensAtAmount = (totalSupply * 5) / 10000; buyMarketingFee = 1; // Marketing tax buyDevelopmentFee = 1; // Development tax buyCommunityFee = 1; // Community tax buyTotalFees = buyMarketingFee + buyDevelopmentFee + buyCommunityFee; sellMarketingFee = 1; // Marketing tax sellDevelopmentFee = 1; // Development tax sellCommunityFee = 1; // Community tax sellTotalFees = sellMarketingFee + sellDevelopmentFee + sellCommunityFee; previousFee = sellTotalFees; marketingWallet = 0x45703BF4BAD2Fd6a3dc6C636088510f12709B06D; developmentWallet = 0x85FB2B2d91D1A28b4b02E6dFC263e311c9C6fEDe; communityWallet = 0xd2a90001941A5fd5255A9836ec2f10Ab576f5255; excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(deadAddress, true); excludeFromFees(marketingWallet, true); excludeFromFees(developmentWallet, true); excludeFromFees(communityWallet, true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(deadAddress, true); excludeFromMaxTransaction(address(uniswapV2Router), true); excludeFromMaxTransaction(marketingWallet, true); excludeFromMaxTransaction(developmentWallet, true); excludeFromMaxTransaction(communityWallet, true); _mint(owner(), totalSupply); } receive() external payable {} function burn(uint256 amount) external { _burn(msg.sender, amount); } function enableTrading() external onlyOwner { require(!tradingActive, "Trading already active."); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); _approve(address(this), address(uniswapV2Pair), type(uint256).max); IERC20(uniswapV2Pair).approve( address(uniswapV2Router), type(uint256).max ); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); excludeFromMaxTransaction(address(uniswapV2Pair), true); uniswapV2Router.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp ); tradingActive = true; swapEnabled = true; } function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "ERC20: Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "ERC20: Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function updateMaxWalletAndTxnAmount( uint256 newTxnNum, uint256 newMaxWalletNum ) external onlyOwner { require( newTxnNum >= ((totalSupply() * 5) / 1000), "ERC20: Cannot set maxTxn lower than 0.5%" ); require( newMaxWalletNum >= ((totalSupply() * 5) / 1000), "ERC20: Cannot set maxWallet lower than 0.5%" ); maxWallet = newMaxWalletNum; maxTransactionAmount = newTxnNum; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function updateBuyFees( uint256 _marketingFee, uint256 _developmentFee, uint256 _communityFee ) external onlyOwner { buyMarketingFee = _marketingFee; buyDevelopmentFee = _developmentFee; buyCommunityFee = _communityFee; buyTotalFees = buyMarketingFee + buyDevelopmentFee + buyCommunityFee; require(buyTotalFees <= 10, "ERC20: Must keep fees at 10% or less"); } function updateSellFees( uint256 _marketingFee, uint256 _developmentFee, uint256 _communityFee ) external onlyOwner { sellMarketingFee = _marketingFee; sellDevelopmentFee = _developmentFee; sellCommunityFee = _communityFee; sellTotalFees = sellMarketingFee + sellDevelopmentFee + sellCommunityFee; previousFee = sellTotalFees; require(sellTotalFees <= 10, "ERC20: Must keep fees at 10% or less"); } function updateMarketingWallet(address _marketingWallet) external onlyOwner { require(_marketingWallet != address(0), "ERC20: Address 0"); address oldWallet = marketingWallet; marketingWallet = _marketingWallet; emit marketingWalletUpdated(marketingWallet, oldWallet); } function updateDevelopmentWallet(address _developmentWallet) external onlyOwner { require(_developmentWallet != address(0), "ERC20: Address 0"); address oldWallet = developmentWallet; developmentWallet = _developmentWallet; emit developmentWalletUpdated(developmentWallet, oldWallet); } function updateCommunityWallet(address _communityWallet) external onlyOwner { require(_communityWallet != address(0), "ERC20: Address 0"); address oldWallet = communityWallet; communityWallet = _communityWallet; emit communityWalletUpdated(communityWallet, oldWallet); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function withdrawStuckETH() public onlyOwner { bool success; (success, ) = address(msg.sender).call{value: address(this).balance}( "" ); } function withdrawStuckTokens(address tkn) public onlyOwner { require(IERC20(tkn).balanceOf(address(this)) > 0, "No tokens"); uint256 amount = IERC20(tkn).balanceOf(address(this)); IERC20(tkn).transfer(msg.sender, amount); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && to != address(0) && to != deadAddress && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "ERC20: Trading is not active." ); } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "ERC20: Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "ERC20: Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "ERC20: Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "ERC20: Max wallet exceeded" ); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForCommunity += (fees * sellCommunityFee) / sellTotalFees; tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees; tokensForDevelopment += (fees * sellDevelopmentFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForCommunity += (fees * buyCommunityFee) / buyTotalFees; tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees; tokensForDevelopment += (fees * buyDevelopmentFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); sellTotalFees = previousFee; } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForCommunity + tokensForMarketing + tokensForDevelopment; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } swapTokensForEth(contractBalance); uint256 ethBalance = address(this).balance; uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div( totalTokensToSwap ); uint256 ethForCommunity = ethBalance.mul(tokensForCommunity).div( totalTokensToSwap ); tokensForMarketing = 0; tokensForDevelopment = 0; tokensForCommunity = 0; (success, ) = address(communityWallet).call{value: ethForCommunity}(""); (success, ) = address(developmentWallet).call{value: ethForDevelopment}( "" ); (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"communityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_communityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_communityWallet","type":"address"}],"name":"updateCommunityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_developmentWallet","type":"address"}],"name":"updateDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTxnNum","type":"uint256"},{"internalType":"uint256","name":"newMaxWalletNum","type":"uint256"}],"name":"updateMaxWalletAndTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_communityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040525f600d5f6101000a81548160ff0219169083151502179055505f600d60016101000a81548160ff02191690831515021790555034801562000043575f80fd5b506040518060400160405280600c81526020017f4d656d65204361706974616c00000000000000000000000000000000000000008152506040518060400160405280600281526020017f4d430000000000000000000000000000000000000000000000000000000000008152508160039081620000c1919062000dba565b508060049081620000d3919062000dba565b505050620000f6620000ea6200057960201b60201c565b6200058060201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000173306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200064360201b60201c565b5f6b1027e72f1f128130880000009050606460028262000194919062000ecb565b620001a0919062000f42565b600a819055506064600282620001b7919062000ecb565b620001c3919062000f42565b600c81905550612710600582620001db919062000ecb565b620001e7919062000f42565b600b819055506001600f8190555060016010819055506001601181905550601154601054600f546200021a919062000f79565b62000226919062000f79565b600e8190555060016013819055506001601481905550600160158190555060155460145460135462000259919062000f79565b62000265919062000f79565b6012819055506012546019819055507345703bf4bad2fd6a3dc6c636088510f12709b06d60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507385fb2b2d91d1a28b4b02e6dfc263e311c9c6fede60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d2a90001941a5fd5255a9836ec2f10ab576f525560095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000392620003846200080e60201b60201c565b60016200083660201b60201c565b620003a53060016200083660201b60201c565b620003ba61dead60016200083660201b60201c565b620003ee60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200083660201b60201c565b6200042260085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200083660201b60201c565b6200045660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200083660201b60201c565b620004786200046a6200080e60201b60201c565b6001620008ee60201b60201c565b6200048b306001620008ee60201b60201c565b620004a061dead6001620008ee60201b60201c565b620004b56080516001620008ee60201b60201c565b620004e960075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008ee60201b60201c565b6200051d60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008ee60201b60201c565b6200055160095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008ee60201b60201c565b62000572620005656200080e60201b60201c565b826200095660201b60201c565b506200122a565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620006b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ab9062001037565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000725576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071c90620010cb565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620008019190620010fc565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200084662000abb60201b60201c565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008e2919062001133565b60405180910390a25050565b620008fe62000abb60201b60201c565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009be906200119c565b60405180910390fd5b620009da5f838362000b4c60201b60201c565b8060025f828254620009ed919062000f79565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a9c9190620010fc565b60405180910390a362000ab75f838362000b5160201b60201c565b5050565b62000acb6200057960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000af16200080e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b41906200120a565b60405180910390fd5b565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000bd257607f821691505b60208210810362000be85762000be762000b8d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000c4c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c0f565b62000c58868362000c0f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ca262000c9c62000c968462000c70565b62000c79565b62000c70565b9050919050565b5f819050919050565b62000cbd8362000c82565b62000cd562000ccc8262000ca9565b84845462000c1b565b825550505050565b5f90565b62000ceb62000cdd565b62000cf881848462000cb2565b505050565b5b8181101562000d1f5762000d135f8262000ce1565b60018101905062000cfe565b5050565b601f82111562000d6e5762000d388162000bee565b62000d438462000c00565b8101602085101562000d53578190505b62000d6b62000d628562000c00565b83018262000cfd565b50505b505050565b5f82821c905092915050565b5f62000d905f198460080262000d73565b1980831691505092915050565b5f62000daa838362000d7f565b9150826002028217905092915050565b62000dc58262000b56565b67ffffffffffffffff81111562000de15762000de062000b60565b5b62000ded825462000bba565b62000dfa82828562000d23565b5f60209050601f83116001811462000e30575f841562000e1b578287015190505b62000e27858262000d9d565b86555062000e96565b601f19841662000e408662000bee565b5f5b8281101562000e695784890151825560018201915060208501945060208101905062000e42565b8683101562000e89578489015162000e85601f89168262000d7f565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000ed78262000c70565b915062000ee48362000c70565b925082820262000ef48162000c70565b9150828204841483151762000f0e5762000f0d62000e9e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000f4e8262000c70565b915062000f5b8362000c70565b92508262000f6e5762000f6d62000f15565b5b828204905092915050565b5f62000f858262000c70565b915062000f928362000c70565b925082820190508082111562000fad5762000fac62000e9e565b5b92915050565b5f82825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6200101f60248362000fb3565b91506200102c8262000fc3565b604082019050919050565b5f6020820190508181035f830152620010508162001011565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f620010b360228362000fb3565b9150620010c08262001057565b604082019050919050565b5f6020820190508181035f830152620010e481620010a5565b9050919050565b620010f68162000c70565b82525050565b5f602082019050620011115f830184620010eb565b92915050565b5f8115159050919050565b6200112d8162001117565b82525050565b5f602082019050620011485f83018462001122565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001184601f8362000fb3565b915062001191826200114e565b602082019050919050565b5f6020820190508181035f830152620011b58162001176565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620011f260208362000fb3565b9150620011ff82620011bc565b602082019050919050565b5f6020820190508181035f8301526200122381620011e4565b9050919050565b608051614ac4620012745f395f8181610a1201528181610d0d01528181610db601528181610f68015281816110600152818161339701528181613476015261349d0152614ac45ff3fe608060405260043610610249575f3560e01c806395d89b4111610138578063c7574839116100b5578063dd62ed3e11610079578063dd62ed3e14610868578063e2f45605146108a4578063f023f573146108ce578063f2fde38b146108f6578063f5648a4f1461091e578063f8b45b051461093457610250565b8063c757483914610786578063c8c8ebe4146107b0578063cb963728146107da578063d257b34f14610802578063d85ba0631461083e57610250565b8063aacebbe3116100fc578063aacebbe3146106ba578063bbc0c742146106e2578063c02466681461070c578063c04a541414610734578063c17b5b8c1461075e57610250565b806395d89b41146105c857806396188399146105f2578063a457c2d71461061a578063a6ce120a14610656578063a9059cbb1461067e57610250565b80634fbee193116101c65780637571336a1161018a5780637571336a1461050e57806375f0a874146105365780638095d564146105605780638a8c523c146105885780638da5cb5b1461059e57610250565b80634fbee1931461042c5780636a486a8e146104685780636ddd17131461049257806370a08231146104bc578063715018a6146104f857610250565b806327c8f8351161020d57806327c8f8351461034a578063313ce56714610374578063395093511461039e57806342966c68146103da57806349bd5a5e1461040257610250565b806306fdde0314610254578063095ea7b31461027e5780631694505e146102ba57806318160ddd146102e457806323b872dd1461030e57610250565b3661025057005b5f80fd5b34801561025f575f80fd5b5061026861095e565b60405161027591906135b7565b60405180910390f35b348015610289575f80fd5b506102a4600480360381019061029f9190613668565b6109ee565b6040516102b191906136c0565b60405180910390f35b3480156102c5575f80fd5b506102ce610a10565b6040516102db9190613734565b60405180910390f35b3480156102ef575f80fd5b506102f8610a34565b604051610305919061375c565b60405180910390f35b348015610319575f80fd5b50610334600480360381019061032f9190613775565b610a3d565b60405161034191906136c0565b60405180910390f35b348015610355575f80fd5b5061035e610a6b565b60405161036b91906137d4565b60405180910390f35b34801561037f575f80fd5b50610388610a71565b6040516103959190613808565b60405180910390f35b3480156103a9575f80fd5b506103c460048036038101906103bf9190613668565b610a79565b6040516103d191906136c0565b60405180910390f35b3480156103e5575f80fd5b5061040060048036038101906103fb9190613821565b610aaf565b005b34801561040d575f80fd5b50610416610abc565b60405161042391906137d4565b60405180910390f35b348015610437575f80fd5b50610452600480360381019061044d919061384c565b610ae1565b60405161045f91906136c0565b60405180910390f35b348015610473575f80fd5b5061047c610b33565b604051610489919061375c565b60405180910390f35b34801561049d575f80fd5b506104a6610b39565b6040516104b391906136c0565b60405180910390f35b3480156104c7575f80fd5b506104e260048036038101906104dd919061384c565b610b4c565b6040516104ef919061375c565b60405180910390f35b348015610503575f80fd5b5061050c610b91565b005b348015610519575f80fd5b50610534600480360381019061052f91906138a1565b610ba4565b005b348015610541575f80fd5b5061054a610c04565b60405161055791906137d4565b60405180910390f35b34801561056b575f80fd5b50610586600480360381019061058191906138df565b610c29565b005b348015610593575f80fd5b5061059c610cb4565b005b3480156105a9575f80fd5b506105b261114c565b6040516105bf91906137d4565b60405180910390f35b3480156105d3575f80fd5b506105dc611174565b6040516105e991906135b7565b60405180910390f35b3480156105fd575f80fd5b506106186004803603810190610613919061392f565b611204565b005b348015610625575f80fd5b50610640600480360381019061063b9190613668565b6112e4565b60405161064d91906136c0565b60405180910390f35b348015610661575f80fd5b5061067c6004803603810190610677919061384c565b611359565b005b348015610689575f80fd5b506106a4600480360381019061069f9190613668565b6114b3565b6040516106b191906136c0565b60405180910390f35b3480156106c5575f80fd5b506106e060048036038101906106db919061384c565b6114d5565b005b3480156106ed575f80fd5b506106f661162f565b60405161070391906136c0565b60405180910390f35b348015610717575f80fd5b50610732600480360381019061072d91906138a1565b611641565b005b34801561073f575f80fd5b506107486116ef565b60405161075591906137d4565b60405180910390f35b348015610769575f80fd5b50610784600480360381019061077f91906138df565b611714565b005b348015610791575f80fd5b5061079a6117a8565b6040516107a791906137d4565b60405180910390f35b3480156107bb575f80fd5b506107c46117cd565b6040516107d1919061375c565b60405180910390f35b3480156107e5575f80fd5b5061080060048036038101906107fb919061384c565b6117d3565b005b34801561080d575f80fd5b5061082860048036038101906108239190613821565b61198f565b60405161083591906136c0565b60405180910390f35b348015610849575f80fd5b50610852611a6f565b60405161085f919061375c565b60405180910390f35b348015610873575f80fd5b5061088e6004803603810190610889919061396d565b611a75565b60405161089b919061375c565b60405180910390f35b3480156108af575f80fd5b506108b8611af7565b6040516108c5919061375c565b60405180910390f35b3480156108d9575f80fd5b506108f460048036038101906108ef919061384c565b611afd565b005b348015610901575f80fd5b5061091c6004803603810190610917919061384c565b611c57565b005b348015610929575f80fd5b50610932611cd9565b005b34801561093f575f80fd5b50610948611d4e565b604051610955919061375c565b60405180910390f35b60606003805461096d906139d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610999906139d8565b80156109e45780601f106109bb576101008083540402835291602001916109e4565b820191905f5260205f20905b8154815290600101906020018083116109c757829003601f168201915b5050505050905090565b5f806109f8611d54565b9050610a05818585611d5b565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b5f80610a47611d54565b9050610a54858285611f1e565b610a5f858585611fa9565b60019150509392505050565b61dead81565b5f6012905090565b5f80610a83611d54565b9050610aa4818585610a958589611a75565b610a9f9190613a35565b611d5b565b600191505092915050565b610ab93382612a2c565b50565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60125481565b600d60019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b99612bef565b610ba25f612c6d565b565b610bac612bef565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c31612bef565b82600f819055508160108190555080601181905550601154601054600f54610c599190613a35565b610c639190613a35565b600e81905550600a600e541115610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690613ad8565b60405180910390fd5b505050565b610cbc612bef565b600d5f9054906101000a900460ff1615610d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0290613b40565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d74573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d989190613b72565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e419190613b72565b6040518363ffffffff1660e01b8152600401610e5e929190613b9d565b6020604051808303815f875af1158015610e7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9e9190613b72565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f293060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611d5b565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610fc5929190613bc4565b6020604051808303815f875af1158015610fe1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110059190613bff565b5061103260065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612d30565b61105e60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610ba4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71947306110a530610b4c565b5f806110af61114c565b426040518863ffffffff1660e01b81526004016110d196959493929190613c63565b60606040518083038185885af11580156110ed573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906111129190613cd6565b5050506001600d5f6101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611183906139d8565b80601f01602080910402602001604051908101604052809291908181526020018280546111af906139d8565b80156111fa5780601f106111d1576101008083540402835291602001916111fa565b820191905f5260205f20905b8154815290600101906020018083116111dd57829003601f168201915b5050505050905090565b61120c612bef565b6103e86005611219610a34565b6112239190613d26565b61122d9190613d94565b82101561126f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126690613e34565b60405180910390fd5b6103e8600561127c610a34565b6112869190613d26565b6112909190613d94565b8110156112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c990613ec2565b60405180910390fd5b80600c8190555081600a819055505050565b5f806112ee611d54565b90505f6112fb8286611a75565b905083811015611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133790613f50565b60405180910390fd5b61134d8286868403611d5b565b60019250505092915050565b611361612bef565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690613fb8565b60405180910390fd5b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7e93f456cc9a7cd16cdd07852911879883f53eb9b4643c9df90615542d46e95d60405160405180910390a35050565b5f806114bd611d54565b90506114ca818585611fa9565b600191505092915050565b6114dd612bef565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290613fb8565b60405180910390fd5b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a35050565b600d5f9054906101000a900460ff1681565b611649612bef565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516116e391906136c0565b60405180910390a25050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61171c612bef565b8260138190555081601481905550806015819055506015546014546013546117449190613a35565b61174e9190613a35565b601281905550601254601981905550600a60125411156117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a90613ad8565b60405180910390fd5b505050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6117db612bef565b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161181591906137d4565b602060405180830381865afa158015611830573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118549190613fd6565b11611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b9061404b565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118ce91906137d4565b602060405180830381865afa1580156118e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190d9190613fd6565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161194a929190613bc4565b6020604051808303815f875af1158015611966573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061198a9190613bff565b505050565b5f611998612bef565b620186a060016119a6610a34565b6119b09190613d26565b6119ba9190613d94565b8210156119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f3906140d9565b60405180910390fd5b6103e86005611a09610a34565b611a139190613d26565b611a1d9190613d94565b821115611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5690614167565b60405180910390fd5b81600b8190555060019050919050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b611b05612bef565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90613fb8565b60405180910390fd5b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a35050565b611c5f612bef565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc4906141f5565b60405180910390fd5b611cd681612c6d565b50565b611ce1612bef565b5f3373ffffffffffffffffffffffffffffffffffffffff1647604051611d0690614240565b5f6040518083038185875af1925050503d805f8114611d40576040519150601f19603f3d011682016040523d82523d5f602084013e611d45565b606091505b50508091505050565b600c5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc0906142c4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90614352565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f11919061375c565b60405180910390a3505050565b5f611f298484611a75565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611fa35781811015611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8c906143ba565b60405180910390fd5b611fa28484848403611d5b565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200e90614448565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c906144d6565b60405180910390fd5b5f810361209c5761209783835f612dce565b612a27565b6120a461114c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561211257506120e261114c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561214a57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612184575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561219d5750600660149054906101000a900460ff16155b1561256a57600d5f9054906101000a900460ff1661229057601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806122505750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61228f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122869061453e565b60405180910390fd5b5b601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561232d5750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123d457600a54811115612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e906145cc565b60405180910390fd5b600c5461238383610b4c565b8261238e9190613a35565b11156123cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c690614634565b60405180910390fd5b612569565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124715750601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156124c057600a548111156124bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b2906146c2565b60405180910390fd5b612568565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661256757600c5461251a83610b4c565b826125259190613a35565b1115612566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255d90614634565b60405180910390fd5b5b5b5b5b5f61257430610b4c565b90505f600b5482101590508080156125985750600d60019054906101000a900460ff165b80156125b15750600660149054906101000a900460ff16155b80156126045750601c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156126575750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156126aa5750601a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156126ed576001600660146101000a81548160ff0219169083151502179055506126d261303a565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff16159050601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061279c5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156127a5575f90505b5f8115612a0e57601c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561280357505f601254115b156128cd576128306064612822601254886132c690919063ffffffff16565b6132db90919063ffffffff16565b9050601254601554826128439190613d26565b61284d9190613d94565b60185f82825461285d9190613a35565b92505081905550601254601354826128759190613d26565b61287f9190613d94565b60165f82825461288f9190613a35565b92505081905550601254601454826128a79190613d26565b6128b19190613d94565b60175f8282546128c19190613a35565b925050819055506129eb565b601c5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561292457505f600e54115b156129ea576129516064612943600e54886132c690919063ffffffff16565b6132db90919063ffffffff16565b9050600e54601154826129649190613d26565b61296e9190613d94565b60185f82825461297e9190613a35565b92505081905550600e54600f54826129969190613d26565b6129a09190613d94565b60165f8282546129b09190613a35565b92505081905550600e54601054826129c89190613d26565b6129d29190613d94565b60175f8282546129e29190613a35565b925050819055505b5b5f8111156129ff576129fe873083612dce565b5b8085612a0b91906146e0565b94505b612a19878787612dce565b601954601281905550505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9190614783565b60405180910390fd5b612aa5825f836132f0565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1f90614811565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bd7919061375c565b60405180910390a3612bea835f846132f5565b505050565b612bf7611d54565b73ffffffffffffffffffffffffffffffffffffffff16612c1561114c565b73ffffffffffffffffffffffffffffffffffffffff1614612c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6290614879565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3390614448565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea1906144d6565b60405180910390fd5b612eb58383836132f0565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2f90614907565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613021919061375c565b60405180910390a36130348484846132f5565b50505050565b5f61304430610b4c565b90505f60175460165460185461305a9190613a35565b6130649190613a35565b90505f8083148061307457505f82145b15613081575050506132c4565b6014600b546130909190613d26565b8311156130a9576014600b546130a69190613d26565b92505b6130b2836132fa565b5f4790505f6130de846130d0601754856132c690919063ffffffff16565b6132db90919063ffffffff16565b90505f613108856130fa601854866132c690919063ffffffff16565b6132db90919063ffffffff16565b90505f6016819055505f6017819055505f60188190555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161316490614240565b5f6040518083038185875af1925050503d805f811461319e576040519150601f19603f3d011682016040523d82523d5f602084013e6131a3565b606091505b50508094505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516131ee90614240565b5f6040518083038185875af1925050503d805f8114613228576040519150601f19603f3d011682016040523d82523d5f602084013e61322d565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161327890614240565b5f6040518083038185875af1925050503d805f81146132b2576040519150601f19603f3d011682016040523d82523d5f602084013e6132b7565b606091505b5050809450505050505050505b565b5f81836132d39190613d26565b905092915050565b5f81836132e89190613d94565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561331657613315614925565b5b6040519080825280602002602001820160405280156133445781602001602082028036833780820191505090505b50905030815f8151811061335b5761335a614952565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134229190613b72565b8160018151811061343657613435614952565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061349b307f000000000000000000000000000000000000000000000000000000000000000084611d5b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016134fc959493929190614a36565b5f604051808303815f87803b158015613513575f80fd5b505af1158015613525573d5f803e3d5ffd5b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613564578082015181840152602081019050613549565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135898261352d565b6135938185613537565b93506135a3818560208601613547565b6135ac8161356f565b840191505092915050565b5f6020820190508181035f8301526135cf818461357f565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613604826135db565b9050919050565b613614816135fa565b811461361e575f80fd5b50565b5f8135905061362f8161360b565b92915050565b5f819050919050565b61364781613635565b8114613651575f80fd5b50565b5f813590506136628161363e565b92915050565b5f806040838503121561367e5761367d6135d7565b5b5f61368b85828601613621565b925050602061369c85828601613654565b9150509250929050565b5f8115159050919050565b6136ba816136a6565b82525050565b5f6020820190506136d35f8301846136b1565b92915050565b5f819050919050565b5f6136fc6136f76136f2846135db565b6136d9565b6135db565b9050919050565b5f61370d826136e2565b9050919050565b5f61371e82613703565b9050919050565b61372e81613714565b82525050565b5f6020820190506137475f830184613725565b92915050565b61375681613635565b82525050565b5f60208201905061376f5f83018461374d565b92915050565b5f805f6060848603121561378c5761378b6135d7565b5b5f61379986828701613621565b93505060206137aa86828701613621565b92505060406137bb86828701613654565b9150509250925092565b6137ce816135fa565b82525050565b5f6020820190506137e75f8301846137c5565b92915050565b5f60ff82169050919050565b613802816137ed565b82525050565b5f60208201905061381b5f8301846137f9565b92915050565b5f60208284031215613836576138356135d7565b5b5f61384384828501613654565b91505092915050565b5f60208284031215613861576138606135d7565b5b5f61386e84828501613621565b91505092915050565b613880816136a6565b811461388a575f80fd5b50565b5f8135905061389b81613877565b92915050565b5f80604083850312156138b7576138b66135d7565b5b5f6138c485828601613621565b92505060206138d58582860161388d565b9150509250929050565b5f805f606084860312156138f6576138f56135d7565b5b5f61390386828701613654565b935050602061391486828701613654565b925050604061392586828701613654565b9150509250925092565b5f8060408385031215613945576139446135d7565b5b5f61395285828601613654565b925050602061396385828601613654565b9150509250929050565b5f8060408385031215613983576139826135d7565b5b5f61399085828601613621565b92505060206139a185828601613621565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806139ef57607f821691505b602082108103613a0257613a016139ab565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613a3f82613635565b9150613a4a83613635565b9250828201905080821115613a6257613a61613a08565b5b92915050565b7f45524332303a204d757374206b656570206665657320617420313025206f72205f8201527f6c65737300000000000000000000000000000000000000000000000000000000602082015250565b5f613ac2602483613537565b9150613acd82613a68565b604082019050919050565b5f6020820190508181035f830152613aef81613ab6565b9050919050565b7f54726164696e6720616c7265616479206163746976652e0000000000000000005f82015250565b5f613b2a601783613537565b9150613b3582613af6565b602082019050919050565b5f6020820190508181035f830152613b5781613b1e565b9050919050565b5f81519050613b6c8161360b565b92915050565b5f60208284031215613b8757613b866135d7565b5b5f613b9484828501613b5e565b91505092915050565b5f604082019050613bb05f8301856137c5565b613bbd60208301846137c5565b9392505050565b5f604082019050613bd75f8301856137c5565b613be4602083018461374d565b9392505050565b5f81519050613bf981613877565b92915050565b5f60208284031215613c1457613c136135d7565b5b5f613c2184828501613beb565b91505092915050565b5f819050919050565b5f613c4d613c48613c4384613c2a565b6136d9565b613635565b9050919050565b613c5d81613c33565b82525050565b5f60c082019050613c765f8301896137c5565b613c83602083018861374d565b613c906040830187613c54565b613c9d6060830186613c54565b613caa60808301856137c5565b613cb760a083018461374d565b979650505050505050565b5f81519050613cd08161363e565b92915050565b5f805f60608486031215613ced57613cec6135d7565b5b5f613cfa86828701613cc2565b9350506020613d0b86828701613cc2565b9250506040613d1c86828701613cc2565b9150509250925092565b5f613d3082613635565b9150613d3b83613635565b9250828202613d4981613635565b91508282048414831517613d6057613d5f613a08565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d9e82613635565b9150613da983613635565b925082613db957613db8613d67565b5b828204905092915050565b7f45524332303a2043616e6e6f7420736574206d617854786e206c6f77657220745f8201527f68616e20302e3525000000000000000000000000000000000000000000000000602082015250565b5f613e1e602883613537565b9150613e2982613dc4565b604082019050919050565b5f6020820190508181035f830152613e4b81613e12565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f77655f8201527f72207468616e20302e3525000000000000000000000000000000000000000000602082015250565b5f613eac602b83613537565b9150613eb782613e52565b604082019050919050565b5f6020820190508181035f830152613ed981613ea0565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613f3a602583613537565b9150613f4582613ee0565b604082019050919050565b5f6020820190508181035f830152613f6781613f2e565b9050919050565b7f45524332303a20416464726573732030000000000000000000000000000000005f82015250565b5f613fa2601083613537565b9150613fad82613f6e565b602082019050919050565b5f6020820190508181035f830152613fcf81613f96565b9050919050565b5f60208284031215613feb57613fea6135d7565b5b5f613ff884828501613cc2565b91505092915050565b7f4e6f20746f6b656e7300000000000000000000000000000000000000000000005f82015250565b5f614035600983613537565b915061404082614001565b602082019050919050565b5f6020820190508181035f83015261406281614029565b9050919050565b7f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f775f8201527f6572207468616e20302e3030312520746f74616c20737570706c792e00000000602082015250565b5f6140c3603c83613537565b91506140ce82614069565b604082019050919050565b5f6020820190508181035f8301526140f0816140b7565b9050919050565b7f45524332303a205377617020616d6f756e742063616e6e6f74206265206869675f8201527f686572207468616e20302e352520746f74616c20737570706c792e0000000000602082015250565b5f614151603b83613537565b915061415c826140f7565b604082019050919050565b5f6020820190508181035f83015261417e81614145565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6141df602683613537565b91506141ea82614185565b604082019050919050565b5f6020820190508181035f83015261420c816141d3565b9050919050565b5f81905092915050565b50565b5f61422b5f83614213565b91506142368261421d565b5f82019050919050565b5f61424a82614220565b9150819050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6142ae602483613537565b91506142b982614254565b604082019050919050565b5f6020820190508181035f8301526142db816142a2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61433c602283613537565b9150614347826142e2565b604082019050919050565b5f6020820190508181035f83015261436981614330565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6143a4601d83613537565b91506143af82614370565b602082019050919050565b5f6020820190508181035f8301526143d181614398565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614432602583613537565b915061443d826143d8565b604082019050919050565b5f6020820190508181035f83015261445f81614426565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6144c0602383613537565b91506144cb82614466565b604082019050919050565b5f6020820190508181035f8301526144ed816144b4565b9050919050565b7f45524332303a2054726164696e67206973206e6f74206163746976652e0000005f82015250565b5f614528601d83613537565b9150614533826144f4565b602082019050919050565b5f6020820190508181035f8301526145558161451c565b9050919050565b7f45524332303a20427579207472616e7366657220616d6f756e742065786365655f8201527f647320746865206d61785472616e73616374696f6e416d6f756e742e00000000602082015250565b5f6145b6603c83613537565b91506145c18261455c565b604082019050919050565b5f6020820190508181035f8301526145e3816145aa565b9050919050565b7f45524332303a204d61782077616c6c65742065786365656465640000000000005f82015250565b5f61461e601a83613537565b9150614629826145ea565b602082019050919050565b5f6020820190508181035f83015261464b81614612565b9050919050565b7f45524332303a2053656c6c207472616e7366657220616d6f756e7420657863655f8201527f65647320746865206d61785472616e73616374696f6e416d6f756e742e000000602082015250565b5f6146ac603d83613537565b91506146b782614652565b604082019050919050565b5f6020820190508181035f8301526146d9816146a0565b9050919050565b5f6146ea82613635565b91506146f583613635565b925082820390508181111561470d5761470c613a08565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61476d602183613537565b915061477882614713565b604082019050919050565b5f6020820190508181035f83015261479a81614761565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f6147fb602283613537565b9150614806826147a1565b604082019050919050565b5f6020820190508181035f830152614828816147ef565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614863602083613537565b915061486e8261482f565b602082019050919050565b5f6020820190508181035f83015261489081614857565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6148f1602683613537565b91506148fc82614897565b604082019050919050565b5f6020820190508181035f83015261491e816148e5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6149b1816135fa565b82525050565b5f6149c283836149a8565b60208301905092915050565b5f602082019050919050565b5f6149e48261497f565b6149ee8185614989565b93506149f983614999565b805f5b83811015614a29578151614a1088826149b7565b9750614a1b836149ce565b9250506001810190506149fc565b5085935050505092915050565b5f60a082019050614a495f83018861374d565b614a566020830187613c54565b8181036040830152614a6881866149da565b9050614a7760608301856137c5565b614a84608083018461374d565b969550505050505056fea2646970667358221220ebab346187bb8b3cf703bf0b67ad61ce983fe9d7f666ff07ce3910ceb82c39b964736f6c63430008150033
Deployed Bytecode
0x608060405260043610610249575f3560e01c806395d89b4111610138578063c7574839116100b5578063dd62ed3e11610079578063dd62ed3e14610868578063e2f45605146108a4578063f023f573146108ce578063f2fde38b146108f6578063f5648a4f1461091e578063f8b45b051461093457610250565b8063c757483914610786578063c8c8ebe4146107b0578063cb963728146107da578063d257b34f14610802578063d85ba0631461083e57610250565b8063aacebbe3116100fc578063aacebbe3146106ba578063bbc0c742146106e2578063c02466681461070c578063c04a541414610734578063c17b5b8c1461075e57610250565b806395d89b41146105c857806396188399146105f2578063a457c2d71461061a578063a6ce120a14610656578063a9059cbb1461067e57610250565b80634fbee193116101c65780637571336a1161018a5780637571336a1461050e57806375f0a874146105365780638095d564146105605780638a8c523c146105885780638da5cb5b1461059e57610250565b80634fbee1931461042c5780636a486a8e146104685780636ddd17131461049257806370a08231146104bc578063715018a6146104f857610250565b806327c8f8351161020d57806327c8f8351461034a578063313ce56714610374578063395093511461039e57806342966c68146103da57806349bd5a5e1461040257610250565b806306fdde0314610254578063095ea7b31461027e5780631694505e146102ba57806318160ddd146102e457806323b872dd1461030e57610250565b3661025057005b5f80fd5b34801561025f575f80fd5b5061026861095e565b60405161027591906135b7565b60405180910390f35b348015610289575f80fd5b506102a4600480360381019061029f9190613668565b6109ee565b6040516102b191906136c0565b60405180910390f35b3480156102c5575f80fd5b506102ce610a10565b6040516102db9190613734565b60405180910390f35b3480156102ef575f80fd5b506102f8610a34565b604051610305919061375c565b60405180910390f35b348015610319575f80fd5b50610334600480360381019061032f9190613775565b610a3d565b60405161034191906136c0565b60405180910390f35b348015610355575f80fd5b5061035e610a6b565b60405161036b91906137d4565b60405180910390f35b34801561037f575f80fd5b50610388610a71565b6040516103959190613808565b60405180910390f35b3480156103a9575f80fd5b506103c460048036038101906103bf9190613668565b610a79565b6040516103d191906136c0565b60405180910390f35b3480156103e5575f80fd5b5061040060048036038101906103fb9190613821565b610aaf565b005b34801561040d575f80fd5b50610416610abc565b60405161042391906137d4565b60405180910390f35b348015610437575f80fd5b50610452600480360381019061044d919061384c565b610ae1565b60405161045f91906136c0565b60405180910390f35b348015610473575f80fd5b5061047c610b33565b604051610489919061375c565b60405180910390f35b34801561049d575f80fd5b506104a6610b39565b6040516104b391906136c0565b60405180910390f35b3480156104c7575f80fd5b506104e260048036038101906104dd919061384c565b610b4c565b6040516104ef919061375c565b60405180910390f35b348015610503575f80fd5b5061050c610b91565b005b348015610519575f80fd5b50610534600480360381019061052f91906138a1565b610ba4565b005b348015610541575f80fd5b5061054a610c04565b60405161055791906137d4565b60405180910390f35b34801561056b575f80fd5b50610586600480360381019061058191906138df565b610c29565b005b348015610593575f80fd5b5061059c610cb4565b005b3480156105a9575f80fd5b506105b261114c565b6040516105bf91906137d4565b60405180910390f35b3480156105d3575f80fd5b506105dc611174565b6040516105e991906135b7565b60405180910390f35b3480156105fd575f80fd5b506106186004803603810190610613919061392f565b611204565b005b348015610625575f80fd5b50610640600480360381019061063b9190613668565b6112e4565b60405161064d91906136c0565b60405180910390f35b348015610661575f80fd5b5061067c6004803603810190610677919061384c565b611359565b005b348015610689575f80fd5b506106a4600480360381019061069f9190613668565b6114b3565b6040516106b191906136c0565b60405180910390f35b3480156106c5575f80fd5b506106e060048036038101906106db919061384c565b6114d5565b005b3480156106ed575f80fd5b506106f661162f565b60405161070391906136c0565b60405180910390f35b348015610717575f80fd5b50610732600480360381019061072d91906138a1565b611641565b005b34801561073f575f80fd5b506107486116ef565b60405161075591906137d4565b60405180910390f35b348015610769575f80fd5b50610784600480360381019061077f91906138df565b611714565b005b348015610791575f80fd5b5061079a6117a8565b6040516107a791906137d4565b60405180910390f35b3480156107bb575f80fd5b506107c46117cd565b6040516107d1919061375c565b60405180910390f35b3480156107e5575f80fd5b5061080060048036038101906107fb919061384c565b6117d3565b005b34801561080d575f80fd5b5061082860048036038101906108239190613821565b61198f565b60405161083591906136c0565b60405180910390f35b348015610849575f80fd5b50610852611a6f565b60405161085f919061375c565b60405180910390f35b348015610873575f80fd5b5061088e6004803603810190610889919061396d565b611a75565b60405161089b919061375c565b60405180910390f35b3480156108af575f80fd5b506108b8611af7565b6040516108c5919061375c565b60405180910390f35b3480156108d9575f80fd5b506108f460048036038101906108ef919061384c565b611afd565b005b348015610901575f80fd5b5061091c6004803603810190610917919061384c565b611c57565b005b348015610929575f80fd5b50610932611cd9565b005b34801561093f575f80fd5b50610948611d4e565b604051610955919061375c565b60405180910390f35b60606003805461096d906139d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610999906139d8565b80156109e45780601f106109bb576101008083540402835291602001916109e4565b820191905f5260205f20905b8154815290600101906020018083116109c757829003601f168201915b5050505050905090565b5f806109f8611d54565b9050610a05818585611d5b565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b5f80610a47611d54565b9050610a54858285611f1e565b610a5f858585611fa9565b60019150509392505050565b61dead81565b5f6012905090565b5f80610a83611d54565b9050610aa4818585610a958589611a75565b610a9f9190613a35565b611d5b565b600191505092915050565b610ab93382612a2c565b50565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60125481565b600d60019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b99612bef565b610ba25f612c6d565b565b610bac612bef565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c31612bef565b82600f819055508160108190555080601181905550601154601054600f54610c599190613a35565b610c639190613a35565b600e81905550600a600e541115610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690613ad8565b60405180910390fd5b505050565b610cbc612bef565b600d5f9054906101000a900460ff1615610d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0290613b40565b60405180910390fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d74573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d989190613b72565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e419190613b72565b6040518363ffffffff1660e01b8152600401610e5e929190613b9d565b6020604051808303815f875af1158015610e7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9e9190613b72565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f293060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611d5b565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610fc5929190613bc4565b6020604051808303815f875af1158015610fe1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110059190613bff565b5061103260065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612d30565b61105e60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610ba4565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71947306110a530610b4c565b5f806110af61114c565b426040518863ffffffff1660e01b81526004016110d196959493929190613c63565b60606040518083038185885af11580156110ed573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906111129190613cd6565b5050506001600d5f6101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611183906139d8565b80601f01602080910402602001604051908101604052809291908181526020018280546111af906139d8565b80156111fa5780601f106111d1576101008083540402835291602001916111fa565b820191905f5260205f20905b8154815290600101906020018083116111dd57829003601f168201915b5050505050905090565b61120c612bef565b6103e86005611219610a34565b6112239190613d26565b61122d9190613d94565b82101561126f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126690613e34565b60405180910390fd5b6103e8600561127c610a34565b6112869190613d26565b6112909190613d94565b8110156112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c990613ec2565b60405180910390fd5b80600c8190555081600a819055505050565b5f806112ee611d54565b90505f6112fb8286611a75565b905083811015611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133790613f50565b60405180910390fd5b61134d8286868403611d5b565b60019250505092915050565b611361612bef565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690613fb8565b60405180910390fd5b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7e93f456cc9a7cd16cdd07852911879883f53eb9b4643c9df90615542d46e95d60405160405180910390a35050565b5f806114bd611d54565b90506114ca818585611fa9565b600191505092915050565b6114dd612bef565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290613fb8565b60405180910390fd5b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a35050565b600d5f9054906101000a900460ff1681565b611649612bef565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516116e391906136c0565b60405180910390a25050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61171c612bef565b8260138190555081601481905550806015819055506015546014546013546117449190613a35565b61174e9190613a35565b601281905550601254601981905550600a60125411156117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a90613ad8565b60405180910390fd5b505050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6117db612bef565b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161181591906137d4565b602060405180830381865afa158015611830573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118549190613fd6565b11611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b9061404b565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118ce91906137d4565b602060405180830381865afa1580156118e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190d9190613fd6565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161194a929190613bc4565b6020604051808303815f875af1158015611966573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061198a9190613bff565b505050565b5f611998612bef565b620186a060016119a6610a34565b6119b09190613d26565b6119ba9190613d94565b8210156119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f3906140d9565b60405180910390fd5b6103e86005611a09610a34565b611a139190613d26565b611a1d9190613d94565b821115611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5690614167565b60405180910390fd5b81600b8190555060019050919050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b611b05612bef565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90613fb8565b60405180910390fd5b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a35050565b611c5f612bef565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc4906141f5565b60405180910390fd5b611cd681612c6d565b50565b611ce1612bef565b5f3373ffffffffffffffffffffffffffffffffffffffff1647604051611d0690614240565b5f6040518083038185875af1925050503d805f8114611d40576040519150601f19603f3d011682016040523d82523d5f602084013e611d45565b606091505b50508091505050565b600c5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc0906142c4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90614352565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f11919061375c565b60405180910390a3505050565b5f611f298484611a75565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611fa35781811015611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8c906143ba565b60405180910390fd5b611fa28484848403611d5b565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200e90614448565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c906144d6565b60405180910390fd5b5f810361209c5761209783835f612dce565b612a27565b6120a461114c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561211257506120e261114c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561214a57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612184575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561219d5750600660149054906101000a900460ff16155b1561256a57600d5f9054906101000a900460ff1661229057601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806122505750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61228f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122869061453e565b60405180910390fd5b5b601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561232d5750601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123d457600a54811115612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e906145cc565b60405180910390fd5b600c5461238383610b4c565b8261238e9190613a35565b11156123cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c690614634565b60405180910390fd5b612569565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124715750601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156124c057600a548111156124bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b2906146c2565b60405180910390fd5b612568565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661256757600c5461251a83610b4c565b826125259190613a35565b1115612566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255d90614634565b60405180910390fd5b5b5b5b5b5f61257430610b4c565b90505f600b5482101590508080156125985750600d60019054906101000a900460ff165b80156125b15750600660149054906101000a900460ff16155b80156126045750601c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156126575750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156126aa5750601a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156126ed576001600660146101000a81548160ff0219169083151502179055506126d261303a565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff16159050601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061279c5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156127a5575f90505b5f8115612a0e57601c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561280357505f601254115b156128cd576128306064612822601254886132c690919063ffffffff16565b6132db90919063ffffffff16565b9050601254601554826128439190613d26565b61284d9190613d94565b60185f82825461285d9190613a35565b92505081905550601254601354826128759190613d26565b61287f9190613d94565b60165f82825461288f9190613a35565b92505081905550601254601454826128a79190613d26565b6128b19190613d94565b60175f8282546128c19190613a35565b925050819055506129eb565b601c5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561292457505f600e54115b156129ea576129516064612943600e54886132c690919063ffffffff16565b6132db90919063ffffffff16565b9050600e54601154826129649190613d26565b61296e9190613d94565b60185f82825461297e9190613a35565b92505081905550600e54600f54826129969190613d26565b6129a09190613d94565b60165f8282546129b09190613a35565b92505081905550600e54601054826129c89190613d26565b6129d29190613d94565b60175f8282546129e29190613a35565b925050819055505b5b5f8111156129ff576129fe873083612dce565b5b8085612a0b91906146e0565b94505b612a19878787612dce565b601954601281905550505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9190614783565b60405180910390fd5b612aa5825f836132f0565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1f90614811565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bd7919061375c565b60405180910390a3612bea835f846132f5565b505050565b612bf7611d54565b73ffffffffffffffffffffffffffffffffffffffff16612c1561114c565b73ffffffffffffffffffffffffffffffffffffffff1614612c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6290614879565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3390614448565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea1906144d6565b60405180910390fd5b612eb58383836132f0565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2f90614907565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613021919061375c565b60405180910390a36130348484846132f5565b50505050565b5f61304430610b4c565b90505f60175460165460185461305a9190613a35565b6130649190613a35565b90505f8083148061307457505f82145b15613081575050506132c4565b6014600b546130909190613d26565b8311156130a9576014600b546130a69190613d26565b92505b6130b2836132fa565b5f4790505f6130de846130d0601754856132c690919063ffffffff16565b6132db90919063ffffffff16565b90505f613108856130fa601854866132c690919063ffffffff16565b6132db90919063ffffffff16565b90505f6016819055505f6017819055505f60188190555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161316490614240565b5f6040518083038185875af1925050503d805f811461319e576040519150601f19603f3d011682016040523d82523d5f602084013e6131a3565b606091505b50508094505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516131ee90614240565b5f6040518083038185875af1925050503d805f8114613228576040519150601f19603f3d011682016040523d82523d5f602084013e61322d565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161327890614240565b5f6040518083038185875af1925050503d805f81146132b2576040519150601f19603f3d011682016040523d82523d5f602084013e6132b7565b606091505b5050809450505050505050505b565b5f81836132d39190613d26565b905092915050565b5f81836132e89190613d94565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561331657613315614925565b5b6040519080825280602002602001820160405280156133445781602001602082028036833780820191505090505b50905030815f8151811061335b5761335a614952565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134229190613b72565b8160018151811061343657613435614952565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061349b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d5b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016134fc959493929190614a36565b5f604051808303815f87803b158015613513575f80fd5b505af1158015613525573d5f803e3d5ffd5b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613564578082015181840152602081019050613549565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135898261352d565b6135938185613537565b93506135a3818560208601613547565b6135ac8161356f565b840191505092915050565b5f6020820190508181035f8301526135cf818461357f565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613604826135db565b9050919050565b613614816135fa565b811461361e575f80fd5b50565b5f8135905061362f8161360b565b92915050565b5f819050919050565b61364781613635565b8114613651575f80fd5b50565b5f813590506136628161363e565b92915050565b5f806040838503121561367e5761367d6135d7565b5b5f61368b85828601613621565b925050602061369c85828601613654565b9150509250929050565b5f8115159050919050565b6136ba816136a6565b82525050565b5f6020820190506136d35f8301846136b1565b92915050565b5f819050919050565b5f6136fc6136f76136f2846135db565b6136d9565b6135db565b9050919050565b5f61370d826136e2565b9050919050565b5f61371e82613703565b9050919050565b61372e81613714565b82525050565b5f6020820190506137475f830184613725565b92915050565b61375681613635565b82525050565b5f60208201905061376f5f83018461374d565b92915050565b5f805f6060848603121561378c5761378b6135d7565b5b5f61379986828701613621565b93505060206137aa86828701613621565b92505060406137bb86828701613654565b9150509250925092565b6137ce816135fa565b82525050565b5f6020820190506137e75f8301846137c5565b92915050565b5f60ff82169050919050565b613802816137ed565b82525050565b5f60208201905061381b5f8301846137f9565b92915050565b5f60208284031215613836576138356135d7565b5b5f61384384828501613654565b91505092915050565b5f60208284031215613861576138606135d7565b5b5f61386e84828501613621565b91505092915050565b613880816136a6565b811461388a575f80fd5b50565b5f8135905061389b81613877565b92915050565b5f80604083850312156138b7576138b66135d7565b5b5f6138c485828601613621565b92505060206138d58582860161388d565b9150509250929050565b5f805f606084860312156138f6576138f56135d7565b5b5f61390386828701613654565b935050602061391486828701613654565b925050604061392586828701613654565b9150509250925092565b5f8060408385031215613945576139446135d7565b5b5f61395285828601613654565b925050602061396385828601613654565b9150509250929050565b5f8060408385031215613983576139826135d7565b5b5f61399085828601613621565b92505060206139a185828601613621565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806139ef57607f821691505b602082108103613a0257613a016139ab565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613a3f82613635565b9150613a4a83613635565b9250828201905080821115613a6257613a61613a08565b5b92915050565b7f45524332303a204d757374206b656570206665657320617420313025206f72205f8201527f6c65737300000000000000000000000000000000000000000000000000000000602082015250565b5f613ac2602483613537565b9150613acd82613a68565b604082019050919050565b5f6020820190508181035f830152613aef81613ab6565b9050919050565b7f54726164696e6720616c7265616479206163746976652e0000000000000000005f82015250565b5f613b2a601783613537565b9150613b3582613af6565b602082019050919050565b5f6020820190508181035f830152613b5781613b1e565b9050919050565b5f81519050613b6c8161360b565b92915050565b5f60208284031215613b8757613b866135d7565b5b5f613b9484828501613b5e565b91505092915050565b5f604082019050613bb05f8301856137c5565b613bbd60208301846137c5565b9392505050565b5f604082019050613bd75f8301856137c5565b613be4602083018461374d565b9392505050565b5f81519050613bf981613877565b92915050565b5f60208284031215613c1457613c136135d7565b5b5f613c2184828501613beb565b91505092915050565b5f819050919050565b5f613c4d613c48613c4384613c2a565b6136d9565b613635565b9050919050565b613c5d81613c33565b82525050565b5f60c082019050613c765f8301896137c5565b613c83602083018861374d565b613c906040830187613c54565b613c9d6060830186613c54565b613caa60808301856137c5565b613cb760a083018461374d565b979650505050505050565b5f81519050613cd08161363e565b92915050565b5f805f60608486031215613ced57613cec6135d7565b5b5f613cfa86828701613cc2565b9350506020613d0b86828701613cc2565b9250506040613d1c86828701613cc2565b9150509250925092565b5f613d3082613635565b9150613d3b83613635565b9250828202613d4981613635565b91508282048414831517613d6057613d5f613a08565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d9e82613635565b9150613da983613635565b925082613db957613db8613d67565b5b828204905092915050565b7f45524332303a2043616e6e6f7420736574206d617854786e206c6f77657220745f8201527f68616e20302e3525000000000000000000000000000000000000000000000000602082015250565b5f613e1e602883613537565b9150613e2982613dc4565b604082019050919050565b5f6020820190508181035f830152613e4b81613e12565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f77655f8201527f72207468616e20302e3525000000000000000000000000000000000000000000602082015250565b5f613eac602b83613537565b9150613eb782613e52565b604082019050919050565b5f6020820190508181035f830152613ed981613ea0565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613f3a602583613537565b9150613f4582613ee0565b604082019050919050565b5f6020820190508181035f830152613f6781613f2e565b9050919050565b7f45524332303a20416464726573732030000000000000000000000000000000005f82015250565b5f613fa2601083613537565b9150613fad82613f6e565b602082019050919050565b5f6020820190508181035f830152613fcf81613f96565b9050919050565b5f60208284031215613feb57613fea6135d7565b5b5f613ff884828501613cc2565b91505092915050565b7f4e6f20746f6b656e7300000000000000000000000000000000000000000000005f82015250565b5f614035600983613537565b915061404082614001565b602082019050919050565b5f6020820190508181035f83015261406281614029565b9050919050565b7f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f775f8201527f6572207468616e20302e3030312520746f74616c20737570706c792e00000000602082015250565b5f6140c3603c83613537565b91506140ce82614069565b604082019050919050565b5f6020820190508181035f8301526140f0816140b7565b9050919050565b7f45524332303a205377617020616d6f756e742063616e6e6f74206265206869675f8201527f686572207468616e20302e352520746f74616c20737570706c792e0000000000602082015250565b5f614151603b83613537565b915061415c826140f7565b604082019050919050565b5f6020820190508181035f83015261417e81614145565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6141df602683613537565b91506141ea82614185565b604082019050919050565b5f6020820190508181035f83015261420c816141d3565b9050919050565b5f81905092915050565b50565b5f61422b5f83614213565b91506142368261421d565b5f82019050919050565b5f61424a82614220565b9150819050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6142ae602483613537565b91506142b982614254565b604082019050919050565b5f6020820190508181035f8301526142db816142a2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61433c602283613537565b9150614347826142e2565b604082019050919050565b5f6020820190508181035f83015261436981614330565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6143a4601d83613537565b91506143af82614370565b602082019050919050565b5f6020820190508181035f8301526143d181614398565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614432602583613537565b915061443d826143d8565b604082019050919050565b5f6020820190508181035f83015261445f81614426565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6144c0602383613537565b91506144cb82614466565b604082019050919050565b5f6020820190508181035f8301526144ed816144b4565b9050919050565b7f45524332303a2054726164696e67206973206e6f74206163746976652e0000005f82015250565b5f614528601d83613537565b9150614533826144f4565b602082019050919050565b5f6020820190508181035f8301526145558161451c565b9050919050565b7f45524332303a20427579207472616e7366657220616d6f756e742065786365655f8201527f647320746865206d61785472616e73616374696f6e416d6f756e742e00000000602082015250565b5f6145b6603c83613537565b91506145c18261455c565b604082019050919050565b5f6020820190508181035f8301526145e3816145aa565b9050919050565b7f45524332303a204d61782077616c6c65742065786365656465640000000000005f82015250565b5f61461e601a83613537565b9150614629826145ea565b602082019050919050565b5f6020820190508181035f83015261464b81614612565b9050919050565b7f45524332303a2053656c6c207472616e7366657220616d6f756e7420657863655f8201527f65647320746865206d61785472616e73616374696f6e416d6f756e742e000000602082015250565b5f6146ac603d83613537565b91506146b782614652565b604082019050919050565b5f6020820190508181035f8301526146d9816146a0565b9050919050565b5f6146ea82613635565b91506146f583613635565b925082820390508181111561470d5761470c613a08565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61476d602183613537565b915061477882614713565b604082019050919050565b5f6020820190508181035f83015261479a81614761565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f6147fb602283613537565b9150614806826147a1565b604082019050919050565b5f6020820190508181035f830152614828816147ef565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614863602083613537565b915061486e8261482f565b602082019050919050565b5f6020820190508181035f83015261489081614857565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6148f1602683613537565b91506148fc82614897565b604082019050919050565b5f6020820190508181035f83015261491e816148e5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6149b1816135fa565b82525050565b5f6149c283836149a8565b60208301905092915050565b5f602082019050919050565b5f6149e48261497f565b6149ee8185614989565b93506149f983614999565b805f5b83811015614a29578151614a1088826149b7565b9750614a1b836149ce565b9250506001810190506149fc565b5085935050505092915050565b5f60a082019050614a495f83018861374d565b614a566020830187613c54565b8181036040830152614a6881866149da565b9050614a7760608301856137c5565b614a84608083018461374d565b969550505050505056fea2646970667358221220ebab346187bb8b3cf703bf0b67ad61ce983fe9d7f666ff07ce3910ceb82c39b964736f6c63430008150033
Deployed Bytecode Sourcemap
34836:14525:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9486:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11994:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34915:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10618:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12817:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35008:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10459:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13522:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38608:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34973:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43710:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35568:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35374:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10790:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2836:103;;;;;;;;;;;;;:::i;:::-;;40656:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35102:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40832:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38700:911;;;;;;;;;;;;;:::i;:::-;;2193:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9706:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40140:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14296:506;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42522:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11174:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41820:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35334:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42865:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35139:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41283:528;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35178:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35218:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43248:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39620:511;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35415:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11472:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35260:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42163:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3095:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43056:183;;;;;;;;;;;;;:::i;:::-;;35300:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9486:100;9540:13;9573:5;9566:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9486:100;:::o;11994:242::-;12113:4;12135:13;12151:12;:10;:12::i;:::-;12135:28;;12174:32;12183:5;12190:7;12199:6;12174:8;:32::i;:::-;12224:4;12217:11;;;11994:242;;;;:::o;34915:51::-;;;:::o;10618:108::-;10679:7;10706:12;;10699:19;;10618:108;:::o;12817:295::-;12948:4;12965:15;12983:12;:10;:12::i;:::-;12965:30;;13006:38;13022:4;13028:7;13037:6;13006:15;:38::i;:::-;13055:27;13065:4;13071:2;13075:6;13055:9;:27::i;:::-;13100:4;13093:11;;;12817:295;;;;;:::o;35008:53::-;35054:6;35008:53;:::o;10459:93::-;10517:5;10542:2;10535:9;;10459:93;:::o;13522:270::-;13637:4;13659:13;13675:12;:10;:12::i;:::-;13659:28;;13698:64;13707:5;13714:7;13751:10;13723:25;13733:5;13740:7;13723:9;:25::i;:::-;:38;;;;:::i;:::-;13698:8;:64::i;:::-;13780:4;13773:11;;;13522:270;;;;:::o;38608:83::-;38658:25;38664:10;38676:6;38658:5;:25::i;:::-;38608:83;:::o;34973:28::-;;;;;;;;;;;;;:::o;43710:126::-;43776:4;43800:19;:28;43820:7;43800:28;;;;;;;;;;;;;;;;;;;;;;;;;43793:35;;43710:126;;;:::o;35568:28::-;;;;:::o;35374:31::-;;;;;;;;;;;;;:::o;10790:177::-;10909:7;10941:9;:18;10951:7;10941:18;;;;;;;;;;;;;;;;10934:25;;10790:177;;;:::o;2836:103::-;2078:13;:11;:13::i;:::-;2901:30:::1;2928:1;2901:18;:30::i;:::-;2836:103::o:0;40656:167::-;2078:13;:11;:13::i;:::-;40811:4:::1;40769:31;:39;40801:6;40769:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40656:167:::0;;:::o;35102:30::-;;;;;;;;;;;;;:::o;40832:442::-;2078:13;:11;:13::i;:::-;41008::::1;40990:15;:31;;;;41052:15;41032:17;:35;;;;41096:13;41078:15;:31;;;;41173:15;;41153:17;;41135:15;;:35;;;;:::i;:::-;:53;;;;:::i;:::-;41120:12;:68;;;;41223:2;41207:12;;:18;;41199:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40832:442:::0;;;:::o;38700:911::-;2078:13;:11;:13::i;:::-;38764::::1;;;;;;;;;;;38763:14;38755:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;38853:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38835:55;;;38913:4;38933:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38835:131;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38819:13;;:147;;;;;;;;;;;;;;;;;;38977:66;38994:4;39009:13;;;;;;;;;;;39025:17;38977:8;:66::i;:::-;39061:13;;;;;;;;;;;39054:29;;;39106:15;39137:17;39054:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39179:58;39216:13;;;;;;;;;;;39232:4;39179:28;:58::i;:::-;39248:55;39282:13;;;;;;;;;;;39298:4;39248:25;:55::i;:::-;39317:15;:31;;;39356:21;39401:4;39421:24;39439:4;39421:9;:24::i;:::-;39460:1;39476::::0;39492:7:::1;:5;:7::i;:::-;39514:15;39317:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39570:4;39554:13;;:20;;;;;;;;;;;;;;;;;;39599:4;39585:11;;:18;;;;;;;;;;;;;;;;;;38700:911::o:0;2193:87::-;2239:7;2266:6;;;;;;;;;;;2259:13;;2193:87;:::o;9706:104::-;9762:13;9795:7;9788:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9706:104;:::o;40140:507::-;2078:13;:11;:13::i;:::-;40334:4:::1;40329:1;40313:13;:11;:13::i;:::-;:17;;;;:::i;:::-;40312:26;;;;:::i;:::-;40298:9;:41;;40276:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;40482:4;40477:1;40461:13;:11;:13::i;:::-;:17;;;;:::i;:::-;40460:26;;;;:::i;:::-;40440:15;:47;;40418:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40581:15;40569:9;:27;;;;40630:9;40607:20;:32;;;;40140:507:::0;;:::o;14296:506::-;14416:4;14438:13;14454:12;:10;:12::i;:::-;14438:28;;14477:24;14504:25;14514:5;14521:7;14504:9;:25::i;:::-;14477:52;;14582:15;14562:16;:35;;14540:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14698:60;14707:5;14714:7;14742:15;14723:16;:34;14698:8;:60::i;:::-;14790:4;14783:11;;;;14296:506;;;;:::o;42522:334::-;2078:13;:11;:13::i;:::-;42668:1:::1;42640:30;;:16;:30;;::::0;42632:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42702:17;42722:15;;;;;;;;;;;42702:35;;42766:16;42748:15;;:34;;;;;;;;;;;;;;;;;;42838:9;42798:50;;42821:15;;;;;;;;;;;42798:50;;;;;;;;;;;;42621:235;42522:334:::0;:::o;11174:234::-;11289:4;11311:13;11327:12;:10;:12::i;:::-;11311:28;;11350;11360:5;11367:2;11371:6;11350:9;:28::i;:::-;11396:4;11389:11;;;11174:234;;;;:::o;41820:334::-;2078:13;:11;:13::i;:::-;41966:1:::1;41938:30;;:16;:30;;::::0;41930:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42000:17;42020:15;;;;;;;;;;;42000:35;;42064:16;42046:15;;:34;;;;;;;;;;;;;;;;;;42136:9;42096:50;;42119:15;;;;;;;;;;;42096:50;;;;;;;;;;;;41919:235;41820:334:::0;:::o;35334:33::-;;;;;;;;;;;;;:::o;42865:182::-;2078:13;:11;:13::i;:::-;42981:8:::1;42950:19;:28;42970:7;42950:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43021:7;43005:34;;;43030:8;43005:34;;;;;;:::i;:::-;;;;;;;;42865:182:::0;;:::o;35139:32::-;;;;;;;;;;;;;:::o;41283:528::-;2078:13;:11;:13::i;:::-;41461::::1;41442:16;:32;;;;41506:15;41485:18;:36;;;;41551:13;41532:16;:32;;;;41670:16;;41636:18;;41604:16;;:50;;;;:::i;:::-;:82;;;;:::i;:::-;41575:13;:111;;;;41711:13;;41697:11;:27;;;;41760:2;41743:13;;:19;;41735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41283:528:::0;;;:::o;35178:30::-;;;;;;;;;;;;;:::o;35218:35::-;;;;:::o;43248:255::-;2078:13;:11;:13::i;:::-;43365:1:::1;43333:3;43326:21;;;43356:4;43326:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;43318:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43391:14;43415:3;43408:21;;;43438:4;43408:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43391:53;;43462:3;43455:20;;;43476:10;43488:6;43455:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43307:196;43248:255:::0;:::o;39620:511::-;39728:4;2078:13;:11;:13::i;:::-;39807:6:::1;39802:1;39786:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39785:28;;;;:::i;:::-;39772:9;:41;;39750:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;39969:4;39964:1;39948:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39947:26;;;;:::i;:::-;39934:9;:39;;39912:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;40092:9;40071:18;:30;;;;40119:4;40112:11;;39620:511:::0;;;:::o;35415:27::-;;;;:::o;11472:201::-;11606:7;11638:11;:18;11650:5;11638:18;;;;;;;;;;;;;;;:27;11657:7;11638:27;;;;;;;;;;;;;;;;11631:34;;11472:201;;;;:::o;35260:33::-;;;;:::o;42163:350::-;2078:13;:11;:13::i;:::-;42315:1:::1;42285:32;;:18;:32;;::::0;42277:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42349:17;42369;;;;;;;;;;;42349:37;;42417:18;42397:17;;:38;;;;;;;;;;;;;;;;;;42495:9;42451:54;;42476:17;;;;;;;;;;;42451:54;;;;;;;;;;;;42266:247;42163:350:::0;:::o;3095:238::-;2078:13;:11;:13::i;:::-;3218:1:::1;3198:22;;:8;:22;;::::0;3176:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3297:28;3316:8;3297:18;:28::i;:::-;3095:238:::0;:::o;43056:183::-;2078:13;:11;:13::i;:::-;43112:12:::1;43157:10;43149:24;;43181:21;43149:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43135:96;;;;;43101:138;43056:183::o:0;35300:24::-;;;;:::o;728:98::-;781:7;808:10;801:17;;728:98;:::o;18445:381::-;18598:1;18581:19;;:5;:19;;;18573:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18679:1;18660:21;;:7;:21;;;18652:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18764:6;18734:11;:18;18746:5;18734:18;;;;;;;;;;;;;;;:27;18753:7;18734:27;;;;;;;;;;;;;;;:36;;;;18802:7;18786:32;;18795:5;18786:32;;;18811:6;18786:32;;;;;;:::i;:::-;;;;;;;;18445:381;;;:::o;19118:502::-;19253:24;19280:25;19290:5;19297:7;19280:9;:25::i;:::-;19253:52;;19340:17;19320:16;:37;19316:297;;19420:6;19400:16;:26;;19374:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;19535:51;19544:5;19551:7;19579:6;19560:16;:25;19535:8;:51::i;:::-;19316:297;19242:378;19118:502;;;:::o;43845:3753::-;43993:1;43977:18;;:4;:18;;;43969:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44070:1;44056:16;;:2;:16;;;44048:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44140:1;44130:6;:11;44126:93;;44158:28;44174:4;44180:2;44184:1;44158:15;:28::i;:::-;44201:7;;44126:93;44258:7;:5;:7::i;:::-;44250:15;;:4;:15;;;;:45;;;;;44288:7;:5;:7::i;:::-;44282:13;;:2;:13;;;;44250:45;:78;;;;;44326:1;44312:16;;:2;:16;;;;44250:78;:112;;;;;35054:6;44345:17;;:2;:17;;;;44250:112;:138;;;;;44380:8;;;;;;;;;;;44379:9;44250:138;44232:1512;;;44420:13;;;;;;;;;;;44415:210;;44484:19;:25;44504:4;44484:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;44513:19;:23;44533:2;44513:23;;;;;;;;;;;;;;;;;;;;;;;;;44484:52;44454:155;;;;;;;;;;;;:::i;:::-;;;;;;;;;44415:210;44688:25;:31;44714:4;44688:31;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;44741:31;:35;44773:2;44741:35;;;;;;;;;;;;;;;;;;;;;;;;;44740:36;44688:88;44666:1067;;;44851:20;;44841:6;:30;;44811:164;;;;;;;;;;;;:::i;:::-;;;;;;;;;45050:9;;45033:13;45043:2;45033:9;:13::i;:::-;45024:6;:22;;;;:::i;:::-;:35;;44994:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;44666:1067;;;45211:25;:29;45237:2;45211:29;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;45262:31;:37;45294:4;45262:37;;;;;;;;;;;;;;;;;;;;;;;;;45261:38;45211:88;45189:544;;;45374:20;;45364:6;:30;;45334:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;45189:544;;;45526:31;:35;45558:2;45526:35;;;;;;;;;;;;;;;;;;;;;;;;;45521:212;;45638:9;;45621:13;45631:2;45621:9;:13::i;:::-;45612:6;:22;;;;:::i;:::-;:35;;45582:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;45521:212;45189:544;44666:1067;44232:1512;45757:28;45788:24;45806:4;45788:9;:24::i;:::-;45757:55;;45826:12;45865:18;;45841:20;:42;;45826:57;;45915:7;:35;;;;;45939:11;;;;;;;;;;;45915:35;:61;;;;;45968:8;;;;;;;;;;;45967:9;45915:61;:110;;;;;45994:25;:31;46020:4;45994:31;;;;;;;;;;;;;;;;;;;;;;;;;45993:32;45915:110;:153;;;;;46043:19;:25;46063:4;46043:25;;;;;;;;;;;;;;;;;;;;;;;;;46042:26;45915:153;:194;;;;;46086:19;:23;46106:2;46086:23;;;;;;;;;;;;;;;;;;;;;;;;;46085:24;45915:194;45897:328;;;46147:4;46136:8;;:15;;;;;;;;;;;;;;;;;;46169:10;:8;:10::i;:::-;46208:5;46197:8;;:16;;;;;;;;;;;;;;;;;;45897:328;46238:12;46254:8;;;;;;;;;;;46253:9;46238:24;;46280:19;:25;46300:4;46280:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;46309:19;:23;46329:2;46309:23;;;;;;;;;;;;;;;;;;;;;;;;;46280:52;46276:100;;;46359:5;46349:15;;46276:100;46389:12;46423:7;46419:1087;;;46475:25;:29;46501:2;46475:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;46524:1;46508:13;;:17;46475:50;46471:884;;;46553:34;46583:3;46553:25;46564:13;;46553:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;46546:41;;46656:13;;46636:16;;46629:4;:23;;;;:::i;:::-;46628:41;;;;:::i;:::-;46606:18;;:63;;;;;;;:::i;:::-;;;;;;;;46738:13;;46718:16;;46711:4;:23;;;;:::i;:::-;46710:41;;;;:::i;:::-;46688:18;;:63;;;;;;;:::i;:::-;;;;;;;;46866:13;;46823:18;;46816:4;:25;;;;:::i;:::-;46815:64;;;;:::i;:::-;46770:20;;:109;;;;;;;:::i;:::-;;;;;;;;46471:884;;;46941:25;:31;46967:4;46941:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;46991:1;46976:12;;:16;46941:51;46937:418;;;47020:33;47049:3;47020:24;47031:12;;47020:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;47013:40;;47121:12;;47102:15;;47095:4;:22;;;;:::i;:::-;47094:39;;;;:::i;:::-;47072:18;;:61;;;;;;;:::i;:::-;;;;;;;;47201:12;;47182:15;;47175:4;:22;;;;:::i;:::-;47174:39;;;;:::i;:::-;47152:18;;:61;;;;;;;:::i;:::-;;;;;;;;47327:12;;47285:17;;47278:4;:24;;;;:::i;:::-;47277:62;;;;:::i;:::-;47232:20;;:107;;;;;;;:::i;:::-;;;;;;;;46937:418;46471:884;47383:1;47376:4;:8;47372:91;;;47405:42;47421:4;47435;47442;47405:15;:42::i;:::-;47372:91;47490:4;47480:14;;;;;:::i;:::-;;;46419:1087;47519:33;47535:4;47541:2;47545:6;47519:15;:33::i;:::-;47579:11;;47563:13;:27;;;;43958:3640;;;;43845:3753;;;;:::o;17327:679::-;17430:1;17411:21;;:7;:21;;;17403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17484:49;17505:7;17522:1;17526:6;17484:20;:49::i;:::-;17547:22;17572:9;:18;17582:7;17572:18;;;;;;;;;;;;;;;;17547:43;;17627:6;17609:14;:24;;17601:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17746:6;17729:14;:23;17708:9;:18;17718:7;17708:18;;;;;;;;;;;;;;;:44;;;;17863:6;17847:12;;:22;;;;;;;;;;;17925:1;17899:37;;17908:7;17899:37;;;17929:6;17899:37;;;;;;:::i;:::-;;;;;;;;17950:48;17970:7;17987:1;17991:6;17950:19;:48::i;:::-;17392:614;17327:679;;:::o;2359:132::-;2434:12;:10;:12::i;:::-;2423:23;;:7;:5;:7::i;:::-;:23;;;2415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2359:132::o;3494:191::-;3568:16;3587:6;;;;;;;;;;;3568:25;;3613:8;3604:6;;:17;;;;;;;;;;;;;;;;;;3668:8;3637:40;;3658:8;3637:40;;;;;;;;;;;;3557:128;3494:191;:::o;43512:189::-;43629:5;43595:25;:31;43621:4;43595:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43687:5;43653:40;;43681:4;43653:40;;;;;;;;;;;;43512:189;;:::o;15273:881::-;15420:1;15404:18;;:4;:18;;;15396:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15497:1;15483:16;;:2;:16;;;15475:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15553:38;15574:4;15580:2;15584:6;15553:20;:38::i;:::-;15605:19;15627:9;:15;15637:4;15627:15;;;;;;;;;;;;;;;;15605:37;;15690:6;15675:11;:21;;15653:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;15830:6;15816:11;:20;15798:9;:15;15808:4;15798:15;;;;;;;;;;;;;;;:38;;;;16033:6;16016:9;:13;16026:2;16016:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;16084:2;16069:26;;16078:4;16069:26;;;16088:6;16069:26;;;;;;:::i;:::-;;;;;;;;16109:37;16129:4;16135:2;16139:6;16109:19;:37::i;:::-;15385:769;15273:881;;;:::o;48119:1239::-;48158:23;48184:24;48202:4;48184:9;:24::i;:::-;48158:50;;48219:25;48315:20;;48281:18;;48247;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;48219:116;;48346:12;48395:1;48376:15;:20;:46;;;;48421:1;48400:17;:22;48376:46;48372:85;;;48439:7;;;;;48372:85;48513:2;48492:18;;:23;;;;:::i;:::-;48474:15;:41;48470:115;;;48571:2;48550:18;;:23;;;;:::i;:::-;48532:41;;48470:115;48598:33;48615:15;48598:16;:33::i;:::-;48645:18;48666:21;48645:42;;48701:25;48729:83;48784:17;48729:36;48744:20;;48729:10;:14;;:36;;;;:::i;:::-;:40;;:83;;;;:::i;:::-;48701:111;;48826:23;48852:81;48905:17;48852:34;48867:18;;48852:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;48826:107;;48968:1;48947:18;:22;;;;49003:1;48980:20;:24;;;;49036:1;49015:18;:22;;;;49073:15;;;;;;;;;;;49065:29;;49102:15;49065:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49051:71;;;;;49158:17;;;;;;;;;;;49150:31;;49189:17;49150:85;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49136:99;;;;;49271:15;;;;;;;;;;;49263:29;;49314:21;49263:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49249:101;;;;;48147:1211;;;;;;48119:1239;:::o;24809:98::-;24867:7;24898:1;24894;:5;;;;:::i;:::-;24887:12;;24809:98;;;;:::o;25209:::-;25267:7;25298:1;25294;:5;;;;:::i;:::-;25287:12;;25209:98;;;;:::o;20221:125::-;;;;:::o;20951:124::-;;;;:::o;47607:503::-;47673:21;47711:1;47697:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47673:40;;47742:4;47724;47729:1;47724:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;47768:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47758:4;47763:1;47758:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;47804:62;47821:4;47836:15;47854:11;47804:8;:62::i;:::-;47906:15;:66;;;47987:11;48013:1;48029:4;48056;48076:15;47906:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47662:448;47607:503;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:118::-;5488:24;5506:5;5488:24;:::i;:::-;5483:3;5476:37;5401:118;;:::o;5525:222::-;5618:4;5656:2;5645:9;5641:18;5633:26;;5669:71;5737:1;5726:9;5722:17;5713:6;5669:71;:::i;:::-;5525:222;;;;:::o;5753:86::-;5788:7;5828:4;5821:5;5817:16;5806:27;;5753:86;;;:::o;5845:112::-;5928:22;5944:5;5928:22;:::i;:::-;5923:3;5916:35;5845:112;;:::o;5963:214::-;6052:4;6090:2;6079:9;6075:18;6067:26;;6103:67;6167:1;6156:9;6152:17;6143:6;6103:67;:::i;:::-;5963:214;;;;:::o;6183:329::-;6242:6;6291:2;6279:9;6270:7;6266:23;6262:32;6259:119;;;6297:79;;:::i;:::-;6259:119;6417:1;6442:53;6487:7;6478:6;6467:9;6463:22;6442:53;:::i;:::-;6432:63;;6388:117;6183:329;;;;:::o;6518:::-;6577:6;6626:2;6614:9;6605:7;6601:23;6597:32;6594:119;;;6632:79;;:::i;:::-;6594:119;6752:1;6777:53;6822:7;6813:6;6802:9;6798:22;6777:53;:::i;:::-;6767:63;;6723:117;6518:329;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:474::-;8281:6;8289;8338:2;8326:9;8317:7;8313:23;8309:32;8306:119;;;8344:79;;:::i;:::-;8306:119;8464:1;8489:53;8534:7;8525:6;8514:9;8510:22;8489:53;:::i;:::-;8479:63;;8435:117;8591:2;8617:53;8662:7;8653:6;8642:9;8638:22;8617:53;:::i;:::-;8607:63;;8562:118;8213:474;;;;;:::o;8693:::-;8761:6;8769;8818:2;8806:9;8797:7;8793:23;8789:32;8786:119;;;8824:79;;:::i;:::-;8786:119;8944:1;8969:53;9014:7;9005:6;8994:9;8990:22;8969:53;:::i;:::-;8959:63;;8915:117;9071:2;9097:53;9142:7;9133:6;9122:9;9118:22;9097:53;:::i;:::-;9087:63;;9042:118;8693:474;;;;;:::o;9173:180::-;9221:77;9218:1;9211:88;9318:4;9315:1;9308:15;9342:4;9339:1;9332:15;9359:320;9403:6;9440:1;9434:4;9430:12;9420:22;;9487:1;9481:4;9477:12;9508:18;9498:81;;9564:4;9556:6;9552:17;9542:27;;9498:81;9626:2;9618:6;9615:14;9595:18;9592:38;9589:84;;9645:18;;:::i;:::-;9589:84;9410:269;9359:320;;;:::o;9685:180::-;9733:77;9730:1;9723:88;9830:4;9827:1;9820:15;9854:4;9851:1;9844:15;9871:191;9911:3;9930:20;9948:1;9930:20;:::i;:::-;9925:25;;9964:20;9982:1;9964:20;:::i;:::-;9959:25;;10007:1;10004;10000:9;9993:16;;10028:3;10025:1;10022:10;10019:36;;;10035:18;;:::i;:::-;10019:36;9871:191;;;;:::o;10068:223::-;10208:34;10204:1;10196:6;10192:14;10185:58;10277:6;10272:2;10264:6;10260:15;10253:31;10068:223;:::o;10297:366::-;10439:3;10460:67;10524:2;10519:3;10460:67;:::i;:::-;10453:74;;10536:93;10625:3;10536:93;:::i;:::-;10654:2;10649:3;10645:12;10638:19;;10297:366;;;:::o;10669:419::-;10835:4;10873:2;10862:9;10858:18;10850:26;;10922:9;10916:4;10912:20;10908:1;10897:9;10893:17;10886:47;10950:131;11076:4;10950:131;:::i;:::-;10942:139;;10669:419;;;:::o;11094:173::-;11234:25;11230:1;11222:6;11218:14;11211:49;11094:173;:::o;11273:366::-;11415:3;11436:67;11500:2;11495:3;11436:67;:::i;:::-;11429:74;;11512:93;11601:3;11512:93;:::i;:::-;11630:2;11625:3;11621:12;11614:19;;11273:366;;;:::o;11645:419::-;11811:4;11849:2;11838:9;11834:18;11826:26;;11898:9;11892:4;11888:20;11884:1;11873:9;11869:17;11862:47;11926:131;12052:4;11926:131;:::i;:::-;11918:139;;11645:419;;;:::o;12070:143::-;12127:5;12158:6;12152:13;12143:22;;12174:33;12201:5;12174:33;:::i;:::-;12070:143;;;;:::o;12219:351::-;12289:6;12338:2;12326:9;12317:7;12313:23;12309:32;12306:119;;;12344:79;;:::i;:::-;12306:119;12464:1;12489:64;12545:7;12536:6;12525:9;12521:22;12489:64;:::i;:::-;12479:74;;12435:128;12219:351;;;;:::o;12576:332::-;12697:4;12735:2;12724:9;12720:18;12712:26;;12748:71;12816:1;12805:9;12801:17;12792:6;12748:71;:::i;:::-;12829:72;12897:2;12886:9;12882:18;12873:6;12829:72;:::i;:::-;12576:332;;;;;:::o;12914:::-;13035:4;13073:2;13062:9;13058:18;13050:26;;13086:71;13154:1;13143:9;13139:17;13130:6;13086:71;:::i;:::-;13167:72;13235:2;13224:9;13220:18;13211:6;13167:72;:::i;:::-;12914:332;;;;;:::o;13252:137::-;13306:5;13337:6;13331:13;13322:22;;13353:30;13377:5;13353:30;:::i;:::-;13252:137;;;;:::o;13395:345::-;13462:6;13511:2;13499:9;13490:7;13486:23;13482:32;13479:119;;;13517:79;;:::i;:::-;13479:119;13637:1;13662:61;13715:7;13706:6;13695:9;13691:22;13662:61;:::i;:::-;13652:71;;13608:125;13395:345;;;;:::o;13746:85::-;13791:7;13820:5;13809:16;;13746:85;;;:::o;13837:158::-;13895:9;13928:61;13946:42;13955:32;13981:5;13955:32;:::i;:::-;13946:42;:::i;:::-;13928:61;:::i;:::-;13915:74;;13837:158;;;:::o;14001:147::-;14096:45;14135:5;14096:45;:::i;:::-;14091:3;14084:58;14001:147;;:::o;14154:807::-;14403:4;14441:3;14430:9;14426:19;14418:27;;14455:71;14523:1;14512:9;14508:17;14499:6;14455:71;:::i;:::-;14536:72;14604:2;14593:9;14589:18;14580:6;14536:72;:::i;:::-;14618:80;14694:2;14683:9;14679:18;14670:6;14618:80;:::i;:::-;14708;14784:2;14773:9;14769:18;14760:6;14708:80;:::i;:::-;14798:73;14866:3;14855:9;14851:19;14842:6;14798:73;:::i;:::-;14881;14949:3;14938:9;14934:19;14925:6;14881:73;:::i;:::-;14154:807;;;;;;;;;:::o;14967:143::-;15024:5;15055:6;15049:13;15040:22;;15071:33;15098:5;15071:33;:::i;:::-;14967:143;;;;:::o;15116:663::-;15204:6;15212;15220;15269:2;15257:9;15248:7;15244:23;15240:32;15237:119;;;15275:79;;:::i;:::-;15237:119;15395:1;15420:64;15476:7;15467:6;15456:9;15452:22;15420:64;:::i;:::-;15410:74;;15366:128;15533:2;15559:64;15615:7;15606:6;15595:9;15591:22;15559:64;:::i;:::-;15549:74;;15504:129;15672:2;15698:64;15754:7;15745:6;15734:9;15730:22;15698:64;:::i;:::-;15688:74;;15643:129;15116:663;;;;;:::o;15785:410::-;15825:7;15848:20;15866:1;15848:20;:::i;:::-;15843:25;;15882:20;15900:1;15882:20;:::i;:::-;15877:25;;15937:1;15934;15930:9;15959:30;15977:11;15959:30;:::i;:::-;15948:41;;16138:1;16129:7;16125:15;16122:1;16119:22;16099:1;16092:9;16072:83;16049:139;;16168:18;;:::i;:::-;16049:139;15833:362;15785:410;;;;:::o;16201:180::-;16249:77;16246:1;16239:88;16346:4;16343:1;16336:15;16370:4;16367:1;16360:15;16387:185;16427:1;16444:20;16462:1;16444:20;:::i;:::-;16439:25;;16478:20;16496:1;16478:20;:::i;:::-;16473:25;;16517:1;16507:35;;16522:18;;:::i;:::-;16507:35;16564:1;16561;16557:9;16552:14;;16387:185;;;;:::o;16578:227::-;16718:34;16714:1;16706:6;16702:14;16695:58;16787:10;16782:2;16774:6;16770:15;16763:35;16578:227;:::o;16811:366::-;16953:3;16974:67;17038:2;17033:3;16974:67;:::i;:::-;16967:74;;17050:93;17139:3;17050:93;:::i;:::-;17168:2;17163:3;17159:12;17152:19;;16811:366;;;:::o;17183:419::-;17349:4;17387:2;17376:9;17372:18;17364:26;;17436:9;17430:4;17426:20;17422:1;17411:9;17407:17;17400:47;17464:131;17590:4;17464:131;:::i;:::-;17456:139;;17183:419;;;:::o;17608:230::-;17748:34;17744:1;17736:6;17732:14;17725:58;17817:13;17812:2;17804:6;17800:15;17793:38;17608:230;:::o;17844:366::-;17986:3;18007:67;18071:2;18066:3;18007:67;:::i;:::-;18000:74;;18083:93;18172:3;18083:93;:::i;:::-;18201:2;18196:3;18192:12;18185:19;;17844:366;;;:::o;18216:419::-;18382:4;18420:2;18409:9;18405:18;18397:26;;18469:9;18463:4;18459:20;18455:1;18444:9;18440:17;18433:47;18497:131;18623:4;18497:131;:::i;:::-;18489:139;;18216:419;;;:::o;18641:224::-;18781:34;18777:1;18769:6;18765:14;18758:58;18850:7;18845:2;18837:6;18833:15;18826:32;18641:224;:::o;18871:366::-;19013:3;19034:67;19098:2;19093:3;19034:67;:::i;:::-;19027:74;;19110:93;19199:3;19110:93;:::i;:::-;19228:2;19223:3;19219:12;19212:19;;18871:366;;;:::o;19243:419::-;19409:4;19447:2;19436:9;19432:18;19424:26;;19496:9;19490:4;19486:20;19482:1;19471:9;19467:17;19460:47;19524:131;19650:4;19524:131;:::i;:::-;19516:139;;19243:419;;;:::o;19668:166::-;19808:18;19804:1;19796:6;19792:14;19785:42;19668:166;:::o;19840:366::-;19982:3;20003:67;20067:2;20062:3;20003:67;:::i;:::-;19996:74;;20079:93;20168:3;20079:93;:::i;:::-;20197:2;20192:3;20188:12;20181:19;;19840:366;;;:::o;20212:419::-;20378:4;20416:2;20405:9;20401:18;20393:26;;20465:9;20459:4;20455:20;20451:1;20440:9;20436:17;20429:47;20493:131;20619:4;20493:131;:::i;:::-;20485:139;;20212:419;;;:::o;20637:351::-;20707:6;20756:2;20744:9;20735:7;20731:23;20727:32;20724:119;;;20762:79;;:::i;:::-;20724:119;20882:1;20907:64;20963:7;20954:6;20943:9;20939:22;20907:64;:::i;:::-;20897:74;;20853:128;20637:351;;;;:::o;20994:159::-;21134:11;21130:1;21122:6;21118:14;21111:35;20994:159;:::o;21159:365::-;21301:3;21322:66;21386:1;21381:3;21322:66;:::i;:::-;21315:73;;21397:93;21486:3;21397:93;:::i;:::-;21515:2;21510:3;21506:12;21499:19;;21159:365;;;:::o;21530:419::-;21696:4;21734:2;21723:9;21719:18;21711:26;;21783:9;21777:4;21773:20;21769:1;21758:9;21754:17;21747:47;21811:131;21937:4;21811:131;:::i;:::-;21803:139;;21530:419;;;:::o;21955:247::-;22095:34;22091:1;22083:6;22079:14;22072:58;22164:30;22159:2;22151:6;22147:15;22140:55;21955:247;:::o;22208:366::-;22350:3;22371:67;22435:2;22430:3;22371:67;:::i;:::-;22364:74;;22447:93;22536:3;22447:93;:::i;:::-;22565:2;22560:3;22556:12;22549:19;;22208:366;;;:::o;22580:419::-;22746:4;22784:2;22773:9;22769:18;22761:26;;22833:9;22827:4;22823:20;22819:1;22808:9;22804:17;22797:47;22861:131;22987:4;22861:131;:::i;:::-;22853:139;;22580:419;;;:::o;23005:246::-;23145:34;23141:1;23133:6;23129:14;23122:58;23214:29;23209:2;23201:6;23197:15;23190:54;23005:246;:::o;23257:366::-;23399:3;23420:67;23484:2;23479:3;23420:67;:::i;:::-;23413:74;;23496:93;23585:3;23496:93;:::i;:::-;23614:2;23609:3;23605:12;23598:19;;23257:366;;;:::o;23629:419::-;23795:4;23833:2;23822:9;23818:18;23810:26;;23882:9;23876:4;23872:20;23868:1;23857:9;23853:17;23846:47;23910:131;24036:4;23910:131;:::i;:::-;23902:139;;23629:419;;;:::o;24054:225::-;24194:34;24190:1;24182:6;24178:14;24171:58;24263:8;24258:2;24250:6;24246:15;24239:33;24054:225;:::o;24285:366::-;24427:3;24448:67;24512:2;24507:3;24448:67;:::i;:::-;24441:74;;24524:93;24613:3;24524:93;:::i;:::-;24642:2;24637:3;24633:12;24626:19;;24285:366;;;:::o;24657:419::-;24823:4;24861:2;24850:9;24846:18;24838:26;;24910:9;24904:4;24900:20;24896:1;24885:9;24881:17;24874:47;24938:131;25064:4;24938:131;:::i;:::-;24930:139;;24657:419;;;:::o;25082:147::-;25183:11;25220:3;25205:18;;25082:147;;;;:::o;25235:114::-;;:::o;25355:398::-;25514:3;25535:83;25616:1;25611:3;25535:83;:::i;:::-;25528:90;;25627:93;25716:3;25627:93;:::i;:::-;25745:1;25740:3;25736:11;25729:18;;25355:398;;;:::o;25759:379::-;25943:3;25965:147;26108:3;25965:147;:::i;:::-;25958:154;;26129:3;26122:10;;25759:379;;;:::o;26144:223::-;26284:34;26280:1;26272:6;26268:14;26261:58;26353:6;26348:2;26340:6;26336:15;26329:31;26144:223;:::o;26373:366::-;26515:3;26536:67;26600:2;26595:3;26536:67;:::i;:::-;26529:74;;26612:93;26701:3;26612:93;:::i;:::-;26730:2;26725:3;26721:12;26714:19;;26373:366;;;:::o;26745:419::-;26911:4;26949:2;26938:9;26934:18;26926:26;;26998:9;26992:4;26988:20;26984:1;26973:9;26969:17;26962:47;27026:131;27152:4;27026:131;:::i;:::-;27018:139;;26745:419;;;:::o;27170:221::-;27310:34;27306:1;27298:6;27294:14;27287:58;27379:4;27374:2;27366:6;27362:15;27355:29;27170:221;:::o;27397:366::-;27539:3;27560:67;27624:2;27619:3;27560:67;:::i;:::-;27553:74;;27636:93;27725:3;27636:93;:::i;:::-;27754:2;27749:3;27745:12;27738:19;;27397:366;;;:::o;27769:419::-;27935:4;27973:2;27962:9;27958:18;27950:26;;28022:9;28016:4;28012:20;28008:1;27997:9;27993:17;27986:47;28050:131;28176:4;28050:131;:::i;:::-;28042:139;;27769:419;;;:::o;28194:179::-;28334:31;28330:1;28322:6;28318:14;28311:55;28194:179;:::o;28379:366::-;28521:3;28542:67;28606:2;28601:3;28542:67;:::i;:::-;28535:74;;28618:93;28707:3;28618:93;:::i;:::-;28736:2;28731:3;28727:12;28720:19;;28379:366;;;:::o;28751:419::-;28917:4;28955:2;28944:9;28940:18;28932:26;;29004:9;28998:4;28994:20;28990:1;28979:9;28975:17;28968:47;29032:131;29158:4;29032:131;:::i;:::-;29024:139;;28751:419;;;:::o;29176:224::-;29316:34;29312:1;29304:6;29300:14;29293:58;29385:7;29380:2;29372:6;29368:15;29361:32;29176:224;:::o;29406:366::-;29548:3;29569:67;29633:2;29628:3;29569:67;:::i;:::-;29562:74;;29645:93;29734:3;29645:93;:::i;:::-;29763:2;29758:3;29754:12;29747:19;;29406:366;;;:::o;29778:419::-;29944:4;29982:2;29971:9;29967:18;29959:26;;30031:9;30025:4;30021:20;30017:1;30006:9;30002:17;29995:47;30059:131;30185:4;30059:131;:::i;:::-;30051:139;;29778:419;;;:::o;30203:222::-;30343:34;30339:1;30331:6;30327:14;30320:58;30412:5;30407:2;30399:6;30395:15;30388:30;30203:222;:::o;30431:366::-;30573:3;30594:67;30658:2;30653:3;30594:67;:::i;:::-;30587:74;;30670:93;30759:3;30670:93;:::i;:::-;30788:2;30783:3;30779:12;30772:19;;30431:366;;;:::o;30803:419::-;30969:4;31007:2;30996:9;30992:18;30984:26;;31056:9;31050:4;31046:20;31042:1;31031:9;31027:17;31020:47;31084:131;31210:4;31084:131;:::i;:::-;31076:139;;30803:419;;;:::o;31228:179::-;31368:31;31364:1;31356:6;31352:14;31345:55;31228:179;:::o;31413:366::-;31555:3;31576:67;31640:2;31635:3;31576:67;:::i;:::-;31569:74;;31652:93;31741:3;31652:93;:::i;:::-;31770:2;31765:3;31761:12;31754:19;;31413:366;;;:::o;31785:419::-;31951:4;31989:2;31978:9;31974:18;31966:26;;32038:9;32032:4;32028:20;32024:1;32013:9;32009:17;32002:47;32066:131;32192:4;32066:131;:::i;:::-;32058:139;;31785:419;;;:::o;32210:247::-;32350:34;32346:1;32338:6;32334:14;32327:58;32419:30;32414:2;32406:6;32402:15;32395:55;32210:247;:::o;32463:366::-;32605:3;32626:67;32690:2;32685:3;32626:67;:::i;:::-;32619:74;;32702:93;32791:3;32702:93;:::i;:::-;32820:2;32815:3;32811:12;32804:19;;32463:366;;;:::o;32835:419::-;33001:4;33039:2;33028:9;33024:18;33016:26;;33088:9;33082:4;33078:20;33074:1;33063:9;33059:17;33052:47;33116:131;33242:4;33116:131;:::i;:::-;33108:139;;32835:419;;;:::o;33260:176::-;33400:28;33396:1;33388:6;33384:14;33377:52;33260:176;:::o;33442:366::-;33584:3;33605:67;33669:2;33664:3;33605:67;:::i;:::-;33598:74;;33681:93;33770:3;33681:93;:::i;:::-;33799:2;33794:3;33790:12;33783:19;;33442:366;;;:::o;33814:419::-;33980:4;34018:2;34007:9;34003:18;33995:26;;34067:9;34061:4;34057:20;34053:1;34042:9;34038:17;34031:47;34095:131;34221:4;34095:131;:::i;:::-;34087:139;;33814:419;;;:::o;34239:248::-;34379:34;34375:1;34367:6;34363:14;34356:58;34448:31;34443:2;34435:6;34431:15;34424:56;34239:248;:::o;34493:366::-;34635:3;34656:67;34720:2;34715:3;34656:67;:::i;:::-;34649:74;;34732:93;34821:3;34732:93;:::i;:::-;34850:2;34845:3;34841:12;34834:19;;34493:366;;;:::o;34865:419::-;35031:4;35069:2;35058:9;35054:18;35046:26;;35118:9;35112:4;35108:20;35104:1;35093:9;35089:17;35082:47;35146:131;35272:4;35146:131;:::i;:::-;35138:139;;34865:419;;;:::o;35290:194::-;35330:4;35350:20;35368:1;35350:20;:::i;:::-;35345:25;;35384:20;35402:1;35384:20;:::i;:::-;35379:25;;35428:1;35425;35421:9;35413:17;;35452:1;35446:4;35443:11;35440:37;;;35457:18;;:::i;:::-;35440:37;35290:194;;;;:::o;35490:220::-;35630:34;35626:1;35618:6;35614:14;35607:58;35699:3;35694:2;35686:6;35682:15;35675:28;35490:220;:::o;35716:366::-;35858:3;35879:67;35943:2;35938:3;35879:67;:::i;:::-;35872:74;;35955:93;36044:3;35955:93;:::i;:::-;36073:2;36068:3;36064:12;36057:19;;35716:366;;;:::o;36088:419::-;36254:4;36292:2;36281:9;36277:18;36269:26;;36341:9;36335:4;36331:20;36327:1;36316:9;36312:17;36305:47;36369:131;36495:4;36369:131;:::i;:::-;36361:139;;36088:419;;;:::o;36513:221::-;36653:34;36649:1;36641:6;36637:14;36630:58;36722:4;36717:2;36709:6;36705:15;36698:29;36513:221;:::o;36740:366::-;36882:3;36903:67;36967:2;36962:3;36903:67;:::i;:::-;36896:74;;36979:93;37068:3;36979:93;:::i;:::-;37097:2;37092:3;37088:12;37081:19;;36740:366;;;:::o;37112:419::-;37278:4;37316:2;37305:9;37301:18;37293:26;;37365:9;37359:4;37355:20;37351:1;37340:9;37336:17;37329:47;37393:131;37519:4;37393:131;:::i;:::-;37385:139;;37112:419;;;:::o;37537:182::-;37677:34;37673:1;37665:6;37661:14;37654:58;37537:182;:::o;37725:366::-;37867:3;37888:67;37952:2;37947:3;37888:67;:::i;:::-;37881:74;;37964:93;38053:3;37964:93;:::i;:::-;38082:2;38077:3;38073:12;38066:19;;37725:366;;;:::o;38097:419::-;38263:4;38301:2;38290:9;38286:18;38278:26;;38350:9;38344:4;38340:20;38336:1;38325:9;38321:17;38314:47;38378:131;38504:4;38378:131;:::i;:::-;38370:139;;38097:419;;;:::o;38522:225::-;38662:34;38658:1;38650:6;38646:14;38639:58;38731:8;38726:2;38718:6;38714:15;38707:33;38522:225;:::o;38753:366::-;38895:3;38916:67;38980:2;38975:3;38916:67;:::i;:::-;38909:74;;38992:93;39081:3;38992:93;:::i;:::-;39110:2;39105:3;39101:12;39094:19;;38753:366;;;:::o;39125:419::-;39291:4;39329:2;39318:9;39314:18;39306:26;;39378:9;39372:4;39368:20;39364:1;39353:9;39349:17;39342:47;39406:131;39532:4;39406:131;:::i;:::-;39398:139;;39125:419;;;:::o;39550:180::-;39598:77;39595:1;39588:88;39695:4;39692:1;39685:15;39719:4;39716:1;39709:15;39736:180;39784:77;39781:1;39774:88;39881:4;39878:1;39871:15;39905:4;39902:1;39895:15;39922:114;39989:6;40023:5;40017:12;40007:22;;39922:114;;;:::o;40042:184::-;40141:11;40175:6;40170:3;40163:19;40215:4;40210:3;40206:14;40191:29;;40042:184;;;;:::o;40232:132::-;40299:4;40322:3;40314:11;;40352:4;40347:3;40343:14;40335:22;;40232:132;;;:::o;40370:108::-;40447:24;40465:5;40447:24;:::i;:::-;40442:3;40435:37;40370:108;;:::o;40484:179::-;40553:10;40574:46;40616:3;40608:6;40574:46;:::i;:::-;40652:4;40647:3;40643:14;40629:28;;40484:179;;;;:::o;40669:113::-;40739:4;40771;40766:3;40762:14;40754:22;;40669:113;;;:::o;40818:732::-;40937:3;40966:54;41014:5;40966:54;:::i;:::-;41036:86;41115:6;41110:3;41036:86;:::i;:::-;41029:93;;41146:56;41196:5;41146:56;:::i;:::-;41225:7;41256:1;41241:284;41266:6;41263:1;41260:13;41241:284;;;41342:6;41336:13;41369:63;41428:3;41413:13;41369:63;:::i;:::-;41362:70;;41455:60;41508:6;41455:60;:::i;:::-;41445:70;;41301:224;41288:1;41285;41281:9;41276:14;;41241:284;;;41245:14;41541:3;41534:10;;40942:608;;;40818:732;;;;:::o;41556:831::-;41819:4;41857:3;41846:9;41842:19;41834:27;;41871:71;41939:1;41928:9;41924:17;41915:6;41871:71;:::i;:::-;41952:80;42028:2;42017:9;42013:18;42004:6;41952:80;:::i;:::-;42079:9;42073:4;42069:20;42064:2;42053:9;42049:18;42042:48;42107:108;42210:4;42201:6;42107:108;:::i;:::-;42099:116;;42225:72;42293:2;42282:9;42278:18;42269:6;42225:72;:::i;:::-;42307:73;42375:3;42364:9;42360:19;42351:6;42307:73;:::i;:::-;41556:831;;;;;;;;:::o
Swarm Source
ipfs://ebab346187bb8b3cf703bf0b67ad61ce983fe9d7f666ff07ce3910ceb82c39b9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.