ERC-20
Overview
Max Total Supply
1,000,000 ABC
Holders
206
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
475.2938199 ABCValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AlphaBotCalls
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-02-23 */ // SPDX-License-Identifier: MIT /** Website: https://www.alpha-bot-calls.com/ Telegram: https://t.me/AlphaBotCalls Twitter: https://twitter.com/AlphaBotCalls */ pragma solidity ^ 0.8.7; /** * @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); } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev 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; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } /** * @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]. * * 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 AlphaBotCalls is Context, Ownable, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name = "Alpha Bot Calls"; string private _symbol = "ABC"; address public devWallet = 0x664e2531f5c1AeCA86b7C65935431AbB06F29f71; address public marketingWallet = 0x2aA830a48Cd78d5360139E790F808e46B9aAdC2b; address public communityWallet = 0x7Eb5eE0ECCAbAC6629a5bD2C24F672103e1E0216; uint256 public devFee = 2; uint256 public marketingFee = 2; uint256 public liquidityFee = 0; uint256 public totalFee; mapping(address => bool) public exemptFromFee; mapping(address => bool) public exemptFromMax; address public uniswapPair; IUniswapV2Router02 public uniswapRouter; uint256 public swapThreshold; uint256 public maxWalletAmount; bool public enableAntiwhale = true; bool public enableTrading; uint256 public minTraderTokenAmount = 400000000000000000000; // 400 ABC uint8 public traderReward = 70; uint8 public communityReward = 20; uint8 public groupOwnerReward = 0; uint256 private rewardsForCommunity = 0; uint256 private rewardsForDevelopers = 0; uint256 private rewardsForMarketing = 0; bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor() { uniswapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapPair = IUniswapV2Factory(uniswapRouter.factory()).createPair( uniswapRouter.WETH(), address(this) ); exemptFromFee[_msgSender()] = true; exemptFromFee[devWallet] = true; exemptFromFee[marketingWallet] = true; exemptFromFee[address(this)] = true; exemptFromMax[_msgSender()] = true; exemptFromMax[devWallet] = true; exemptFromMax[marketingWallet] = true; exemptFromMax[uniswapPair] = true; exemptFromMax[address(this)] = true; _mint(_msgSender(), 1 * 10 ** 6 * 10 ** decimals()); swapThreshold = _totalSupply.mul(5).div(10000); maxWalletAmount = _totalSupply.mul(1).div(100); totalFee = devFee.add(marketingFee).add(liquidityFee); enableTrading = false; } receive() external payable {} function getSubscription(address _traderAddress, address _groupOwnersAddress, uint40 _trnId) external payable { require(msg.value != 0, "Sent ETH must be greater than 0"); require(_traderAddress != address(0), "Trader address cannot be 0"); uint256 totalAmount = msg.value; rewardsForCommunity += (totalAmount * communityReward) / 100; if (minTraderTokenAmount <= balanceOf(_traderAddress)) { if (groupOwnerReward > 0 && minTraderTokenAmount <= balanceOf(_groupOwnersAddress)) { rewardsForDevelopers += (totalAmount * (100 - communityReward - traderReward - groupOwnerReward)) / 100; require(payable(_groupOwnersAddress).send(totalAmount * groupOwnerReward / 100), "Transfer to owner group failed"); } else { rewardsForDevelopers += (totalAmount * (100 - communityReward - traderReward)) / 100; } require(payable(_traderAddress).send(totalAmount * traderReward / 100), "Transfer to trader failed"); } else { rewardsForDevelopers += (totalAmount * (100 - communityReward)) / 100; } } function withDrawMarketing(uint256 _amount) public onlyOwner { require(_amount > 0, "The amount must be greater than 0"); require((rewardsForMarketing >= _amount), "It's impossible to dump this much"); require(payable(marketingWallet).send(_amount)); rewardsForMarketing = rewardsForMarketing.sub(_amount); } function withDrawCommunity(uint256 _amount) public onlyOwner { require(_amount > 0, "The amount must be greater than 0"); require((rewardsForCommunity >= _amount), "It's impossible to dump this much"); require(payable(communityWallet).send(_amount)); rewardsForCommunity = rewardsForCommunity.sub(_amount); } function withDrawDevelopers(uint256 _amount) public onlyOwner { require(_amount > 0, "The amount must be greater than 0"); require((rewardsForDevelopers >= _amount), "It's impossible to dump this much"); require(payable(devWallet).send(_amount)); rewardsForDevelopers = rewardsForDevelopers.sub(_amount); } // Function to set the min trader's an amount of tokens function setMinTraderTokenCount(uint256 _newAmount) external onlyOwner { minTraderTokenAmount = _newAmount; } // Function to set the trader reward percentage function setTraderReward(uint8 _newTraderReward) external onlyOwner { require((_newTraderReward + communityReward + groupOwnerReward) <= 100, "The sum of percentages can't be more than 100"); traderReward = _newTraderReward; } // Function to set the community reward percentage function setCommunityReward(uint8 _newCommunityReward) external onlyOwner { require((_newCommunityReward + traderReward + groupOwnerReward) <= 100, "The sum of percentages can't be more than 100"); communityReward = _newCommunityReward; } // Function to set the group owner reward percentage function setTopGroupOwnerReward(uint8 _newTopGroupOwnerReward) external onlyOwner { require((_newTopGroupOwnerReward + traderReward + communityReward) <= 100, "The sum of percentages can't be more than 100"); groupOwnerReward = _newTopGroupOwnerReward; } // Function to set the community wallet address function setCommunityWallet(address _newWallet) external onlyOwner { communityWallet = _newWallet; } function getRewardsForCommunity() public view returns (uint256) { return rewardsForCommunity; } function getRewardsForDevelopers() public view returns (uint256) { return rewardsForDevelopers; } /** * @dev Returns the name of the token. */ function name() external view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() external view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() external 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) external 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) external 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 ) external 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) external 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) external 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"); if (!exemptFromFee[from] && !exemptFromFee[to]) { require(enableTrading, 'Trading is currently disabled!'); } uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); uint256 amountAfterFee = takeFee(from, to, amount); if ( !exemptFromMax[to] && enableAntiwhale ) { require(_balances[to].add(amountAfterFee) <= maxWalletAmount, "Anthiwhale: can not hold more than max wallet amount"); } if ( from != uniswapPair && _balances[address(this)] >= swapThreshold && !inSwap ) { processSwap(_balances[address(this)]); } unchecked { _balances[from] = fromBalance.sub(amount); // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] = _balances[to].add(amountAfterFee); } emit Transfer(from, to, amountAfterFee); } /** @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"); _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); } /** * @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"); 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); } /** * @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); } } } event UpdateExemptFromFee(address indexed wallet, bool _exempt); function updateExemptFromFee( address wallet, bool _exempt ) external onlyOwner { exemptFromFee[wallet] = _exempt; emit UpdateExemptFromFee(wallet, _exempt); } event FeeUpdated(uint256 _devFee, uint256 _marketingFee, uint256 _liquidityFee); function updateFees( uint256 _devFee, uint256 _marketingFee, uint256 _liquidityFee ) external onlyOwner { devFee = _devFee; marketingFee = _marketingFee; liquidityFee = _liquidityFee; totalFee = _devFee.add(_marketingFee).add(_liquidityFee); require(totalFee <= 4, "Total fee can not exceeds 4"); emit FeeUpdated(_devFee, _marketingFee, _liquidityFee); } event ThresholdUpdated(uint256 _newThreshold); function updateSwapThreshold( uint256 _newThreshold ) external onlyOwner { swapThreshold = _newThreshold; emit ThresholdUpdated(_newThreshold); } function takeFee( address from, address to, uint256 amount ) internal returns (uint256) { if (!exemptFromFee[from] && !exemptFromFee[to]) { //taxable only during buy and sell and not during w2w tranfer if (from == uniswapPair || to == uniswapPair) { uint256 _totalFee = amount.mul(totalFee).div(10 ** 2); amount = amount.sub(_totalFee); if (_totalFee != 0) { _balances[address(this)] = _balances[address(this)].add(_totalFee); emit Transfer(from, address(this), _totalFee); } } } return amount; } event AutoLiquify(uint256 newBalance, uint256 otherHalf); function processSwap(uint256 tokenToSell) private swapping { uint256 _teamTokens = tokenToSell.mul(devFee.add(marketingFee)).div(totalFee); uint256 _tLiquidity = tokenToSell.mul(liquidityFee).div(totalFee); uint256 _tokenForLiquidity = _tLiquidity.div(2); uint256 _tTokenToSell = _teamTokens.add(_tokenForLiquidity); swapTokensForEth(_tTokenToSell); uint256 totalEthNewRewards = address(this).balance.sub(rewardsForCommunity).sub(rewardsForDevelopers).sub(rewardsForMarketing); uint256 ethForDev = totalEthNewRewards.mul(devFee).div(totalFee); uint256 ethForMarketing = totalEthNewRewards.mul(marketingFee).div(totalFee); uint256 ethForLiquidity = totalEthNewRewards.mul(liquidityFee).div(totalFee); if (ethForDev != 0) { rewardsForDevelopers = rewardsForDevelopers.add(ethForDev); } if (ethForMarketing != 0) { rewardsForMarketing = rewardsForMarketing.add(ethForMarketing); } addLiquidity(_tokenForLiquidity, ethForLiquidity); emit AutoLiquify(_tokenForLiquidity, ethForLiquidity); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapRouter.WETH(); _approve(address(this), address(uniswapRouter), tokenAmount); // make the swap uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { if (ethAmount != 0) { _approve(address(this), address(uniswapRouter), tokenAmount); // add the liquidity uniswapRouter.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable devWallet, block.timestamp ); } } event WalletsUpdated(address indexed _devWallet, address indexed _marketingWallet); function updateWallets( address _devWallet, address _marketingWallet ) external onlyOwner { require(_devWallet != address(0), "dev wallet can not be zero address"); require(_marketingWallet != address(0), "marketing wallet can not be zero address"); devWallet = _devWallet; marketingWallet = _marketingWallet; emit WalletsUpdated(_devWallet, _marketingWallet); } event MaxWalletAmount(uint256 _maxWalletAmount); function updateMaxWalletAmount( uint256 _maxWalletAmount ) external onlyOwner { maxWalletAmount = _maxWalletAmount; emit MaxWalletAmount(_maxWalletAmount); } event ExemptFromMax(address indexed _wallet, bool _exempt); function exemptFromMaxWallet( address _wallet, bool _exempt ) external onlyOwner { exemptFromMax[_wallet] = _exempt; emit ExemptFromMax(_wallet, _exempt); } event EnableAntiwhale(bool _enable); function enableAntiwhaleSystem( bool _enable ) external onlyOwner { enableAntiwhale = _enable; emit EnableAntiwhale(_enable); } function setEnableTrading() external onlyOwner { enableTrading = true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"otherHalf","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_enable","type":"bool"}],"name":"EnableAntiwhale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"_exempt","type":"bool"}],"name":"ExemptFromMax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"MaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_newThreshold","type":"uint256"}],"name":"ThresholdUpdated","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":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"_exempt","type":"bool"}],"name":"UpdateExemptFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_devWallet","type":"address"},{"indexed":true,"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"WalletsUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityReward","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityWallet","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":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableAntiwhale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"enableAntiwhaleSystem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_exempt","type":"bool"}],"name":"exemptFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRewardsForCommunity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsForDevelopers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_traderAddress","type":"address"},{"internalType":"address","name":"_groupOwnersAddress","type":"address"},{"internalType":"uint40","name":"_trnId","type":"uint40"}],"name":"getSubscription","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"groupOwnerReward","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTraderTokenAmount","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":[{"internalType":"uint8","name":"_newCommunityReward","type":"uint8"}],"name":"setCommunityReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setCommunityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setEnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setMinTraderTokenCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_newTopGroupOwnerReward","type":"uint8"}],"name":"setTopGroupOwnerReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_newTraderReward","type":"uint8"}],"name":"setTraderReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","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":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"traderReward","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"_exempt","type":"bool"}],"name":"updateExemptFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newThreshold","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withDrawCommunity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withDrawDevelopers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withDrawMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526040518060400160405280600f81526020017f416c70686120426f742043616c6c730000000000000000000000000000000000815250600490805190602001906200005192919062000c42565b506040518060400160405280600381526020017f4142430000000000000000000000000000000000000000000000000000000000815250600590805190602001906200009f92919062000c42565b5073664e2531f5c1aeca86b7c65935431abb06f29f71600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732aa830a48cd78d5360139e790f808e46b9aadc2b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737eb5ee0eccabac6629a5bd2c24f672103e1e0216600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060026009556002600a556000600b556001601360006101000a81548160ff0219169083151502179055506815af1d78b58c4000006014556046601560006101000a81548160ff021916908360ff1602179055506014601560016101000a81548160ff021916908360ff1602179055506000601560026101000a81548160ff021916908360ff1602179055506000601655600060175560006018553480156200024657600080fd5b50620002676200025b620009de60201b60201c565b620009e660201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032557600080fd5b505afa1580156200033a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000360919062000d09565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003e457600080fd5b505afa158015620003f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041f919062000d09565b306040518363ffffffff1660e01b81526004016200043f92919062000d84565b602060405180830381600087803b1580156200045a57600080fd5b505af11580156200046f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000495919062000d09565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d6000620004eb620009de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60006200069e620009de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000903620008c9620009de60201b60201c565b620008d962000aaa60201b60201c565b600a620008e7919062000ef1565b620f4240620008f791906200102e565b62000ab360201b60201c565b6200093b61271062000927600560035462000bfa60201b620027fb1790919060201c565b62000c1260201b620028111790919060201c565b60118190555062000978606462000964600160035462000bfa60201b620027fb1790919060201c565b62000c1260201b620028111790919060201c565b601281905550620009b7600b54620009a3600a5460095462000c2a60201b620028271790919060201c565b62000c2a60201b620028271790919060201c565b600c819055506000601360016101000a81548160ff021916908315150217905550620011f2565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b1d9062000db1565b60405180910390fd5b806003600082825462000b3a919062000e01565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bee919062000dd3565b60405180910390a35050565b6000818362000c0a91906200102e565b905092915050565b6000818362000c22919062000e5e565b905092915050565b6000818362000c3a919062000e01565b905092915050565b82805462000c5090620010da565b90600052602060002090601f01602090048101928262000c74576000855562000cc0565b82601f1062000c8f57805160ff191683800117855562000cc0565b8280016001018555821562000cc0579182015b8281111562000cbf57825182559160200191906001019062000ca2565b5b50905062000ccf919062000cd3565b5090565b5b8082111562000cee57600081600090555060010162000cd4565b5090565b60008151905062000d0381620011d8565b92915050565b60006020828403121562000d225762000d216200119d565b5b600062000d328482850162000cf2565b91505092915050565b62000d46816200108f565b82525050565b600062000d5b601f8362000df0565b915062000d6882620011af565b602082019050919050565b62000d7e81620010c3565b82525050565b600060408201905062000d9b600083018562000d3b565b62000daa602083018462000d3b565b9392505050565b6000602082019050818103600083015262000dcc8162000d4c565b9050919050565b600060208201905062000dea600083018462000d73565b92915050565b600082825260208201905092915050565b600062000e0e82620010c3565b915062000e1b83620010c3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e535762000e5262001110565b5b828201905092915050565b600062000e6b82620010c3565b915062000e7883620010c3565b92508262000e8b5762000e8a6200113f565b5b828204905092915050565b6000808291508390505b600185111562000ee85780860481111562000ec05762000ebf62001110565b5b600185161562000ed05780820291505b808102905062000ee085620011a2565b945062000ea0565b94509492505050565b600062000efe82620010c3565b915062000f0b83620010cd565b925062000f3a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000f42565b905092915050565b60008262000f54576001905062001027565b8162000f64576000905062001027565b816001811462000f7d576002811462000f885762000fbe565b600191505062001027565b60ff84111562000f9d5762000f9c62001110565b5b8360020a91508482111562000fb75762000fb662001110565b5b5062001027565b5060208310610133831016604e8410600b841016171562000ff85782820a90508381111562000ff25762000ff162001110565b5b62001027565b62001007848484600162000e96565b9250905081840481111562001021576200102062001110565b5b81810290505b9392505050565b60006200103b82620010c3565b91506200104883620010c3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001084576200108362001110565b5b828202905092915050565b60006200109c82620010a3565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006002820490506001821680620010f357607f821691505b602082108114156200110a57620011096200116e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b60008160011c9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b620011e3816200108f565b8114620011ef57600080fd5b50565b614f4a80620012026000396000f3fe6080604052600436106103035760003560e01c806385d6bb8111610190578063bfa8ed19116100dc578063dd62ed3e11610095578063e8ba854f1161006f578063e8ba854f14610b5e578063f2fde38b14610b87578063fa09eaaf14610bb0578063fb60e0bc14610bd95761030a565b8063dd62ed3e14610acd578063e1135fe614610b0a578063e47db4e914610b355761030a565b8063bfa8ed19146109cf578063c1650709146109fa578063c18bc19514610a25578063c757483914610a4e578063c816841b14610a79578063cc274b2914610aa45761030a565b806398118cb411610149578063a9059cbb11610123578063a9059cbb14610911578063aa4bde281461094e578063b38048e114610979578063becf0271146109a45761030a565b806398118cb414610880578063a457c2d7146108ab578063a73e45ca146108e85761030a565b806385d6bb81146107825780638a8c523c146107ab5780638da5cb5b146107d65780638ea5220f14610801578063937057641461082c57806395d89b41146108555761030a565b8063395093511161024f57806364afd18b1161020857806370a08231116101e257806370a08231146106d8578063715018a614610715578063735de9f71461072c57806375f0a874146107575761030a565b806364afd18b1461066b5780636827e764146106825780636b67c4df146106ad5761030a565b8063395093511461055857806339bab4a9146105955780633f9290f4146105be5780634477b79a146105da57806358e4b7311461060357806360388233146106405761030a565b80631e5bbf62116102bc57806323b872dd1161029657806323b872dd1461049e578063285a9766146104db578063313ce56714610504578063378b02661461052f5761030a565b80631e5bbf621461042157806321b27ec11461044a57806322429085146104755761030a565b80630445b6671461030f57806306fdde031461033a578063095ea7b314610365578063177e807b146103a257806318160ddd146103cb5780631df4ccfc146103f65761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c16565b604051610331919061447d565b60405180910390f35b34801561034657600080fd5b5061034f610c1c565b60405161035c91906141bb565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190613ba5565b610cae565b6040516103999190614185565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613c12565b610cd1565b005b3480156103d757600080fd5b506103e0610e53565b6040516103ed919061447d565b60405180910390f35b34801561040257600080fd5b5061040b610e5d565b604051610418919061447d565b60405180910390f35b34801561042d57600080fd5b5061044860048036038101906104439190613b65565b610e63565b005b34801561045657600080fd5b5061045f610f88565b60405161046c9190614185565b60405180910390f35b34801561048157600080fd5b5061049c60048036038101906104979190613c3f565b610f9b565b005b3480156104aa57600080fd5b506104c560048036038101906104c09190613abf565b6110dd565b6040516104d29190614185565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd9190613ce5565b61110c565b005b34801561051057600080fd5b50610519611221565b6040516105269190614552565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613ce5565b61122a565b005b34801561056457600080fd5b5061057f600480360381019061057a9190613ba5565b61133f565b60405161058c9190614185565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190613c12565b611376565b005b6105d860048036038101906105d39190613b12565b6114f8565b005b3480156105e657600080fd5b5061060160048036038101906105fc9190613ce5565b6118b9565b005b34801561060f57600080fd5b5061062a60048036038101906106259190613a25565b6119ce565b6040516106379190614185565b60405180910390f35b34801561064c57600080fd5b506106556119ee565b604051610662919061447d565b60405180910390f35b34801561067757600080fd5b506106806119f8565b005b34801561068e57600080fd5b50610697611a91565b6040516106a4919061447d565b60405180910390f35b3480156106b957600080fd5b506106c2611a97565b6040516106cf919061447d565b60405180910390f35b3480156106e457600080fd5b506106ff60048036038101906106fa9190613a25565b611a9d565b60405161070c919061447d565b60405180910390f35b34801561072157600080fd5b5061072a611ae6565b005b34801561073857600080fd5b50610741611b6e565b60405161074e91906141a0565b60405180910390f35b34801561076357600080fd5b5061076c611b94565b6040516107799190614109565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a49190613a25565b611bba565b005b3480156107b757600080fd5b506107c0611c7a565b6040516107cd9190614185565b60405180910390f35b3480156107e257600080fd5b506107eb611c8d565b6040516107f89190614109565b60405180910390f35b34801561080d57600080fd5b50610816611cb6565b6040516108239190614109565b60405180910390f35b34801561083857600080fd5b50610853600480360381019061084e9190613be5565b611cdc565b005b34801561086157600080fd5b5061086a611dac565b60405161087791906141bb565b60405180910390f35b34801561088c57600080fd5b50610895611e3e565b6040516108a2919061447d565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd9190613ba5565b611e44565b6040516108df9190614185565b60405180910390f35b3480156108f457600080fd5b5061090f600480360381019061090a9190613c12565b611ebb565b005b34801561091d57600080fd5b5061093860048036038101906109339190613ba5565b61203d565b6040516109459190614185565b60405180910390f35b34801561095a57600080fd5b50610963612060565b604051610970919061447d565b60405180910390f35b34801561098557600080fd5b5061098e612066565b60405161099b9190614552565b60405180910390f35b3480156109b057600080fd5b506109b9612079565b6040516109c6919061447d565b60405180910390f35b3480156109db57600080fd5b506109e461207f565b6040516109f19190614552565b60405180910390f35b348015610a0657600080fd5b50610a0f612092565b604051610a1c9190614552565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190613c12565b6120a5565b005b348015610a5a57600080fd5b50610a63612162565b604051610a709190614109565b60405180910390f35b348015610a8557600080fd5b50610a8e612188565b604051610a9b9190614109565b60405180910390f35b348015610ab057600080fd5b50610acb6004803603810190610ac69190613c12565b6121ae565b005b348015610ad957600080fd5b50610af46004803603810190610aef9190613a7f565b61226b565b604051610b01919061447d565b60405180910390f35b348015610b1657600080fd5b50610b1f6122f2565b604051610b2c919061447d565b60405180910390f35b348015610b4157600080fd5b50610b5c6004803603810190610b579190613c12565b6122fc565b005b348015610b6a57600080fd5b50610b856004803603810190610b809190613a7f565b612382565b005b348015610b9357600080fd5b50610bae6004803603810190610ba99190613a25565b6125be565b005b348015610bbc57600080fd5b50610bd76004803603810190610bd29190613b65565b6126b6565b005b348015610be557600080fd5b50610c006004803603810190610bfb9190613a25565b6127db565b604051610c0d9190614185565b60405180910390f35b60115481565b606060048054610c2b90614823565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5790614823565b8015610ca45780601f10610c7957610100808354040283529160200191610ca4565b820191906000526020600020905b815481529060010190602001808311610c8757829003601f168201915b5050505050905090565b600080610cb961283d565b9050610cc6818585612845565b600191505092915050565b610cd961283d565b73ffffffffffffffffffffffffffffffffffffffff16610cf7611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d44906143bd565b60405180910390fd5b60008111610d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d87906142bd565b60405180910390fd5b806016541015610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc9061421d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610e3557600080fd5b610e4a81601654612a1090919063ffffffff16565b60168190555050565b6000600354905090565b600c5481565b610e6b61283d565b73ffffffffffffffffffffffffffffffffffffffff16610e89611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed6906143bd565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f704ff73c4e410152e02ca4e708d579e08ac7865f1ac8edce526234513f4ac5c582604051610f7c9190614185565b60405180910390a25050565b601360009054906101000a900460ff1681565b610fa361283d565b73ffffffffffffffffffffffffffffffffffffffff16610fc1611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e906143bd565b60405180910390fd5b8260098190555081600a8190555080600b8190555061105181611043848661282790919063ffffffff16565b61282790919063ffffffff16565b600c819055506004600c54111561109d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611094906141fd565b60405180910390fd5b7f509d432c4ab40e3eb039ee95fea93be8de6c751efa87aed5e51c7202b0dd8e098383836040516110d09392919061451b565b60405180910390a1505050565b6000806110e861283d565b90506110f5858285612a26565b611100858585612ab2565b60019150509392505050565b61111461283d565b73ffffffffffffffffffffffffffffffffffffffff16611132611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f906143bd565b60405180910390fd5b6064601560029054906101000a900460ff16601560009054906101000a900460ff16836111b59190614618565b6111bf9190614618565b60ff161115611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa906142fd565b60405180910390fd5b80601560016101000a81548160ff021916908360ff16021790555050565b60006012905090565b61123261283d565b73ffffffffffffffffffffffffffffffffffffffff16611250611c8d565b73ffffffffffffffffffffffffffffffffffffffff16146112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d906143bd565b60405180910390fd5b6064601560029054906101000a900460ff16601560019054906101000a900460ff16836112d39190614618565b6112dd9190614618565b60ff161115611321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611318906142fd565b60405180910390fd5b80601560006101000a81548160ff021916908360ff16021790555050565b60008061134a61283d565b905061136b81858561135c858961226b565b61136691906145c2565b612845565b600191505092915050565b61137e61283d565b73ffffffffffffffffffffffffffffffffffffffff1661139c611c8d565b73ffffffffffffffffffffffffffffffffffffffff16146113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e9906143bd565b60405180910390fd5b60008111611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142c906142bd565b60405180910390fd5b80601854101561147a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114719061421d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506114da57600080fd5b6114ef81601854612a1090919063ffffffff16565b60188190555050565b600034141561153c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611533906142dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a39061443d565b60405180910390fd5b60003490506064601560019054906101000a900460ff1660ff16826115d19190614680565b6115db919061464f565b601660008282546115ec91906145c2565b925050819055506115fc84611a9d565b60145411611864576000601560029054906101000a900460ff1660ff16118015611630575061162a83611a9d565b60145411155b15611759576064601560029054906101000a900460ff16601560009054906101000a900460ff16601560019054906101000a900460ff166064611673919061470e565b61167d919061470e565b611687919061470e565b60ff16826116959190614680565b61169f919061464f565b601760008282546116b091906145c2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff166108fc6064601560029054906101000a900460ff1660ff16846116f19190614680565b6116fb919061464f565b9081150290604051600060405180830381858888f19350505050611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b9061437d565b60405180910390fd5b6117c2565b6064601560009054906101000a900460ff16601560019054906101000a900460ff166064611787919061470e565b611791919061470e565b60ff168261179f9190614680565b6117a9919061464f565b601760008282546117ba91906145c2565b925050819055505b8373ffffffffffffffffffffffffffffffffffffffff166108fc6064601560009054906101000a900460ff1660ff16846117fc9190614680565b611806919061464f565b9081150290604051600060405180830381858888f1935050505061185f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118569061431d565b60405180910390fd5b6118b3565b6064601560019054906101000a900460ff166064611882919061470e565b60ff16826118909190614680565b61189a919061464f565b601760008282546118ab91906145c2565b925050819055505b50505050565b6118c161283d565b73ffffffffffffffffffffffffffffffffffffffff166118df611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192c906143bd565b60405180910390fd5b6064601560019054906101000a900460ff16601560009054906101000a900460ff16836119629190614618565b61196c9190614618565b60ff1611156119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a7906142fd565b60405180910390fd5b80601560026101000a81548160ff021916908360ff16021790555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6000601654905090565b611a0061283d565b73ffffffffffffffffffffffffffffffffffffffff16611a1e611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b906143bd565b60405180910390fd5b6001601360016101000a81548160ff021916908315150217905550565b60095481565b600a5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611aee61283d565b73ffffffffffffffffffffffffffffffffffffffff16611b0c611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b59906143bd565b60405180910390fd5b611b6c6000613080565b565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bc261283d565b73ffffffffffffffffffffffffffffffffffffffff16611be0611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d906143bd565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601360019054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ce461283d565b73ffffffffffffffffffffffffffffffffffffffff16611d02611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f906143bd565b60405180910390fd5b80601360006101000a81548160ff0219169083151502179055507ffc9a38574cd72afde7f596ce987008cf51a79b0451b7997cdbc9135489199dcf81604051611da19190614185565b60405180910390a150565b606060058054611dbb90614823565b80601f0160208091040260200160405190810160405280929190818152602001828054611de790614823565b8015611e345780601f10611e0957610100808354040283529160200191611e34565b820191906000526020600020905b815481529060010190602001808311611e1757829003601f168201915b5050505050905090565b600b5481565b600080611e4f61283d565b90506000611e5d828661226b565b905083811015611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e999061445d565b60405180910390fd5b611eaf8286868403612845565b60019250505092915050565b611ec361283d565b73ffffffffffffffffffffffffffffffffffffffff16611ee1611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614611f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2e906143bd565b60405180910390fd5b60008111611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f71906142bd565b60405180910390fd5b806017541015611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb69061421d565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061201f57600080fd5b61203481601754612a1090919063ffffffff16565b60178190555050565b60008061204861283d565b9050612055818585612ab2565b600191505092915050565b60125481565b601560029054906101000a900460ff1681565b60145481565b601560009054906101000a900460ff1681565b601560019054906101000a900460ff1681565b6120ad61283d565b73ffffffffffffffffffffffffffffffffffffffff166120cb611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614612121576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612118906143bd565b60405180910390fd5b806012819055507f22c83a5ec34271153086583a02141e6d8afa47085fffe4f3c546e7011357aa0981604051612157919061447d565b60405180910390a150565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121b661283d565b73ffffffffffffffffffffffffffffffffffffffff166121d4611c8d565b73ffffffffffffffffffffffffffffffffffffffff161461222a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612221906143bd565b60405180910390fd5b806011819055507fadfa8ecb21b6962ebcd0adbd9ab985b7b4c5b5eb3b0dead683171565c7bfe17181604051612260919061447d565b60405180910390a150565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000601754905090565b61230461283d565b73ffffffffffffffffffffffffffffffffffffffff16612322611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614612378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236f906143bd565b60405180910390fd5b8060148190555050565b61238a61283d565b73ffffffffffffffffffffffffffffffffffffffff166123a8611c8d565b73ffffffffffffffffffffffffffffffffffffffff16146123fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f5906143bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561246e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124659061435d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d59061439d565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f316af92955f23ddbd4c570a5f8cda8a10b192f24d8f58524deb2fcb03a8bc79460405160405180910390a35050565b6125c661283d565b73ffffffffffffffffffffffffffffffffffffffff166125e4611c8d565b73ffffffffffffffffffffffffffffffffffffffff161461263a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612631906143bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a19061423d565b60405180910390fd5b6126b381613080565b50565b6126be61283d565b73ffffffffffffffffffffffffffffffffffffffff166126dc611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614612732576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612729906143bd565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fa35648c59c0d294efd491e4dd37c5c989af10767bb4cada9ddae9a689006232a826040516127cf9190614185565b60405180910390a25050565b600e6020528060005260406000206000915054906101000a900460ff1681565b600081836128099190614680565b905092915050565b6000818361281f919061464f565b905092915050565b6000818361283591906145c2565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ac9061441d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291c9061425d565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a03919061447d565b60405180910390a3505050565b60008183612a1e91906146da565b905092915050565b6000612a32848461226b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612aac5781811015612a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a959061427d565b60405180910390fd5b612aab8484848403612845565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b19906143fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b89906141dd565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c365750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c8b57601360019054906101000a900460ff16612c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c819061433d565b60405180910390fd5b5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d099061429d565b60405180910390fd5b6000612d1f858585613144565b9050600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d875750601360009054906101000a900460ff165b15612e2357601254612de182600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282790919063ffffffff16565b1115612e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e19906143dd565b60405180910390fd5b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612ec25750601154600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b8015612edb5750601960009054906101000a900460ff16155b15612f2957612f28600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ee565b5b612f3c8383612a1090919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fd181600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282790919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613071919061447d565b60405180910390a35050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131ea5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133e457600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806132985750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156133e35760006132c760646132b9600c54866127fb90919063ffffffff16565b61281190919063ffffffff16565b90506132dc8184612a1090919063ffffffff16565b9250600081146133e15761333881600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282790919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133d8919061447d565b60405180910390a35b505b5b8190509392505050565b6001601960006101000a81548160ff0219169083151502179055506000613448600c5461343a61342b600a5460095461282790919063ffffffff16565b856127fb90919063ffffffff16565b61281190919063ffffffff16565b90506000613475600c54613467600b54866127fb90919063ffffffff16565b61281190919063ffffffff16565b9050600061348d60028361281190919063ffffffff16565b905060006134a4828561282790919063ffffffff16565b90506134af81613628565b60006134ee6018546134e06017546134d260165447612a1090919063ffffffff16565b612a1090919063ffffffff16565b612a1090919063ffffffff16565b9050600061351b600c5461350d600954856127fb90919063ffffffff16565b61281190919063ffffffff16565b90506000613548600c5461353a600a54866127fb90919063ffffffff16565b61281190919063ffffffff16565b90506000613575600c54613567600b54876127fb90919063ffffffff16565b61281190919063ffffffff16565b90506000831461359b576135948360175461282790919063ffffffff16565b6017819055505b600082146135bf576135b88260185461282790919063ffffffff16565b6018819055505b6135c9868261387a565b7f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450686826040516135fa9291906144f2565b60405180910390a150505050505050506000601960006101000a81548160ff02191690831515021790555050565b6000600267ffffffffffffffff81111561364557613644614911565b5b6040519080825280602002602001820160405280156136735781602001602082028036833780820191505090505b509050308160008151811061368b5761368a6148e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561372d57600080fd5b505afa158015613741573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137659190613a52565b81600181518110613779576137786148e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137e030601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612845565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613844959493929190614498565b600060405180830381600087803b15801561385e57600080fd5b505af1158015613872573d6000803e3d6000fd5b505050505050565b6000811461398e576138af30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612845565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161393896959493929190614124565b6060604051808303818588803b15801561395157600080fd5b505af1158015613965573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061398a9190613c92565b5050505b5050565b6000813590506139a181614ea1565b92915050565b6000815190506139b681614ea1565b92915050565b6000813590506139cb81614eb8565b92915050565b6000813590506139e081614ecf565b92915050565b6000815190506139f581614ecf565b92915050565b600081359050613a0a81614ee6565b92915050565b600081359050613a1f81614efd565b92915050565b600060208284031215613a3b57613a3a614940565b5b6000613a4984828501613992565b91505092915050565b600060208284031215613a6857613a67614940565b5b6000613a76848285016139a7565b91505092915050565b60008060408385031215613a9657613a95614940565b5b6000613aa485828601613992565b9250506020613ab585828601613992565b9150509250929050565b600080600060608486031215613ad857613ad7614940565b5b6000613ae686828701613992565b9350506020613af786828701613992565b9250506040613b08868287016139d1565b9150509250925092565b600080600060608486031215613b2b57613b2a614940565b5b6000613b3986828701613992565b9350506020613b4a86828701613992565b9250506040613b5b868287016139fb565b9150509250925092565b60008060408385031215613b7c57613b7b614940565b5b6000613b8a85828601613992565b9250506020613b9b858286016139bc565b9150509250929050565b60008060408385031215613bbc57613bbb614940565b5b6000613bca85828601613992565b9250506020613bdb858286016139d1565b9150509250929050565b600060208284031215613bfb57613bfa614940565b5b6000613c09848285016139bc565b91505092915050565b600060208284031215613c2857613c27614940565b5b6000613c36848285016139d1565b91505092915050565b600080600060608486031215613c5857613c57614940565b5b6000613c66868287016139d1565b9350506020613c77868287016139d1565b9250506040613c88868287016139d1565b9150509250925092565b600080600060608486031215613cab57613caa614940565b5b6000613cb9868287016139e6565b9350506020613cca868287016139e6565b9250506040613cdb868287016139e6565b9150509250925092565b600060208284031215613cfb57613cfa614940565b5b6000613d0984828501613a10565b91505092915050565b6000613d1e8383613d2a565b60208301905092915050565b613d3381614742565b82525050565b613d4281614742565b82525050565b6000613d538261457d565b613d5d81856145a0565b9350613d688361456d565b8060005b83811015613d99578151613d808882613d12565b9750613d8b83614593565b925050600181019050613d6c565b5085935050505092915050565b613daf81614754565b82525050565b613dbe816147a8565b82525050565b613dcd816147ba565b82525050565b6000613dde82614588565b613de881856145b1565b9350613df88185602086016147f0565b613e0181614945565b840191505092915050565b6000613e196023836145b1565b9150613e2482614956565b604082019050919050565b6000613e3c601b836145b1565b9150613e47826149a5565b602082019050919050565b6000613e5f6021836145b1565b9150613e6a826149ce565b604082019050919050565b6000613e826026836145b1565b9150613e8d82614a1d565b604082019050919050565b6000613ea56022836145b1565b9150613eb082614a6c565b604082019050919050565b6000613ec8601d836145b1565b9150613ed382614abb565b602082019050919050565b6000613eeb6026836145b1565b9150613ef682614ae4565b604082019050919050565b6000613f0e6021836145b1565b9150613f1982614b33565b604082019050919050565b6000613f31601f836145b1565b9150613f3c82614b82565b602082019050919050565b6000613f54602d836145b1565b9150613f5f82614bab565b604082019050919050565b6000613f776019836145b1565b9150613f8282614bfa565b602082019050919050565b6000613f9a601e836145b1565b9150613fa582614c23565b602082019050919050565b6000613fbd6022836145b1565b9150613fc882614c4c565b604082019050919050565b6000613fe0601e836145b1565b9150613feb82614c9b565b602082019050919050565b60006140036028836145b1565b915061400e82614cc4565b604082019050919050565b60006140266020836145b1565b915061403182614d13565b602082019050919050565b60006140496034836145b1565b915061405482614d3c565b604082019050919050565b600061406c6025836145b1565b915061407782614d8b565b604082019050919050565b600061408f6024836145b1565b915061409a82614dda565b604082019050919050565b60006140b2601a836145b1565b91506140bd82614e29565b602082019050919050565b60006140d56025836145b1565b91506140e082614e52565b604082019050919050565b6140f481614780565b82525050565b6141038161479b565b82525050565b600060208201905061411e6000830184613d39565b92915050565b600060c0820190506141396000830189613d39565b61414660208301886140eb565b6141536040830187613dc4565b6141606060830186613dc4565b61416d6080830185613d39565b61417a60a08301846140eb565b979650505050505050565b600060208201905061419a6000830184613da6565b92915050565b60006020820190506141b56000830184613db5565b92915050565b600060208201905081810360008301526141d58184613dd3565b905092915050565b600060208201905081810360008301526141f681613e0c565b9050919050565b6000602082019050818103600083015261421681613e2f565b9050919050565b6000602082019050818103600083015261423681613e52565b9050919050565b6000602082019050818103600083015261425681613e75565b9050919050565b6000602082019050818103600083015261427681613e98565b9050919050565b6000602082019050818103600083015261429681613ebb565b9050919050565b600060208201905081810360008301526142b681613ede565b9050919050565b600060208201905081810360008301526142d681613f01565b9050919050565b600060208201905081810360008301526142f681613f24565b9050919050565b6000602082019050818103600083015261431681613f47565b9050919050565b6000602082019050818103600083015261433681613f6a565b9050919050565b6000602082019050818103600083015261435681613f8d565b9050919050565b6000602082019050818103600083015261437681613fb0565b9050919050565b6000602082019050818103600083015261439681613fd3565b9050919050565b600060208201905081810360008301526143b681613ff6565b9050919050565b600060208201905081810360008301526143d681614019565b9050919050565b600060208201905081810360008301526143f68161403c565b9050919050565b600060208201905081810360008301526144168161405f565b9050919050565b6000602082019050818103600083015261443681614082565b9050919050565b60006020820190508181036000830152614456816140a5565b9050919050565b60006020820190508181036000830152614476816140c8565b9050919050565b600060208201905061449260008301846140eb565b92915050565b600060a0820190506144ad60008301886140eb565b6144ba6020830187613dc4565b81810360408301526144cc8186613d48565b90506144db6060830185613d39565b6144e860808301846140eb565b9695505050505050565b600060408201905061450760008301856140eb565b61451460208301846140eb565b9392505050565b600060608201905061453060008301866140eb565b61453d60208301856140eb565b61454a60408301846140eb565b949350505050565b600060208201905061456760008301846140fa565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006145cd82614780565b91506145d883614780565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561460d5761460c614855565b5b828201905092915050565b60006146238261479b565b915061462e8361479b565b92508260ff0382111561464457614643614855565b5b828201905092915050565b600061465a82614780565b915061466583614780565b92508261467557614674614884565b5b828204905092915050565b600061468b82614780565b915061469683614780565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146cf576146ce614855565b5b828202905092915050565b60006146e582614780565b91506146f083614780565b92508282101561470357614702614855565b5b828203905092915050565b60006147198261479b565b91506147248361479b565b92508282101561473757614736614855565b5b828203905092915050565b600061474d82614760565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600064ffffffffff82169050919050565b600060ff82169050919050565b60006147b3826147cc565b9050919050565b60006147c582614780565b9050919050565b60006147d7826147de565b9050919050565b60006147e982614760565b9050919050565b60005b8381101561480e5780820151818401526020810190506147f3565b8381111561481d576000848401525b50505050565b6000600282049050600182168061483b57607f821691505b6020821081141561484f5761484e6148b3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f546f74616c206665652063616e206e6f74206578636565647320340000000000600082015250565b7f4974277320696d706f737369626c6520746f2064756d702074686973206d756360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f54686520616d6f756e74206d7573742062652067726561746572207468616e2060008201527f3000000000000000000000000000000000000000000000000000000000000000602082015250565b7f53656e7420455448206d7573742062652067726561746572207468616e203000600082015250565b7f5468652073756d206f662070657263656e74616765732063616e27742062652060008201527f6d6f7265207468616e2031303000000000000000000000000000000000000000602082015250565b7f5472616e7366657220746f20747261646572206661696c656400000000000000600082015250565b7f54726164696e672069732063757272656e746c792064697361626c6564210000600082015250565b7f6465762077616c6c65742063616e206e6f74206265207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220746f206f776e65722067726f7570206661696c65640000600082015250565b7f6d61726b6574696e672077616c6c65742063616e206e6f74206265207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f416e7468697768616c653a2063616e206e6f7420686f6c64206d6f726520746860008201527f616e206d61782077616c6c657420616d6f756e74000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164657220616464726573732063616e6e6f742062652030000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b614eaa81614742565b8114614eb557600080fd5b50565b614ec181614754565b8114614ecc57600080fd5b50565b614ed881614780565b8114614ee357600080fd5b50565b614eef8161478a565b8114614efa57600080fd5b50565b614f068161479b565b8114614f1157600080fd5b5056fea2646970667358221220327d933b42cd8221fed525ead51925958cc2fd8a727cb52eabca278e36bb1c8e64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106103035760003560e01c806385d6bb8111610190578063bfa8ed19116100dc578063dd62ed3e11610095578063e8ba854f1161006f578063e8ba854f14610b5e578063f2fde38b14610b87578063fa09eaaf14610bb0578063fb60e0bc14610bd95761030a565b8063dd62ed3e14610acd578063e1135fe614610b0a578063e47db4e914610b355761030a565b8063bfa8ed19146109cf578063c1650709146109fa578063c18bc19514610a25578063c757483914610a4e578063c816841b14610a79578063cc274b2914610aa45761030a565b806398118cb411610149578063a9059cbb11610123578063a9059cbb14610911578063aa4bde281461094e578063b38048e114610979578063becf0271146109a45761030a565b806398118cb414610880578063a457c2d7146108ab578063a73e45ca146108e85761030a565b806385d6bb81146107825780638a8c523c146107ab5780638da5cb5b146107d65780638ea5220f14610801578063937057641461082c57806395d89b41146108555761030a565b8063395093511161024f57806364afd18b1161020857806370a08231116101e257806370a08231146106d8578063715018a614610715578063735de9f71461072c57806375f0a874146107575761030a565b806364afd18b1461066b5780636827e764146106825780636b67c4df146106ad5761030a565b8063395093511461055857806339bab4a9146105955780633f9290f4146105be5780634477b79a146105da57806358e4b7311461060357806360388233146106405761030a565b80631e5bbf62116102bc57806323b872dd1161029657806323b872dd1461049e578063285a9766146104db578063313ce56714610504578063378b02661461052f5761030a565b80631e5bbf621461042157806321b27ec11461044a57806322429085146104755761030a565b80630445b6671461030f57806306fdde031461033a578063095ea7b314610365578063177e807b146103a257806318160ddd146103cb5780631df4ccfc146103f65761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c16565b604051610331919061447d565b60405180910390f35b34801561034657600080fd5b5061034f610c1c565b60405161035c91906141bb565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190613ba5565b610cae565b6040516103999190614185565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190613c12565b610cd1565b005b3480156103d757600080fd5b506103e0610e53565b6040516103ed919061447d565b60405180910390f35b34801561040257600080fd5b5061040b610e5d565b604051610418919061447d565b60405180910390f35b34801561042d57600080fd5b5061044860048036038101906104439190613b65565b610e63565b005b34801561045657600080fd5b5061045f610f88565b60405161046c9190614185565b60405180910390f35b34801561048157600080fd5b5061049c60048036038101906104979190613c3f565b610f9b565b005b3480156104aa57600080fd5b506104c560048036038101906104c09190613abf565b6110dd565b6040516104d29190614185565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd9190613ce5565b61110c565b005b34801561051057600080fd5b50610519611221565b6040516105269190614552565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613ce5565b61122a565b005b34801561056457600080fd5b5061057f600480360381019061057a9190613ba5565b61133f565b60405161058c9190614185565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190613c12565b611376565b005b6105d860048036038101906105d39190613b12565b6114f8565b005b3480156105e657600080fd5b5061060160048036038101906105fc9190613ce5565b6118b9565b005b34801561060f57600080fd5b5061062a60048036038101906106259190613a25565b6119ce565b6040516106379190614185565b60405180910390f35b34801561064c57600080fd5b506106556119ee565b604051610662919061447d565b60405180910390f35b34801561067757600080fd5b506106806119f8565b005b34801561068e57600080fd5b50610697611a91565b6040516106a4919061447d565b60405180910390f35b3480156106b957600080fd5b506106c2611a97565b6040516106cf919061447d565b60405180910390f35b3480156106e457600080fd5b506106ff60048036038101906106fa9190613a25565b611a9d565b60405161070c919061447d565b60405180910390f35b34801561072157600080fd5b5061072a611ae6565b005b34801561073857600080fd5b50610741611b6e565b60405161074e91906141a0565b60405180910390f35b34801561076357600080fd5b5061076c611b94565b6040516107799190614109565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a49190613a25565b611bba565b005b3480156107b757600080fd5b506107c0611c7a565b6040516107cd9190614185565b60405180910390f35b3480156107e257600080fd5b506107eb611c8d565b6040516107f89190614109565b60405180910390f35b34801561080d57600080fd5b50610816611cb6565b6040516108239190614109565b60405180910390f35b34801561083857600080fd5b50610853600480360381019061084e9190613be5565b611cdc565b005b34801561086157600080fd5b5061086a611dac565b60405161087791906141bb565b60405180910390f35b34801561088c57600080fd5b50610895611e3e565b6040516108a2919061447d565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd9190613ba5565b611e44565b6040516108df9190614185565b60405180910390f35b3480156108f457600080fd5b5061090f600480360381019061090a9190613c12565b611ebb565b005b34801561091d57600080fd5b5061093860048036038101906109339190613ba5565b61203d565b6040516109459190614185565b60405180910390f35b34801561095a57600080fd5b50610963612060565b604051610970919061447d565b60405180910390f35b34801561098557600080fd5b5061098e612066565b60405161099b9190614552565b60405180910390f35b3480156109b057600080fd5b506109b9612079565b6040516109c6919061447d565b60405180910390f35b3480156109db57600080fd5b506109e461207f565b6040516109f19190614552565b60405180910390f35b348015610a0657600080fd5b50610a0f612092565b604051610a1c9190614552565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190613c12565b6120a5565b005b348015610a5a57600080fd5b50610a63612162565b604051610a709190614109565b60405180910390f35b348015610a8557600080fd5b50610a8e612188565b604051610a9b9190614109565b60405180910390f35b348015610ab057600080fd5b50610acb6004803603810190610ac69190613c12565b6121ae565b005b348015610ad957600080fd5b50610af46004803603810190610aef9190613a7f565b61226b565b604051610b01919061447d565b60405180910390f35b348015610b1657600080fd5b50610b1f6122f2565b604051610b2c919061447d565b60405180910390f35b348015610b4157600080fd5b50610b5c6004803603810190610b579190613c12565b6122fc565b005b348015610b6a57600080fd5b50610b856004803603810190610b809190613a7f565b612382565b005b348015610b9357600080fd5b50610bae6004803603810190610ba99190613a25565b6125be565b005b348015610bbc57600080fd5b50610bd76004803603810190610bd29190613b65565b6126b6565b005b348015610be557600080fd5b50610c006004803603810190610bfb9190613a25565b6127db565b604051610c0d9190614185565b60405180910390f35b60115481565b606060048054610c2b90614823565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5790614823565b8015610ca45780601f10610c7957610100808354040283529160200191610ca4565b820191906000526020600020905b815481529060010190602001808311610c8757829003601f168201915b5050505050905090565b600080610cb961283d565b9050610cc6818585612845565b600191505092915050565b610cd961283d565b73ffffffffffffffffffffffffffffffffffffffff16610cf7611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d44906143bd565b60405180910390fd5b60008111610d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d87906142bd565b60405180910390fd5b806016541015610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc9061421d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610e3557600080fd5b610e4a81601654612a1090919063ffffffff16565b60168190555050565b6000600354905090565b600c5481565b610e6b61283d565b73ffffffffffffffffffffffffffffffffffffffff16610e89611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed6906143bd565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f704ff73c4e410152e02ca4e708d579e08ac7865f1ac8edce526234513f4ac5c582604051610f7c9190614185565b60405180910390a25050565b601360009054906101000a900460ff1681565b610fa361283d565b73ffffffffffffffffffffffffffffffffffffffff16610fc1611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e906143bd565b60405180910390fd5b8260098190555081600a8190555080600b8190555061105181611043848661282790919063ffffffff16565b61282790919063ffffffff16565b600c819055506004600c54111561109d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611094906141fd565b60405180910390fd5b7f509d432c4ab40e3eb039ee95fea93be8de6c751efa87aed5e51c7202b0dd8e098383836040516110d09392919061451b565b60405180910390a1505050565b6000806110e861283d565b90506110f5858285612a26565b611100858585612ab2565b60019150509392505050565b61111461283d565b73ffffffffffffffffffffffffffffffffffffffff16611132611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f906143bd565b60405180910390fd5b6064601560029054906101000a900460ff16601560009054906101000a900460ff16836111b59190614618565b6111bf9190614618565b60ff161115611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa906142fd565b60405180910390fd5b80601560016101000a81548160ff021916908360ff16021790555050565b60006012905090565b61123261283d565b73ffffffffffffffffffffffffffffffffffffffff16611250611c8d565b73ffffffffffffffffffffffffffffffffffffffff16146112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d906143bd565b60405180910390fd5b6064601560029054906101000a900460ff16601560019054906101000a900460ff16836112d39190614618565b6112dd9190614618565b60ff161115611321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611318906142fd565b60405180910390fd5b80601560006101000a81548160ff021916908360ff16021790555050565b60008061134a61283d565b905061136b81858561135c858961226b565b61136691906145c2565b612845565b600191505092915050565b61137e61283d565b73ffffffffffffffffffffffffffffffffffffffff1661139c611c8d565b73ffffffffffffffffffffffffffffffffffffffff16146113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e9906143bd565b60405180910390fd5b60008111611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142c906142bd565b60405180910390fd5b80601854101561147a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114719061421d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506114da57600080fd5b6114ef81601854612a1090919063ffffffff16565b60188190555050565b600034141561153c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611533906142dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a39061443d565b60405180910390fd5b60003490506064601560019054906101000a900460ff1660ff16826115d19190614680565b6115db919061464f565b601660008282546115ec91906145c2565b925050819055506115fc84611a9d565b60145411611864576000601560029054906101000a900460ff1660ff16118015611630575061162a83611a9d565b60145411155b15611759576064601560029054906101000a900460ff16601560009054906101000a900460ff16601560019054906101000a900460ff166064611673919061470e565b61167d919061470e565b611687919061470e565b60ff16826116959190614680565b61169f919061464f565b601760008282546116b091906145c2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff166108fc6064601560029054906101000a900460ff1660ff16846116f19190614680565b6116fb919061464f565b9081150290604051600060405180830381858888f19350505050611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b9061437d565b60405180910390fd5b6117c2565b6064601560009054906101000a900460ff16601560019054906101000a900460ff166064611787919061470e565b611791919061470e565b60ff168261179f9190614680565b6117a9919061464f565b601760008282546117ba91906145c2565b925050819055505b8373ffffffffffffffffffffffffffffffffffffffff166108fc6064601560009054906101000a900460ff1660ff16846117fc9190614680565b611806919061464f565b9081150290604051600060405180830381858888f1935050505061185f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118569061431d565b60405180910390fd5b6118b3565b6064601560019054906101000a900460ff166064611882919061470e565b60ff16826118909190614680565b61189a919061464f565b601760008282546118ab91906145c2565b925050819055505b50505050565b6118c161283d565b73ffffffffffffffffffffffffffffffffffffffff166118df611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192c906143bd565b60405180910390fd5b6064601560019054906101000a900460ff16601560009054906101000a900460ff16836119629190614618565b61196c9190614618565b60ff1611156119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a7906142fd565b60405180910390fd5b80601560026101000a81548160ff021916908360ff16021790555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6000601654905090565b611a0061283d565b73ffffffffffffffffffffffffffffffffffffffff16611a1e611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b906143bd565b60405180910390fd5b6001601360016101000a81548160ff021916908315150217905550565b60095481565b600a5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611aee61283d565b73ffffffffffffffffffffffffffffffffffffffff16611b0c611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b59906143bd565b60405180910390fd5b611b6c6000613080565b565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bc261283d565b73ffffffffffffffffffffffffffffffffffffffff16611be0611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d906143bd565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601360019054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ce461283d565b73ffffffffffffffffffffffffffffffffffffffff16611d02611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f906143bd565b60405180910390fd5b80601360006101000a81548160ff0219169083151502179055507ffc9a38574cd72afde7f596ce987008cf51a79b0451b7997cdbc9135489199dcf81604051611da19190614185565b60405180910390a150565b606060058054611dbb90614823565b80601f0160208091040260200160405190810160405280929190818152602001828054611de790614823565b8015611e345780601f10611e0957610100808354040283529160200191611e34565b820191906000526020600020905b815481529060010190602001808311611e1757829003601f168201915b5050505050905090565b600b5481565b600080611e4f61283d565b90506000611e5d828661226b565b905083811015611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e999061445d565b60405180910390fd5b611eaf8286868403612845565b60019250505092915050565b611ec361283d565b73ffffffffffffffffffffffffffffffffffffffff16611ee1611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614611f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2e906143bd565b60405180910390fd5b60008111611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f71906142bd565b60405180910390fd5b806017541015611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb69061421d565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061201f57600080fd5b61203481601754612a1090919063ffffffff16565b60178190555050565b60008061204861283d565b9050612055818585612ab2565b600191505092915050565b60125481565b601560029054906101000a900460ff1681565b60145481565b601560009054906101000a900460ff1681565b601560019054906101000a900460ff1681565b6120ad61283d565b73ffffffffffffffffffffffffffffffffffffffff166120cb611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614612121576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612118906143bd565b60405180910390fd5b806012819055507f22c83a5ec34271153086583a02141e6d8afa47085fffe4f3c546e7011357aa0981604051612157919061447d565b60405180910390a150565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121b661283d565b73ffffffffffffffffffffffffffffffffffffffff166121d4611c8d565b73ffffffffffffffffffffffffffffffffffffffff161461222a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612221906143bd565b60405180910390fd5b806011819055507fadfa8ecb21b6962ebcd0adbd9ab985b7b4c5b5eb3b0dead683171565c7bfe17181604051612260919061447d565b60405180910390a150565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000601754905090565b61230461283d565b73ffffffffffffffffffffffffffffffffffffffff16612322611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614612378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236f906143bd565b60405180910390fd5b8060148190555050565b61238a61283d565b73ffffffffffffffffffffffffffffffffffffffff166123a8611c8d565b73ffffffffffffffffffffffffffffffffffffffff16146123fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f5906143bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561246e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124659061435d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d59061439d565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f316af92955f23ddbd4c570a5f8cda8a10b192f24d8f58524deb2fcb03a8bc79460405160405180910390a35050565b6125c661283d565b73ffffffffffffffffffffffffffffffffffffffff166125e4611c8d565b73ffffffffffffffffffffffffffffffffffffffff161461263a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612631906143bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a19061423d565b60405180910390fd5b6126b381613080565b50565b6126be61283d565b73ffffffffffffffffffffffffffffffffffffffff166126dc611c8d565b73ffffffffffffffffffffffffffffffffffffffff1614612732576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612729906143bd565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fa35648c59c0d294efd491e4dd37c5c989af10767bb4cada9ddae9a689006232a826040516127cf9190614185565b60405180910390a25050565b600e6020528060005260406000206000915054906101000a900460ff1681565b600081836128099190614680565b905092915050565b6000818361281f919061464f565b905092915050565b6000818361283591906145c2565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ac9061441d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291c9061425d565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a03919061447d565b60405180910390a3505050565b60008183612a1e91906146da565b905092915050565b6000612a32848461226b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612aac5781811015612a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a959061427d565b60405180910390fd5b612aab8484848403612845565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b19906143fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b89906141dd565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c365750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c8b57601360019054906101000a900460ff16612c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c819061433d565b60405180910390fd5b5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d099061429d565b60405180910390fd5b6000612d1f858585613144565b9050600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d875750601360009054906101000a900460ff165b15612e2357601254612de182600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282790919063ffffffff16565b1115612e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e19906143dd565b60405180910390fd5b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612ec25750601154600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b8015612edb5750601960009054906101000a900460ff16155b15612f2957612f28600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ee565b5b612f3c8383612a1090919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fd181600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282790919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613071919061447d565b60405180910390a35050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131ea5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133e457600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806132985750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156133e35760006132c760646132b9600c54866127fb90919063ffffffff16565b61281190919063ffffffff16565b90506132dc8184612a1090919063ffffffff16565b9250600081146133e15761333881600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282790919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133d8919061447d565b60405180910390a35b505b5b8190509392505050565b6001601960006101000a81548160ff0219169083151502179055506000613448600c5461343a61342b600a5460095461282790919063ffffffff16565b856127fb90919063ffffffff16565b61281190919063ffffffff16565b90506000613475600c54613467600b54866127fb90919063ffffffff16565b61281190919063ffffffff16565b9050600061348d60028361281190919063ffffffff16565b905060006134a4828561282790919063ffffffff16565b90506134af81613628565b60006134ee6018546134e06017546134d260165447612a1090919063ffffffff16565b612a1090919063ffffffff16565b612a1090919063ffffffff16565b9050600061351b600c5461350d600954856127fb90919063ffffffff16565b61281190919063ffffffff16565b90506000613548600c5461353a600a54866127fb90919063ffffffff16565b61281190919063ffffffff16565b90506000613575600c54613567600b54876127fb90919063ffffffff16565b61281190919063ffffffff16565b90506000831461359b576135948360175461282790919063ffffffff16565b6017819055505b600082146135bf576135b88260185461282790919063ffffffff16565b6018819055505b6135c9868261387a565b7f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450686826040516135fa9291906144f2565b60405180910390a150505050505050506000601960006101000a81548160ff02191690831515021790555050565b6000600267ffffffffffffffff81111561364557613644614911565b5b6040519080825280602002602001820160405280156136735781602001602082028036833780820191505090505b509050308160008151811061368b5761368a6148e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561372d57600080fd5b505afa158015613741573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137659190613a52565b81600181518110613779576137786148e2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137e030601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612845565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613844959493929190614498565b600060405180830381600087803b15801561385e57600080fd5b505af1158015613872573d6000803e3d6000fd5b505050505050565b6000811461398e576138af30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612845565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161393896959493929190614124565b6060604051808303818588803b15801561395157600080fd5b505af1158015613965573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061398a9190613c92565b5050505b5050565b6000813590506139a181614ea1565b92915050565b6000815190506139b681614ea1565b92915050565b6000813590506139cb81614eb8565b92915050565b6000813590506139e081614ecf565b92915050565b6000815190506139f581614ecf565b92915050565b600081359050613a0a81614ee6565b92915050565b600081359050613a1f81614efd565b92915050565b600060208284031215613a3b57613a3a614940565b5b6000613a4984828501613992565b91505092915050565b600060208284031215613a6857613a67614940565b5b6000613a76848285016139a7565b91505092915050565b60008060408385031215613a9657613a95614940565b5b6000613aa485828601613992565b9250506020613ab585828601613992565b9150509250929050565b600080600060608486031215613ad857613ad7614940565b5b6000613ae686828701613992565b9350506020613af786828701613992565b9250506040613b08868287016139d1565b9150509250925092565b600080600060608486031215613b2b57613b2a614940565b5b6000613b3986828701613992565b9350506020613b4a86828701613992565b9250506040613b5b868287016139fb565b9150509250925092565b60008060408385031215613b7c57613b7b614940565b5b6000613b8a85828601613992565b9250506020613b9b858286016139bc565b9150509250929050565b60008060408385031215613bbc57613bbb614940565b5b6000613bca85828601613992565b9250506020613bdb858286016139d1565b9150509250929050565b600060208284031215613bfb57613bfa614940565b5b6000613c09848285016139bc565b91505092915050565b600060208284031215613c2857613c27614940565b5b6000613c36848285016139d1565b91505092915050565b600080600060608486031215613c5857613c57614940565b5b6000613c66868287016139d1565b9350506020613c77868287016139d1565b9250506040613c88868287016139d1565b9150509250925092565b600080600060608486031215613cab57613caa614940565b5b6000613cb9868287016139e6565b9350506020613cca868287016139e6565b9250506040613cdb868287016139e6565b9150509250925092565b600060208284031215613cfb57613cfa614940565b5b6000613d0984828501613a10565b91505092915050565b6000613d1e8383613d2a565b60208301905092915050565b613d3381614742565b82525050565b613d4281614742565b82525050565b6000613d538261457d565b613d5d81856145a0565b9350613d688361456d565b8060005b83811015613d99578151613d808882613d12565b9750613d8b83614593565b925050600181019050613d6c565b5085935050505092915050565b613daf81614754565b82525050565b613dbe816147a8565b82525050565b613dcd816147ba565b82525050565b6000613dde82614588565b613de881856145b1565b9350613df88185602086016147f0565b613e0181614945565b840191505092915050565b6000613e196023836145b1565b9150613e2482614956565b604082019050919050565b6000613e3c601b836145b1565b9150613e47826149a5565b602082019050919050565b6000613e5f6021836145b1565b9150613e6a826149ce565b604082019050919050565b6000613e826026836145b1565b9150613e8d82614a1d565b604082019050919050565b6000613ea56022836145b1565b9150613eb082614a6c565b604082019050919050565b6000613ec8601d836145b1565b9150613ed382614abb565b602082019050919050565b6000613eeb6026836145b1565b9150613ef682614ae4565b604082019050919050565b6000613f0e6021836145b1565b9150613f1982614b33565b604082019050919050565b6000613f31601f836145b1565b9150613f3c82614b82565b602082019050919050565b6000613f54602d836145b1565b9150613f5f82614bab565b604082019050919050565b6000613f776019836145b1565b9150613f8282614bfa565b602082019050919050565b6000613f9a601e836145b1565b9150613fa582614c23565b602082019050919050565b6000613fbd6022836145b1565b9150613fc882614c4c565b604082019050919050565b6000613fe0601e836145b1565b9150613feb82614c9b565b602082019050919050565b60006140036028836145b1565b915061400e82614cc4565b604082019050919050565b60006140266020836145b1565b915061403182614d13565b602082019050919050565b60006140496034836145b1565b915061405482614d3c565b604082019050919050565b600061406c6025836145b1565b915061407782614d8b565b604082019050919050565b600061408f6024836145b1565b915061409a82614dda565b604082019050919050565b60006140b2601a836145b1565b91506140bd82614e29565b602082019050919050565b60006140d56025836145b1565b91506140e082614e52565b604082019050919050565b6140f481614780565b82525050565b6141038161479b565b82525050565b600060208201905061411e6000830184613d39565b92915050565b600060c0820190506141396000830189613d39565b61414660208301886140eb565b6141536040830187613dc4565b6141606060830186613dc4565b61416d6080830185613d39565b61417a60a08301846140eb565b979650505050505050565b600060208201905061419a6000830184613da6565b92915050565b60006020820190506141b56000830184613db5565b92915050565b600060208201905081810360008301526141d58184613dd3565b905092915050565b600060208201905081810360008301526141f681613e0c565b9050919050565b6000602082019050818103600083015261421681613e2f565b9050919050565b6000602082019050818103600083015261423681613e52565b9050919050565b6000602082019050818103600083015261425681613e75565b9050919050565b6000602082019050818103600083015261427681613e98565b9050919050565b6000602082019050818103600083015261429681613ebb565b9050919050565b600060208201905081810360008301526142b681613ede565b9050919050565b600060208201905081810360008301526142d681613f01565b9050919050565b600060208201905081810360008301526142f681613f24565b9050919050565b6000602082019050818103600083015261431681613f47565b9050919050565b6000602082019050818103600083015261433681613f6a565b9050919050565b6000602082019050818103600083015261435681613f8d565b9050919050565b6000602082019050818103600083015261437681613fb0565b9050919050565b6000602082019050818103600083015261439681613fd3565b9050919050565b600060208201905081810360008301526143b681613ff6565b9050919050565b600060208201905081810360008301526143d681614019565b9050919050565b600060208201905081810360008301526143f68161403c565b9050919050565b600060208201905081810360008301526144168161405f565b9050919050565b6000602082019050818103600083015261443681614082565b9050919050565b60006020820190508181036000830152614456816140a5565b9050919050565b60006020820190508181036000830152614476816140c8565b9050919050565b600060208201905061449260008301846140eb565b92915050565b600060a0820190506144ad60008301886140eb565b6144ba6020830187613dc4565b81810360408301526144cc8186613d48565b90506144db6060830185613d39565b6144e860808301846140eb565b9695505050505050565b600060408201905061450760008301856140eb565b61451460208301846140eb565b9392505050565b600060608201905061453060008301866140eb565b61453d60208301856140eb565b61454a60408301846140eb565b949350505050565b600060208201905061456760008301846140fa565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006145cd82614780565b91506145d883614780565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561460d5761460c614855565b5b828201905092915050565b60006146238261479b565b915061462e8361479b565b92508260ff0382111561464457614643614855565b5b828201905092915050565b600061465a82614780565b915061466583614780565b92508261467557614674614884565b5b828204905092915050565b600061468b82614780565b915061469683614780565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146cf576146ce614855565b5b828202905092915050565b60006146e582614780565b91506146f083614780565b92508282101561470357614702614855565b5b828203905092915050565b60006147198261479b565b91506147248361479b565b92508282101561473757614736614855565b5b828203905092915050565b600061474d82614760565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600064ffffffffff82169050919050565b600060ff82169050919050565b60006147b3826147cc565b9050919050565b60006147c582614780565b9050919050565b60006147d7826147de565b9050919050565b60006147e982614760565b9050919050565b60005b8381101561480e5780820151818401526020810190506147f3565b8381111561481d576000848401525b50505050565b6000600282049050600182168061483b57607f821691505b6020821081141561484f5761484e6148b3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f546f74616c206665652063616e206e6f74206578636565647320340000000000600082015250565b7f4974277320696d706f737369626c6520746f2064756d702074686973206d756360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f54686520616d6f756e74206d7573742062652067726561746572207468616e2060008201527f3000000000000000000000000000000000000000000000000000000000000000602082015250565b7f53656e7420455448206d7573742062652067726561746572207468616e203000600082015250565b7f5468652073756d206f662070657263656e74616765732063616e27742062652060008201527f6d6f7265207468616e2031303000000000000000000000000000000000000000602082015250565b7f5472616e7366657220746f20747261646572206661696c656400000000000000600082015250565b7f54726164696e672069732063757272656e746c792064697361626c6564210000600082015250565b7f6465762077616c6c65742063616e206e6f74206265207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220746f206f776e65722067726f7570206661696c65640000600082015250565b7f6d61726b6574696e672077616c6c65742063616e206e6f74206265207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f416e7468697768616c653a2063616e206e6f7420686f6c64206d6f726520746860008201527f616e206d61782077616c6c657420616d6f756e74000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164657220616464726573732063616e6e6f742062652030000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b614eaa81614742565b8114614eb557600080fd5b50565b614ec181614754565b8114614ecc57600080fd5b50565b614ed881614780565b8114614ee357600080fd5b50565b614eef8161478a565b8114614efa57600080fd5b50565b614f068161479b565b8114614f1157600080fd5b5056fea2646970667358221220327d933b42cd8221fed525ead51925958cc2fd8a727cb52eabca278e36bb1c8e64736f6c63430008070033
Deployed Bytecode Sourcemap
20029:22330:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20942:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26731:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29094:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24376:349;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27855:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20729:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41842:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21014:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37202:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29879:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25646:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27697:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25333:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30585:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24019:349;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22841:1170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25973:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20759:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26433:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42268:86;;;;;;;;;;;;;:::i;:::-;;20621:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20653:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28028:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12495:103;;;;;;;;;;;;;:::i;:::-;;20896:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20457:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26311:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21055:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11844:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20381:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42096:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26952:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20691:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31331:441;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24733:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28361:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20977:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21241:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21087:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21164:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21201:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41573:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20539:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20863:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37709:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28621:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26550:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25149:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41074:435;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12753:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36901:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20811:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20942:28;;;;:::o;26731:102::-;26787:13;26820:5;26813:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26731:102;:::o;29094:205::-;29179:4;29196:14;29213:12;:10;:12::i;:::-;29196:29;;29236:33;29245:6;29253:7;29262:6;29236:8;:33::i;:::-;29287:4;29280:11;;;29094:205;;;;:::o;24376:349::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24466:1:::1;24456:7;:11;24448:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24548:7;24525:19;;:30;;24516:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;24621:15;;;;;;;;;;;24613:29;;:38;24643:7;24613:38;;;;;;;;;;;;;;;;;;;;;;;24605:47;;;::::0;::::1;;24685:32;24709:7;24685:19;;:23;;:32;;;;:::i;:::-;24663:19;:54;;;;24376:349:::0;:::o;27855:110::-;27918:7;27945:12;;27938:19;;27855:110;:::o;20729:23::-;;;;:::o;41842:202::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41982:7:::1;41957:13;:22;41971:7;41957:22;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;42019:7;42005:31;;;42028:7;42005:31;;;;;;:::i;:::-;;;;;;;;41842:202:::0;;:::o;21014:34::-;;;;;;;;;;;;;:::o;37202:445::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37358:7:::1;37349:6;:16;;;;37391:13;37376:12;:28;;;;37430:13;37415:12;:28;;;;37465:45;37496:13;37465:26;37477:13;37465:7;:11;;:26;;;;:::i;:::-;:30;;:45;;;;:::i;:::-;37454:8;:56;;;;37541:1;37529:8;;:13;;37521:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;37590:49;37601:7;37610:13;37625;37590:49;;;;;;;;:::i;:::-;;;;;;;;37202:445:::0;;;:::o;29879:297::-;30012:4;30029:15;30047:12;:10;:12::i;:::-;30029:30;;30070:38;30086:4;30092:7;30101:6;30070:15;:38::i;:::-;30119:27;30129:4;30135:2;30139:6;30119:9;:27::i;:::-;30164:4;30157:11;;;29879:297;;;;;:::o;25646:261::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25798:3:::1;25777:16;;;;;;;;;;;25762:12;;;;;;;;;;;25740:19;:34;;;;:::i;:::-;:53;;;;:::i;:::-;25739:62;;;;25731:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;25880:19;25862:15;;:37;;;;;;;;;;;;;;;;;;25646:261:::0;:::o;27697:93::-;27755:5;27780:2;27773:9;;27697:93;:::o;25333:249::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25479:3:::1;25458:16;;;;;;;;;;;25440:15;;;;;;;;;;;25421:16;:34;;;;:::i;:::-;:53;;;;:::i;:::-;25420:62;;;;25412:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;25558:16;25543:12;;:31;;;;;;;;;;;;;;;;;;25333:249:::0;:::o;30585:243::-;30675:4;30692:14;30709:12;:10;:12::i;:::-;30692:29;;30732:66;30741:6;30749:7;30787:10;30758:26;30768:6;30776:7;30758:9;:26::i;:::-;:39;;;;:::i;:::-;30732:8;:66::i;:::-;30816:4;30809:11;;;30585:243;;;;:::o;24019:349::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24109:1:::1;24099:7;:11;24091:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24191:7;24168:19;;:30;;24159:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;24264:15;;;;;;;;;;;24256:29;;:38;24286:7;24256:38;;;;;;;;;;;;;;;;;;;;;;;24248:47;;;::::0;::::1;;24328:32;24352:7;24328:19;;:23;;:32;;;;:::i;:::-;24306:19;:54;;;;24019:349:::0;:::o;22841:1170::-;22983:1;22970:9;:14;;22962:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;23065:1;23039:28;;:14;:28;;;;23031:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23109:19;23131:9;23109:31;;23210:3;23191:15;;;;;;;;;;;23177:29;;:11;:29;;;;:::i;:::-;23176:37;;;;:::i;:::-;23153:19;;:60;;;;;;;:::i;:::-;;;;;;;;23254:25;23264:14;23254:9;:25::i;:::-;23230:20;;:49;23226:778;;23319:1;23300:16;;;;;;;;;;;:20;;;:78;;;;;23348:30;23358:19;23348:9;:30::i;:::-;23324:20;;:54;;23300:78;23296:480;;;23499:3;23478:16;;;;;;;;;;;23463:12;;;;;;;;;;;23445:15;;;;;;;;;;;23439:3;:21;;;;:::i;:::-;:36;;;;:::i;:::-;:55;;;;:::i;:::-;23424:71;;:11;:71;;;;:::i;:::-;23423:79;;;;:::i;:::-;23399:20;;:103;;;;;;;:::i;:::-;;;;;;;;23537:19;23529:33;;:71;23596:3;23577:16;;;;;;;;;;;23563:30;;:11;:30;;;;:::i;:::-;:36;;;;:::i;:::-;23529:71;;;;;;;;;;;;;;;;;;;;;;;23521:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;23296:480;;;23757:3;23740:12;;;;;;;;;;;23722:15;;;;;;;;;;;23716:3;:21;;;;:::i;:::-;:36;;;;:::i;:::-;23701:52;;:11;:52;;;;:::i;:::-;23700:60;;;;:::i;:::-;23676:20;;:84;;;;;;;:::i;:::-;;;;;;;;23296:480;23806:14;23798:28;;:62;23856:3;23841:12;;;;;;;;;;;23827:26;;:11;:26;;;;:::i;:::-;:32;;;;:::i;:::-;23798:62;;;;;;;;;;;;;;;;;;;;;;;23790:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;23226:778;;;23989:3;23969:15;;;;;;;;;;;23963:3;:21;;;;:::i;:::-;23948:37;;:11;:37;;;;:::i;:::-;23947:45;;;;:::i;:::-;23923:20;;:69;;;;;;;:::i;:::-;;;;;;;;23226:778;22951:1060;22841:1170;;;:::o;25973:277::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26136:3:::1;26116:15;;;;;;;;;;;26101:12;;;;;;;;;;;26075:23;:38;;;;:::i;:::-;:56;;;;:::i;:::-;26074:65;;;;26066:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;26219:23;26200:16;;:42;;;;;;;;;;;;;;;;;;25973:277:::0;:::o;20759:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;26433:109::-;26488:7;26515:19;;26508:26;;26433:109;:::o;42268:86::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42342:4:::1;42326:13;;:20;;;;;;;;;;;;;;;;;;42268:86::o:0;20621:25::-;;;;:::o;20653:31::-;;;;:::o;28028:127::-;28102:7;28129:9;:18;28139:7;28129:18;;;;;;;;;;;;;;;;28122:25;;28028:127;;;:::o;12495:103::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12560:30:::1;12587:1;12560:18;:30::i;:::-;12495:103::o:0;20896:39::-;;;;;;;;;;;;;:::o;20457:75::-;;;;;;;;;;;;;:::o;26311:114::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26407:10:::1;26389:15;;:28;;;;;;;;;;;;;;;;;;26311:114:::0;:::o;21055:25::-;;;;;;;;;;;;;:::o;11844:87::-;11890:7;11917:6;;;;;;;;;;;11910:13;;11844:87;:::o;20381:69::-;;;;;;;;;;;;;:::o;42096:164::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42205:7:::1;42187:15;;:25;;;;;;;;;;;;;;;;;;42228:24;42244:7;42228:24;;;;;;:::i;:::-;;;;;;;;42096:164:::0;:::o;26952:106::-;27010:13;27043:7;27036:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26952:106;:::o;20691:31::-;;;;:::o;31331:441::-;31426:4;31443:14;31460:12;:10;:12::i;:::-;31443:29;;31483:24;31510:26;31520:6;31528:7;31510:9;:26::i;:::-;31483:53;;31575:15;31555:16;:35;;31547:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31668:61;31677:6;31685:7;31713:15;31694:16;:34;31668:8;:61::i;:::-;31760:4;31753:11;;;;31331:441;;;;:::o;24733:347::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24824:1:::1;24814:7;:11;24806:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24907:7;24883:20;;:31;;24874:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;24980:9;;;;;;;;;;;24972:23;;:32;24996:7;24972:32;;;;;;;;;;;;;;;;;;;;;;;24964:41;;;::::0;::::1;;25039:33;25064:7;25039:20;;:24;;:33;;;;:::i;:::-;25016:20;:56;;;;24733:347:::0;:::o;28361:197::-;28442:4;28459:14;28476:12;:10;:12::i;:::-;28459:29;;28499;28509:6;28517:2;28521:6;28499:9;:29::i;:::-;28546:4;28539:11;;;28361:197;;;;:::o;20977:30::-;;;;:::o;21241:33::-;;;;;;;;;;;;;:::o;21087:59::-;;;;:::o;21164:30::-;;;;;;;;;;;;;:::o;21201:33::-;;;;;;;;;;;;;:::o;41573:194::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41694:16:::1;41676:15;:34;;;;41726:33;41742:16;41726:33;;;;;;:::i;:::-;;;;;;;;41573:194:::0;:::o;20539:75::-;;;;;;;;;;;;;:::o;20863:26::-;;;;;;;;;;;;;:::o;37709:182::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37823:13:::1;37807;:29;;;;37852:31;37869:13;37852:31;;;;;;:::i;:::-;;;;;;;;37709:182:::0;:::o;28621:153::-;28711:7;28738:11;:19;28750:6;28738:19;;;;;;;;;;;;;;;:28;28758:7;28738:28;;;;;;;;;;;;;;;;28731:35;;28621:153;;;;:::o;26550:111::-;26606:7;26633:20;;26626:27;;26550:111;:::o;25149:123::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25254:10:::1;25231:20;:33;;;;25149:123:::0;:::o;41074:435::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41228:1:::1;41206:24;;:10;:24;;;;41198:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;41316:1;41288:30;;:16;:30;;;;41280:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;41386:10;41374:9;;:22;;;;;;;;;;;;;;;;;;41425:16;41407:15;;:34;;;;;;;;;;;;;;;;;;41484:16;41457:44;;41472:10;41457:44;;;;;;;;;;;;41074:435:::0;;:::o;12753:201::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12862:1:::1;12842:22;;:8;:22;;;;12834:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12918:28;12937:8;12918:18;:28::i;:::-;12753:201:::0;:::o;36901:205::-;12075:12;:10;:12::i;:::-;12064:23;;:7;:5;:7::i;:::-;:23;;;12056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37039:7:::1;37015:13;:21;37029:6;37015:21;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;37082:6;37062:36;;;37090:7;37062:36;;;;;;:::i;:::-;;;;;;;;36901:205:::0;;:::o;20811:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;6198:98::-;6256:7;6287:1;6283;:5;;;;:::i;:::-;6276:12;;6198:98;;;;:::o;6597:::-;6655:7;6686:1;6682;:5;;;;:::i;:::-;6675:12;;6597:98;;;;:::o;5460:::-;5518:7;5549:1;5545;:5;;;;:::i;:::-;5538:12;;5460:98;;;;:::o;10711:::-;10764:7;10791:10;10784:17;;10711:98;:::o;35690:384::-;35845:1;35827:20;;:6;:20;;;;35819:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35926:1;35907:21;;:7;:21;;;;35899:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36011:6;35980:11;:19;35992:6;35980:19;;;;;;;;;;;;;;;:28;36000:7;35980:28;;;;;;;;;;;;;;;:37;;;;36050:7;36033:33;;36042:6;36033:33;;;36059:6;36033:33;;;;;;:::i;:::-;;;;;;;;35690:384;;;:::o;5841:98::-;5899:7;5930:1;5926;:5;;;;:::i;:::-;5919:12;;5841:98;;;;:::o;36365:456::-;36501:24;36528:26;36538:6;36546:7;36528:9;:26::i;:::-;36501:53;;36589:17;36569:16;:37;36565:249;;36651:6;36631:16;:26;;36623:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36735:52;36744:6;36752:7;36780:6;36761:16;:25;36735:8;:52::i;:::-;36565:249;36490:331;36365:456;;;:::o;32242:1425::-;32389:1;32373:18;;:4;:18;;;;32365:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32466:1;32452:16;;:2;:16;;;;32444:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32526:13;:19;32540:4;32526:19;;;;;;;;;;;;;;;;;;;;;;;;;32525:20;:42;;;;;32550:13;:17;32564:2;32550:17;;;;;;;;;;;;;;;;;;;;;;;;;32549:18;32525:42;32521:131;;;32592:13;;;;;;;;;;;32584:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32521:131;32664:19;32686:9;:15;32696:4;32686:15;;;;;;;;;;;;;;;;32664:37;;32735:6;32720:11;:21;;32712:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;32795:22;32820:25;32828:4;32834:2;32838:6;32820:7;:25::i;:::-;32795:50;;32877:13;:17;32891:2;32877:17;;;;;;;;;;;;;;;;;;;;;;;;;32876:18;:50;;;;;32911:15;;;;;;;;;;;32876:50;32858:224;;;32998:15;;32961:33;32979:14;32961:9;:13;32971:2;32961:13;;;;;;;;;;;;;;;;:17;;:33;;;;:::i;:::-;:52;;32953:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;32858:224;33120:11;;;;;;;;;;;33112:19;;:4;:19;;;;:77;;;;;33176:13;;33148:9;:24;33166:4;33148:24;;;;;;;;;;;;;;;;:41;;33112:77;:101;;;;;33207:6;;;;;;;;;;;33206:7;33112:101;33094:195;;;33240:37;33252:9;:24;33270:4;33252:24;;;;;;;;;;;;;;;;33240:11;:37::i;:::-;33094:195;33344:23;33360:6;33344:11;:15;;:23;;;;:::i;:::-;33326:9;:15;33336:4;33326:15;;;;;;;;;;;;;;;:41;;;;33563:33;33581:14;33563:9;:13;33573:2;33563:13;;;;;;;;;;;;;;;;:17;;:33;;;;:::i;:::-;33547:9;:13;33557:2;33547:13;;;;;;;;;;;;;;;:49;;;;33640:2;33625:34;;33634:4;33625:34;;;33644:14;33625:34;;;;;;:::i;:::-;;;;;;;;32354:1313;;32242:1425;;;:::o;13114:191::-;13188:16;13207:6;;;;;;;;;;;13188:25;;13233:8;13224:6;;:17;;;;;;;;;;;;;;;;;;13288:8;13257:40;;13278:8;13257:40;;;;;;;;;;;;13177:128;13114:191;:::o;37899:713::-;38010:7;38035:13;:19;38049:4;38035:19;;;;;;;;;;;;;;;;;;;;;;;;;38034:20;:42;;;;;38059:13;:17;38073:2;38059:17;;;;;;;;;;;;;;;;;;;;;;;;;38058:18;38034:42;38030:549;;;38180:11;;;;;;;;;;;38172:19;;:4;:19;;;:40;;;;38201:11;;;;;;;;;;;38195:17;;:2;:17;;;38172:40;38168:400;;;38233:17;38253:33;38278:7;38253:20;38264:8;;38253:6;:10;;:20;;;;:::i;:::-;:24;;:33;;;;:::i;:::-;38233:53;;38314:21;38325:9;38314:6;:10;;:21;;;;:::i;:::-;38305:30;;38373:1;38360:9;:14;38356:197;;38426:39;38455:9;38426;:24;38444:4;38426:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;38399:9;:24;38417:4;38399:24;;;;;;;;;;;;;;;:66;;;;38516:4;38493:40;;38502:4;38493:40;;;38523:9;38493:40;;;;;;:::i;:::-;;;;;;;;38356:197;38214:354;38168:400;38030:549;38598:6;38591:13;;37899:713;;;;;:::o;38687:1165::-;21480:4;21471:6;;:13;;;;;;;;;;;;;;;;;;38757:19:::1;38779:55;38825:8;;38779:41;38795:24;38806:12;;38795:6;;:10;;:24;;;;:::i;:::-;38779:11;:15;;:41;;;;:::i;:::-;:45;;:55;;;;:::i;:::-;38757:77;;38845:19;38867:43;38901:8;;38867:29;38883:12;;38867:11;:15;;:29;;;;:::i;:::-;:33;;:43;;;;:::i;:::-;38845:65;;38921:26;38950:18;38966:1;38950:11;:15;;:18;;;;:::i;:::-;38921:47;;38979:21;39003:35;39019:18;39003:11;:15;;:35;;;;:::i;:::-;38979:59;;39051:31;39068:13;39051:16;:31::i;:::-;39095:26;39124:97;39201:19;;39124:72;39175:20;;39124:46;39150:19;;39124:21;:25;;:46;;;;:::i;:::-;:50;;:72;;;;:::i;:::-;:76;;:97;;;;:::i;:::-;39095:126;;39234:17;39254:44;39289:8;;39254:30;39277:6;;39254:18;:22;;:30;;;;:::i;:::-;:34;;:44;;;;:::i;:::-;39234:64;;39309:23;39335:50;39376:8;;39335:36;39358:12;;39335:18;:22;;:36;;;;:::i;:::-;:40;;:50;;;;:::i;:::-;39309:76;;39396:23;39422:50;39463:8;;39422:36;39445:12;;39422:18;:22;;:36;;;;:::i;:::-;:40;;:50;;;;:::i;:::-;39396:76;;39502:1;39489:9;:14;39485:105;;39543:35;39568:9;39543:20;;:24;;:35;;;;:::i;:::-;39520:20;:58;;;;39485:105;39625:1;39606:15;:20;39602:115;;39665:40;39689:15;39665:19;;:23;;:40;;;;:::i;:::-;39643:19;:62;;;;39602:115;39729:49;39742:18;39762:15;39729:12;:49::i;:::-;39796:48;39808:18;39828:15;39796:48;;;;;;;:::i;:::-;;;;;;;;38746:1106;;;;;;;;21516:5:::0;21507:6;;:14;;;;;;;;;;;;;;;;;;38687:1165;:::o;39862:579::-;39988:21;40026:1;40012:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39988:40;;40057:4;40039;40044:1;40039:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40083:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40073:4;40078:1;40073:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;40114:60;40131:4;40146:13;;;;;;;;;;;40162:11;40114:8;:60::i;:::-;40211:13;;;;;;;;;;;:64;;;40290:11;40316:1;40360:4;40387;40407:15;40211:222;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39917:524;39862:579;:::o;40449:526::-;40547:1;40534:9;:14;40530:438;;40565:60;40582:4;40597:13;;;;;;;;;;;40613:11;40565:8;:60::i;:::-;40676:13;;;;;;;;;;;:29;;;40713:9;40750:4;40774:11;40804:1;40851;40898:9;;;;;;;;;;;40926:15;40676:280;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40530:438;40449:526;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;440:139;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;585:143;;;;:::o;734:137::-;779:5;817:6;804:20;795:29;;833:32;859:5;833:32;:::i;:::-;734:137;;;;:::o;877:135::-;921:5;959:6;946:20;937:29;;975:31;1000:5;975:31;:::i;:::-;877:135;;;;:::o;1018:329::-;1077:6;1126:2;1114:9;1105:7;1101:23;1097:32;1094:119;;;1132:79;;:::i;:::-;1094:119;1252:1;1277:53;1322:7;1313:6;1302:9;1298:22;1277:53;:::i;:::-;1267:63;;1223:117;1018:329;;;;:::o;1353:351::-;1423:6;1472:2;1460:9;1451:7;1447:23;1443:32;1440:119;;;1478:79;;:::i;:::-;1440:119;1598:1;1623:64;1679:7;1670:6;1659:9;1655:22;1623:64;:::i;:::-;1613:74;;1569:128;1353:351;;;;:::o;1710:474::-;1778:6;1786;1835:2;1823:9;1814:7;1810:23;1806:32;1803:119;;;1841:79;;:::i;:::-;1803:119;1961:1;1986:53;2031:7;2022:6;2011:9;2007:22;1986:53;:::i;:::-;1976:63;;1932:117;2088:2;2114:53;2159:7;2150:6;2139:9;2135:22;2114:53;:::i;:::-;2104:63;;2059:118;1710:474;;;;;:::o;2190:619::-;2267:6;2275;2283;2332:2;2320:9;2311:7;2307:23;2303:32;2300:119;;;2338:79;;:::i;:::-;2300:119;2458:1;2483:53;2528:7;2519:6;2508:9;2504:22;2483:53;:::i;:::-;2473:63;;2429:117;2585:2;2611:53;2656:7;2647:6;2636:9;2632:22;2611:53;:::i;:::-;2601:63;;2556:118;2713:2;2739:53;2784:7;2775:6;2764:9;2760:22;2739:53;:::i;:::-;2729:63;;2684:118;2190:619;;;;;:::o;2815:617::-;2891:6;2899;2907;2956:2;2944:9;2935:7;2931:23;2927:32;2924:119;;;2962:79;;:::i;:::-;2924:119;3082:1;3107:53;3152:7;3143:6;3132:9;3128:22;3107:53;:::i;:::-;3097:63;;3053:117;3209:2;3235:53;3280:7;3271:6;3260:9;3256:22;3235:53;:::i;:::-;3225:63;;3180:118;3337:2;3363:52;3407:7;3398:6;3387:9;3383:22;3363:52;:::i;:::-;3353:62;;3308:117;2815:617;;;;;:::o;3438:468::-;3503:6;3511;3560:2;3548:9;3539:7;3535:23;3531:32;3528:119;;;3566:79;;:::i;:::-;3528:119;3686:1;3711:53;3756:7;3747:6;3736:9;3732:22;3711:53;:::i;:::-;3701:63;;3657:117;3813:2;3839:50;3881:7;3872:6;3861:9;3857:22;3839:50;:::i;:::-;3829:60;;3784:115;3438:468;;;;;:::o;3912:474::-;3980:6;3988;4037:2;4025:9;4016:7;4012:23;4008:32;4005:119;;;4043:79;;:::i;:::-;4005:119;4163:1;4188:53;4233:7;4224:6;4213:9;4209:22;4188:53;:::i;:::-;4178:63;;4134:117;4290:2;4316:53;4361:7;4352:6;4341:9;4337:22;4316:53;:::i;:::-;4306:63;;4261:118;3912:474;;;;;:::o;4392:323::-;4448:6;4497:2;4485:9;4476:7;4472:23;4468:32;4465:119;;;4503:79;;:::i;:::-;4465:119;4623:1;4648:50;4690:7;4681:6;4670:9;4666:22;4648:50;:::i;:::-;4638:60;;4594:114;4392:323;;;;:::o;4721:329::-;4780:6;4829:2;4817:9;4808:7;4804:23;4800:32;4797:119;;;4835:79;;:::i;:::-;4797:119;4955:1;4980:53;5025:7;5016:6;5005:9;5001:22;4980:53;:::i;:::-;4970:63;;4926:117;4721:329;;;;:::o;5056:619::-;5133:6;5141;5149;5198:2;5186:9;5177:7;5173:23;5169:32;5166:119;;;5204:79;;:::i;:::-;5166:119;5324:1;5349:53;5394:7;5385:6;5374:9;5370:22;5349:53;:::i;:::-;5339:63;;5295:117;5451:2;5477:53;5522:7;5513:6;5502:9;5498:22;5477:53;:::i;:::-;5467:63;;5422:118;5579:2;5605:53;5650:7;5641:6;5630:9;5626:22;5605:53;:::i;:::-;5595:63;;5550:118;5056:619;;;;;:::o;5681:663::-;5769:6;5777;5785;5834:2;5822:9;5813:7;5809:23;5805:32;5802:119;;;5840:79;;:::i;:::-;5802:119;5960:1;5985:64;6041:7;6032:6;6021:9;6017:22;5985:64;:::i;:::-;5975:74;;5931:128;6098:2;6124:64;6180:7;6171:6;6160:9;6156:22;6124:64;:::i;:::-;6114:74;;6069:129;6237:2;6263:64;6319:7;6310:6;6299:9;6295:22;6263:64;:::i;:::-;6253:74;;6208:129;5681:663;;;;;:::o;6350:325::-;6407:6;6456:2;6444:9;6435:7;6431:23;6427:32;6424:119;;;6462:79;;:::i;:::-;6424:119;6582:1;6607:51;6650:7;6641:6;6630:9;6626:22;6607:51;:::i;:::-;6597:61;;6553:115;6350:325;;;;:::o;6681:179::-;6750:10;6771:46;6813:3;6805:6;6771:46;:::i;:::-;6849:4;6844:3;6840:14;6826:28;;6681:179;;;;:::o;6866:108::-;6943:24;6961:5;6943:24;:::i;:::-;6938:3;6931:37;6866:108;;:::o;6980:118::-;7067:24;7085:5;7067:24;:::i;:::-;7062:3;7055:37;6980:118;;:::o;7134:732::-;7253:3;7282:54;7330:5;7282:54;:::i;:::-;7352:86;7431:6;7426:3;7352:86;:::i;:::-;7345:93;;7462:56;7512:5;7462:56;:::i;:::-;7541:7;7572:1;7557:284;7582:6;7579:1;7576:13;7557:284;;;7658:6;7652:13;7685:63;7744:3;7729:13;7685:63;:::i;:::-;7678:70;;7771:60;7824:6;7771:60;:::i;:::-;7761:70;;7617:224;7604:1;7601;7597:9;7592:14;;7557:284;;;7561:14;7857:3;7850:10;;7258:608;;;7134:732;;;;:::o;7872:109::-;7953:21;7968:5;7953:21;:::i;:::-;7948:3;7941:34;7872:109;;:::o;7987:183::-;8100:63;8157:5;8100:63;:::i;:::-;8095:3;8088:76;7987:183;;:::o;8176:147::-;8271:45;8310:5;8271:45;:::i;:::-;8266:3;8259:58;8176:147;;:::o;8329:364::-;8417:3;8445:39;8478:5;8445:39;:::i;:::-;8500:71;8564:6;8559:3;8500:71;:::i;:::-;8493:78;;8580:52;8625:6;8620:3;8613:4;8606:5;8602:16;8580:52;:::i;:::-;8657:29;8679:6;8657:29;:::i;:::-;8652:3;8648:39;8641:46;;8421:272;8329:364;;;;:::o;8699:366::-;8841:3;8862:67;8926:2;8921:3;8862:67;:::i;:::-;8855:74;;8938:93;9027:3;8938:93;:::i;:::-;9056:2;9051:3;9047:12;9040:19;;8699:366;;;:::o;9071:::-;9213:3;9234:67;9298:2;9293:3;9234:67;:::i;:::-;9227:74;;9310:93;9399:3;9310:93;:::i;:::-;9428:2;9423:3;9419:12;9412:19;;9071:366;;;:::o;9443:::-;9585:3;9606:67;9670:2;9665:3;9606:67;:::i;:::-;9599:74;;9682:93;9771:3;9682:93;:::i;:::-;9800:2;9795:3;9791:12;9784:19;;9443:366;;;:::o;9815:::-;9957:3;9978:67;10042:2;10037:3;9978:67;:::i;:::-;9971:74;;10054:93;10143:3;10054:93;:::i;:::-;10172:2;10167:3;10163:12;10156:19;;9815:366;;;:::o;10187:::-;10329:3;10350:67;10414:2;10409:3;10350:67;:::i;:::-;10343:74;;10426:93;10515:3;10426:93;:::i;:::-;10544:2;10539:3;10535:12;10528:19;;10187:366;;;:::o;10559:::-;10701:3;10722:67;10786:2;10781:3;10722:67;:::i;:::-;10715:74;;10798:93;10887:3;10798:93;:::i;:::-;10916:2;10911:3;10907:12;10900:19;;10559:366;;;:::o;10931:::-;11073:3;11094:67;11158:2;11153:3;11094:67;:::i;:::-;11087:74;;11170:93;11259:3;11170:93;:::i;:::-;11288:2;11283:3;11279:12;11272:19;;10931:366;;;:::o;11303:::-;11445:3;11466:67;11530:2;11525:3;11466:67;:::i;:::-;11459:74;;11542:93;11631:3;11542:93;:::i;:::-;11660:2;11655:3;11651:12;11644:19;;11303:366;;;:::o;11675:::-;11817:3;11838:67;11902:2;11897:3;11838:67;:::i;:::-;11831:74;;11914:93;12003:3;11914:93;:::i;:::-;12032:2;12027:3;12023:12;12016:19;;11675:366;;;:::o;12047:::-;12189:3;12210:67;12274:2;12269:3;12210:67;:::i;:::-;12203:74;;12286:93;12375:3;12286:93;:::i;:::-;12404:2;12399:3;12395:12;12388:19;;12047:366;;;:::o;12419:::-;12561:3;12582:67;12646:2;12641:3;12582:67;:::i;:::-;12575:74;;12658:93;12747:3;12658:93;:::i;:::-;12776:2;12771:3;12767:12;12760:19;;12419:366;;;:::o;12791:::-;12933:3;12954:67;13018:2;13013:3;12954:67;:::i;:::-;12947:74;;13030:93;13119:3;13030:93;:::i;:::-;13148:2;13143:3;13139:12;13132:19;;12791:366;;;:::o;13163:::-;13305:3;13326:67;13390:2;13385:3;13326:67;:::i;:::-;13319:74;;13402:93;13491:3;13402:93;:::i;:::-;13520:2;13515:3;13511:12;13504:19;;13163:366;;;:::o;13535:::-;13677:3;13698:67;13762:2;13757:3;13698:67;:::i;:::-;13691:74;;13774:93;13863:3;13774:93;:::i;:::-;13892:2;13887:3;13883:12;13876:19;;13535:366;;;:::o;13907:::-;14049:3;14070:67;14134:2;14129:3;14070:67;:::i;:::-;14063:74;;14146:93;14235:3;14146:93;:::i;:::-;14264:2;14259:3;14255:12;14248:19;;13907:366;;;:::o;14279:::-;14421:3;14442:67;14506:2;14501:3;14442:67;:::i;:::-;14435:74;;14518:93;14607:3;14518:93;:::i;:::-;14636:2;14631:3;14627:12;14620:19;;14279:366;;;:::o;14651:::-;14793:3;14814:67;14878:2;14873:3;14814:67;:::i;:::-;14807:74;;14890:93;14979:3;14890:93;:::i;:::-;15008:2;15003:3;14999:12;14992:19;;14651:366;;;:::o;15023:::-;15165:3;15186:67;15250:2;15245:3;15186:67;:::i;:::-;15179:74;;15262:93;15351:3;15262:93;:::i;:::-;15380:2;15375:3;15371:12;15364:19;;15023:366;;;:::o;15395:::-;15537:3;15558:67;15622:2;15617:3;15558:67;:::i;:::-;15551:74;;15634:93;15723:3;15634:93;:::i;:::-;15752:2;15747:3;15743:12;15736:19;;15395:366;;;:::o;15767:::-;15909:3;15930:67;15994:2;15989:3;15930:67;:::i;:::-;15923:74;;16006:93;16095:3;16006:93;:::i;:::-;16124:2;16119:3;16115:12;16108:19;;15767:366;;;:::o;16139:::-;16281:3;16302:67;16366:2;16361:3;16302:67;:::i;:::-;16295:74;;16378:93;16467:3;16378:93;:::i;:::-;16496:2;16491:3;16487:12;16480:19;;16139:366;;;:::o;16511:118::-;16598:24;16616:5;16598:24;:::i;:::-;16593:3;16586:37;16511:118;;:::o;16635:112::-;16718:22;16734:5;16718:22;:::i;:::-;16713:3;16706:35;16635:112;;:::o;16753:222::-;16846:4;16884:2;16873:9;16869:18;16861:26;;16897:71;16965:1;16954:9;16950:17;16941:6;16897:71;:::i;:::-;16753:222;;;;:::o;16981:807::-;17230:4;17268:3;17257:9;17253:19;17245:27;;17282:71;17350:1;17339:9;17335:17;17326:6;17282:71;:::i;:::-;17363:72;17431:2;17420:9;17416:18;17407:6;17363:72;:::i;:::-;17445:80;17521:2;17510:9;17506:18;17497:6;17445:80;:::i;:::-;17535;17611:2;17600:9;17596:18;17587:6;17535:80;:::i;:::-;17625:73;17693:3;17682:9;17678:19;17669:6;17625:73;:::i;:::-;17708;17776:3;17765:9;17761:19;17752:6;17708:73;:::i;:::-;16981:807;;;;;;;;;:::o;17794:210::-;17881:4;17919:2;17908:9;17904:18;17896:26;;17932:65;17994:1;17983:9;17979:17;17970:6;17932:65;:::i;:::-;17794:210;;;;:::o;18010:274::-;18129:4;18167:2;18156:9;18152:18;18144:26;;18180:97;18274:1;18263:9;18259:17;18250:6;18180:97;:::i;:::-;18010:274;;;;:::o;18290:313::-;18403:4;18441:2;18430:9;18426:18;18418:26;;18490:9;18484:4;18480:20;18476:1;18465:9;18461:17;18454:47;18518:78;18591:4;18582:6;18518:78;:::i;:::-;18510:86;;18290:313;;;;:::o;18609:419::-;18775:4;18813:2;18802:9;18798:18;18790:26;;18862:9;18856:4;18852:20;18848:1;18837:9;18833:17;18826:47;18890:131;19016:4;18890:131;:::i;:::-;18882:139;;18609:419;;;:::o;19034:::-;19200:4;19238:2;19227:9;19223:18;19215:26;;19287:9;19281:4;19277:20;19273:1;19262:9;19258:17;19251:47;19315:131;19441:4;19315:131;:::i;:::-;19307:139;;19034:419;;;:::o;19459:::-;19625:4;19663:2;19652:9;19648:18;19640:26;;19712:9;19706:4;19702:20;19698:1;19687:9;19683:17;19676:47;19740:131;19866:4;19740:131;:::i;:::-;19732:139;;19459:419;;;:::o;19884:::-;20050:4;20088:2;20077:9;20073:18;20065:26;;20137:9;20131:4;20127:20;20123:1;20112:9;20108:17;20101:47;20165:131;20291:4;20165:131;:::i;:::-;20157:139;;19884:419;;;:::o;20309:::-;20475:4;20513:2;20502:9;20498:18;20490:26;;20562:9;20556:4;20552:20;20548:1;20537:9;20533:17;20526:47;20590:131;20716:4;20590:131;:::i;:::-;20582:139;;20309:419;;;:::o;20734:::-;20900:4;20938:2;20927:9;20923:18;20915:26;;20987:9;20981:4;20977:20;20973:1;20962:9;20958:17;20951:47;21015:131;21141:4;21015:131;:::i;:::-;21007:139;;20734:419;;;:::o;21159:::-;21325:4;21363:2;21352:9;21348:18;21340:26;;21412:9;21406:4;21402:20;21398:1;21387:9;21383:17;21376:47;21440:131;21566:4;21440:131;:::i;:::-;21432:139;;21159:419;;;:::o;21584:::-;21750:4;21788:2;21777:9;21773:18;21765:26;;21837:9;21831:4;21827:20;21823:1;21812:9;21808:17;21801:47;21865:131;21991:4;21865:131;:::i;:::-;21857:139;;21584:419;;;:::o;22009:::-;22175:4;22213:2;22202:9;22198:18;22190:26;;22262:9;22256:4;22252:20;22248:1;22237:9;22233:17;22226:47;22290:131;22416:4;22290:131;:::i;:::-;22282:139;;22009:419;;;:::o;22434:::-;22600:4;22638:2;22627:9;22623:18;22615:26;;22687:9;22681:4;22677:20;22673:1;22662:9;22658:17;22651:47;22715:131;22841:4;22715:131;:::i;:::-;22707:139;;22434:419;;;:::o;22859:::-;23025:4;23063:2;23052:9;23048:18;23040:26;;23112:9;23106:4;23102:20;23098:1;23087:9;23083:17;23076:47;23140:131;23266:4;23140:131;:::i;:::-;23132:139;;22859:419;;;:::o;23284:::-;23450:4;23488:2;23477:9;23473:18;23465:26;;23537:9;23531:4;23527:20;23523:1;23512:9;23508:17;23501:47;23565:131;23691:4;23565:131;:::i;:::-;23557:139;;23284:419;;;:::o;23709:::-;23875:4;23913:2;23902:9;23898:18;23890:26;;23962:9;23956:4;23952:20;23948:1;23937:9;23933:17;23926:47;23990:131;24116:4;23990:131;:::i;:::-;23982:139;;23709:419;;;:::o;24134:::-;24300:4;24338:2;24327:9;24323:18;24315:26;;24387:9;24381:4;24377:20;24373:1;24362:9;24358:17;24351:47;24415:131;24541:4;24415:131;:::i;:::-;24407:139;;24134:419;;;:::o;24559:::-;24725:4;24763:2;24752:9;24748:18;24740:26;;24812:9;24806:4;24802:20;24798:1;24787:9;24783:17;24776:47;24840:131;24966:4;24840:131;:::i;:::-;24832:139;;24559:419;;;:::o;24984:::-;25150:4;25188:2;25177:9;25173:18;25165:26;;25237:9;25231:4;25227:20;25223:1;25212:9;25208:17;25201:47;25265:131;25391:4;25265:131;:::i;:::-;25257:139;;24984:419;;;:::o;25409:::-;25575:4;25613:2;25602:9;25598:18;25590:26;;25662:9;25656:4;25652:20;25648:1;25637:9;25633:17;25626:47;25690:131;25816:4;25690:131;:::i;:::-;25682:139;;25409:419;;;:::o;25834:::-;26000:4;26038:2;26027:9;26023:18;26015:26;;26087:9;26081:4;26077:20;26073:1;26062:9;26058:17;26051:47;26115:131;26241:4;26115:131;:::i;:::-;26107:139;;25834:419;;;:::o;26259:::-;26425:4;26463:2;26452:9;26448:18;26440:26;;26512:9;26506:4;26502:20;26498:1;26487:9;26483:17;26476:47;26540:131;26666:4;26540:131;:::i;:::-;26532:139;;26259:419;;;:::o;26684:::-;26850:4;26888:2;26877:9;26873:18;26865:26;;26937:9;26931:4;26927:20;26923:1;26912:9;26908:17;26901:47;26965:131;27091:4;26965:131;:::i;:::-;26957:139;;26684:419;;;:::o;27109:::-;27275:4;27313:2;27302:9;27298:18;27290:26;;27362:9;27356:4;27352:20;27348:1;27337:9;27333:17;27326:47;27390:131;27516:4;27390:131;:::i;:::-;27382:139;;27109:419;;;:::o;27534:222::-;27627:4;27665:2;27654:9;27650:18;27642:26;;27678:71;27746:1;27735:9;27731:17;27722:6;27678:71;:::i;:::-;27534:222;;;;:::o;27762:831::-;28025:4;28063:3;28052:9;28048:19;28040:27;;28077:71;28145:1;28134:9;28130:17;28121:6;28077:71;:::i;:::-;28158:80;28234:2;28223:9;28219:18;28210:6;28158:80;:::i;:::-;28285:9;28279:4;28275:20;28270:2;28259:9;28255:18;28248:48;28313:108;28416:4;28407:6;28313:108;:::i;:::-;28305:116;;28431:72;28499:2;28488:9;28484:18;28475:6;28431:72;:::i;:::-;28513:73;28581:3;28570:9;28566:19;28557:6;28513:73;:::i;:::-;27762:831;;;;;;;;:::o;28599:332::-;28720:4;28758:2;28747:9;28743:18;28735:26;;28771:71;28839:1;28828:9;28824:17;28815:6;28771:71;:::i;:::-;28852:72;28920:2;28909:9;28905:18;28896:6;28852:72;:::i;:::-;28599:332;;;;;:::o;28937:442::-;29086:4;29124:2;29113:9;29109:18;29101:26;;29137:71;29205:1;29194:9;29190:17;29181:6;29137:71;:::i;:::-;29218:72;29286:2;29275:9;29271:18;29262:6;29218:72;:::i;:::-;29300;29368:2;29357:9;29353:18;29344:6;29300:72;:::i;:::-;28937:442;;;;;;:::o;29385:214::-;29474:4;29512:2;29501:9;29497:18;29489:26;;29525:67;29589:1;29578:9;29574:17;29565:6;29525:67;:::i;:::-;29385:214;;;;:::o;29686:132::-;29753:4;29776:3;29768:11;;29806:4;29801:3;29797:14;29789:22;;29686:132;;;:::o;29824:114::-;29891:6;29925:5;29919:12;29909:22;;29824:114;;;:::o;29944:99::-;29996:6;30030:5;30024:12;30014:22;;29944:99;;;:::o;30049:113::-;30119:4;30151;30146:3;30142:14;30134:22;;30049:113;;;:::o;30168:184::-;30267:11;30301:6;30296:3;30289:19;30341:4;30336:3;30332:14;30317:29;;30168:184;;;;:::o;30358:169::-;30442:11;30476:6;30471:3;30464:19;30516:4;30511:3;30507:14;30492:29;;30358:169;;;;:::o;30533:305::-;30573:3;30592:20;30610:1;30592:20;:::i;:::-;30587:25;;30626:20;30644:1;30626:20;:::i;:::-;30621:25;;30780:1;30712:66;30708:74;30705:1;30702:81;30699:107;;;30786:18;;:::i;:::-;30699:107;30830:1;30827;30823:9;30816:16;;30533:305;;;;:::o;30844:237::-;30882:3;30901:18;30917:1;30901:18;:::i;:::-;30896:23;;30933:18;30949:1;30933:18;:::i;:::-;30928:23;;31023:1;31017:4;31013:12;31010:1;31007:19;31004:45;;;31029:18;;:::i;:::-;31004:45;31073:1;31070;31066:9;31059:16;;30844:237;;;;:::o;31087:185::-;31127:1;31144:20;31162:1;31144:20;:::i;:::-;31139:25;;31178:20;31196:1;31178:20;:::i;:::-;31173:25;;31217:1;31207:35;;31222:18;;:::i;:::-;31207:35;31264:1;31261;31257:9;31252:14;;31087:185;;;;:::o;31278:348::-;31318:7;31341:20;31359:1;31341:20;:::i;:::-;31336:25;;31375:20;31393:1;31375:20;:::i;:::-;31370:25;;31563:1;31495:66;31491:74;31488:1;31485:81;31480:1;31473:9;31466:17;31462:105;31459:131;;;31570:18;;:::i;:::-;31459:131;31618:1;31615;31611:9;31600:20;;31278:348;;;;:::o;31632:191::-;31672:4;31692:20;31710:1;31692:20;:::i;:::-;31687:25;;31726:20;31744:1;31726:20;:::i;:::-;31721:25;;31765:1;31762;31759:8;31756:34;;;31770:18;;:::i;:::-;31756:34;31815:1;31812;31808:9;31800:17;;31632:191;;;;:::o;31829:185::-;31867:4;31887:18;31903:1;31887:18;:::i;:::-;31882:23;;31919:18;31935:1;31919:18;:::i;:::-;31914:23;;31956:1;31953;31950:8;31947:34;;;31961:18;;:::i;:::-;31947:34;32006:1;32003;31999:9;31991:17;;31829:185;;;;:::o;32020:96::-;32057:7;32086:24;32104:5;32086:24;:::i;:::-;32075:35;;32020:96;;;:::o;32122:90::-;32156:7;32199:5;32192:13;32185:21;32174:32;;32122:90;;;:::o;32218:126::-;32255:7;32295:42;32288:5;32284:54;32273:65;;32218:126;;;:::o;32350:77::-;32387:7;32416:5;32405:16;;32350:77;;;:::o;32433:95::-;32469:7;32509:12;32502:5;32498:24;32487:35;;32433:95;;;:::o;32534:86::-;32569:7;32609:4;32602:5;32598:16;32587:27;;32534:86;;;:::o;32626:152::-;32702:9;32735:37;32766:5;32735:37;:::i;:::-;32722:50;;32626:152;;;:::o;32784:121::-;32842:9;32875:24;32893:5;32875:24;:::i;:::-;32862:37;;32784:121;;;:::o;32911:126::-;32961:9;32994:37;33025:5;32994:37;:::i;:::-;32981:50;;32911:126;;;:::o;33043:113::-;33093:9;33126:24;33144:5;33126:24;:::i;:::-;33113:37;;33043:113;;;:::o;33162:307::-;33230:1;33240:113;33254:6;33251:1;33248:13;33240:113;;;33339:1;33334:3;33330:11;33324:18;33320:1;33315:3;33311:11;33304:39;33276:2;33273:1;33269:10;33264:15;;33240:113;;;33371:6;33368:1;33365:13;33362:101;;;33451:1;33442:6;33437:3;33433:16;33426:27;33362:101;33211:258;33162:307;;;:::o;33475:320::-;33519:6;33556:1;33550:4;33546:12;33536:22;;33603:1;33597:4;33593:12;33624:18;33614:81;;33680:4;33672:6;33668:17;33658:27;;33614:81;33742:2;33734:6;33731:14;33711:18;33708:38;33705:84;;;33761:18;;:::i;:::-;33705:84;33526:269;33475:320;;;:::o;33801:180::-;33849:77;33846:1;33839:88;33946:4;33943:1;33936:15;33970:4;33967:1;33960:15;33987:180;34035:77;34032:1;34025:88;34132:4;34129:1;34122:15;34156:4;34153:1;34146:15;34173:180;34221:77;34218:1;34211:88;34318:4;34315:1;34308:15;34342:4;34339:1;34332:15;34359:180;34407:77;34404:1;34397:88;34504:4;34501:1;34494:15;34528:4;34525:1;34518:15;34545:180;34593:77;34590:1;34583:88;34690:4;34687:1;34680:15;34714:4;34711:1;34704:15;34854:117;34963:1;34960;34953:12;34977:102;35018:6;35069:2;35065:7;35060:2;35053:5;35049:14;35045:28;35035:38;;34977:102;;;:::o;35085:222::-;35225:34;35221:1;35213:6;35209:14;35202:58;35294:5;35289:2;35281:6;35277:15;35270:30;35085:222;:::o;35313:177::-;35453:29;35449:1;35441:6;35437:14;35430:53;35313:177;:::o;35496:220::-;35636:34;35632:1;35624:6;35620:14;35613:58;35705:3;35700:2;35692:6;35688:15;35681:28;35496:220;:::o;35722:225::-;35862:34;35858:1;35850:6;35846:14;35839:58;35931:8;35926:2;35918:6;35914:15;35907:33;35722:225;:::o;35953:221::-;36093:34;36089:1;36081:6;36077:14;36070:58;36162:4;36157:2;36149:6;36145:15;36138:29;35953:221;:::o;36180:179::-;36320:31;36316:1;36308:6;36304:14;36297:55;36180:179;:::o;36365:225::-;36505:34;36501:1;36493:6;36489:14;36482:58;36574:8;36569:2;36561:6;36557:15;36550:33;36365:225;:::o;36596:220::-;36736:34;36732:1;36724:6;36720:14;36713:58;36805:3;36800:2;36792:6;36788:15;36781:28;36596:220;:::o;36822:181::-;36962:33;36958:1;36950:6;36946:14;36939:57;36822:181;:::o;37009:232::-;37149:34;37145:1;37137:6;37133:14;37126:58;37218:15;37213:2;37205:6;37201:15;37194:40;37009:232;:::o;37247:175::-;37387:27;37383:1;37375:6;37371:14;37364:51;37247:175;:::o;37428:180::-;37568:32;37564:1;37556:6;37552:14;37545:56;37428:180;:::o;37614:221::-;37754:34;37750:1;37742:6;37738:14;37731:58;37823:4;37818:2;37810:6;37806:15;37799:29;37614:221;:::o;37841:180::-;37981:32;37977:1;37969:6;37965:14;37958:56;37841:180;:::o;38027:227::-;38167:34;38163:1;38155:6;38151:14;38144:58;38236:10;38231:2;38223:6;38219:15;38212:35;38027:227;:::o;38260:182::-;38400:34;38396:1;38388:6;38384:14;38377:58;38260:182;:::o;38448:239::-;38588:34;38584:1;38576:6;38572:14;38565:58;38657:22;38652:2;38644:6;38640:15;38633:47;38448:239;:::o;38693:224::-;38833:34;38829:1;38821:6;38817:14;38810:58;38902:7;38897:2;38889:6;38885:15;38878:32;38693:224;:::o;38923:223::-;39063:34;39059:1;39051:6;39047:14;39040:58;39132:6;39127:2;39119:6;39115:15;39108:31;38923:223;:::o;39152:176::-;39292:28;39288:1;39280:6;39276:14;39269:52;39152:176;:::o;39334:224::-;39474:34;39470:1;39462:6;39458:14;39451:58;39543:7;39538:2;39530:6;39526:15;39519:32;39334:224;:::o;39564:122::-;39637:24;39655:5;39637:24;:::i;:::-;39630:5;39627:35;39617:63;;39676:1;39673;39666:12;39617:63;39564:122;:::o;39692:116::-;39762:21;39777:5;39762:21;:::i;:::-;39755:5;39752:32;39742:60;;39798:1;39795;39788:12;39742:60;39692:116;:::o;39814:122::-;39887:24;39905:5;39887:24;:::i;:::-;39880:5;39877:35;39867:63;;39926:1;39923;39916:12;39867:63;39814:122;:::o;39942:120::-;40014:23;40031:5;40014:23;:::i;:::-;40007:5;40004:34;39994:62;;40052:1;40049;40042:12;39994:62;39942:120;:::o;40068:118::-;40139:22;40155:5;40139:22;:::i;:::-;40132:5;40129:33;40119:61;;40176:1;40173;40166:12;40119:61;40068:118;:::o
Swarm Source
ipfs://327d933b42cd8221fed525ead51925958cc2fd8a727cb52eabca278e36bb1c8e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.