Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
10,000,000,000,000 MEVSHARE
Holders
116
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
526,802.511415525114155251 MEVSHAREValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MEVSHARE
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-31 */ //SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.13; /** * @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; } } 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); } } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } ////// src/IUniswapV2Factory.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } ////// src/IUniswapV2Pair.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } ////// src/IUniswapV2Router02.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract MEVSHARE is Ownable, IERC20, IERC20Metadata{ using SafeMath for uint256; address UNISWAPROUTER = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; DividendTracker public dividendTracker; IUniswapV2Router02 public uniswapV2Router; bool public compoundingEnabled = false; address public uniswapV2Pair; event CompoundingEnabled(bool enabled); constructor () { _name = 'MEVShare'; _symbol = 'MEVSHARE'; _decimals = 18; _totalSupply = 10_000_000_000_000 * 1e18; _balances[msg.sender] = _totalSupply; dividendTracker = new DividendTracker(address(this), UNISWAPROUTER); dividendTracker.excludeFromDividends(address(dividendTracker), true); dividendTracker.excludeFromDividends(address(this), true); dividendTracker.excludeFromDividends(owner(), true); emit Transfer(address(0), msg.sender, _totalSupply); // Optional } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); dividendTracker.setBalance(payable(sender), _balances[sender]); dividendTracker.setBalance(payable(recipient), _balances[recipient]); emit Transfer(sender, recipient, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } 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); } function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } function setCompoundingEnabled(bool _enabled) external onlyOwner { compoundingEnabled = _enabled; emit CompoundingEnabled(_enabled); } function manualSendDividend(uint256 amount, address holder) external onlyOwner { dividendTracker.manualSendDividend(amount, holder); } function excludeFromDividends(address account, bool excluded) public onlyOwner { dividendTracker.excludeFromDividends(account, excluded); } function isExcludedFromDividends(address account) public view returns (bool) { return dividendTracker.isExcludedFromDividends(account); } function currentDividendsBalance(address account) public view returns (uint256) { return dividendTracker.currentDividendsBalance(account); } function claim() public { dividendTracker.processAccount(payable(_msgSender())); } function compound() public { require(compoundingEnabled, "Compounding is not enabled"); dividendTracker.compoundAccount(payable(_msgSender())); } function withdrawableDividendOf(address account) public view returns (uint256) { return dividendTracker.withdrawableDividendOf(account); } function withdrawnDividendOf(address account) public view returns (uint256) { return dividendTracker.withdrawnDividendOf(account); } function accumulativeDividendOf(address account) public view returns (uint256) { return dividendTracker.accumulativeDividendOf(account); } function getAccountInfo(address account) public view returns ( address, uint256, uint256, uint256, uint256 ) { return dividendTracker.getAccountInfo(account); } function getLastClaimTime(address account) public view returns (uint256) { return dividendTracker.getLastClaimTime(account); } function rescueToken(address _token, uint256 _amount) external onlyOwner { IERC20(_token).transfer(msg.sender, _amount); } function rescueETH(uint256 _amount) external onlyOwner { payable(msg.sender).transfer(_amount); } } contract DividendTracker is Ownable, IERC20 { address UNISWAPROUTER; string private _name = "MEVREPEL_Dividends"; string private _symbol = "MEVREPEL_Dividends"; uint256 public lastProcessedIndex; uint256 private _totalSupply; mapping(address => uint256) private _balances; uint256 private constant magnitude = 2**128; uint256 public immutable minTokenBalanceForDividends; uint256 private magnifiedDividendPerShare; uint256 public totalDividendsDistributed; uint256 public totalDividendsWithdrawn; address public tokenAddress; mapping(address => bool) public excludedFromDividends; mapping(address => int256) private magnifiedDividendCorrections; mapping(address => uint256) private withdrawnDividends; mapping(address => uint256) private lastClaimTimes; event DividendsDistributed(address indexed from, uint256 weiAmount); event DividendWithdrawn(address indexed to, uint256 weiAmount); event ExcludeFromDividends(address indexed account, bool excluded); event Claim(address indexed account, uint256 amount); event Compound(address indexed account, uint256 amount, uint256 tokens); struct AccountInfo { address account; uint256 withdrawableDividends; uint256 totalDividends; uint256 lastClaimTime; } constructor(address _tokenAddress, address _uniswapRouter) { minTokenBalanceForDividends = 1 * (10**18); tokenAddress = _tokenAddress; UNISWAPROUTER = _uniswapRouter; } receive() external payable { distributeDividends(); } function distributeDividends() public payable { require(_totalSupply > 0); if (msg.value > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare + ((msg.value * magnitude) / _totalSupply); emit DividendsDistributed(msg.sender, msg.value); totalDividendsDistributed += msg.value; } } function setBalance(address payable account, uint256 newBalance) external onlyOwner { if (excludedFromDividends[account]) { return; } if (newBalance >= minTokenBalanceForDividends) { _setBalance(account, newBalance); } else { _setBalance(account, 0); } } function excludeFromDividends(address account, bool excluded) external onlyOwner { require( excludedFromDividends[account] != excluded, "DividendTracker: account already set to requested state" ); excludedFromDividends[account] = excluded; if (excluded) { _setBalance(account, 0); } else { uint256 newBalance = IERC20(tokenAddress).balanceOf(account); if (newBalance >= minTokenBalanceForDividends) { _setBalance(account, newBalance); } else { _setBalance(account, 0); } } emit ExcludeFromDividends(account, excluded); } function isExcludedFromDividends(address account) public view returns (bool) { return excludedFromDividends[account]; } function manualSendDividend(uint256 amount, address holder) external onlyOwner { uint256 contractETHBalance = address(this).balance; payable(holder).transfer(amount > 0 ? amount : contractETHBalance); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = _balances[account]; if (newBalance > currentBalance) { uint256 addAmount = newBalance - currentBalance; _mint(account, addAmount); } else if (newBalance < currentBalance) { uint256 subAmount = currentBalance - newBalance; _burn(account, subAmount); } } function _mint(address account, uint256 amount) private { require( account != address(0), "DividendTracker: mint to the zero address" ); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] - int256(magnifiedDividendPerShare * amount); } function _burn(address account, uint256 amount) private { require( account != address(0), "DividendTracker: burn from the zero address" ); uint256 accountBalance = _balances[account]; require( accountBalance >= amount, "DividendTracker: burn amount exceeds balance" ); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(account, address(0), amount); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] + int256(magnifiedDividendPerShare * amount); } function processAccount(address payable account) public onlyOwner returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if (amount > 0) { lastClaimTimes[account] = block.timestamp; emit Claim(account, amount); return true; } return false; } function _withdrawDividendOfUser(address payable account) private returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(account); if (_withdrawableDividend > 0) { withdrawnDividends[account] += _withdrawableDividend; totalDividendsWithdrawn += _withdrawableDividend; emit DividendWithdrawn(account, _withdrawableDividend); (bool success, ) = account.call{ value: _withdrawableDividend, gas: 3000 }(""); if (!success) { withdrawnDividends[account] -= _withdrawableDividend; totalDividendsWithdrawn -= _withdrawableDividend; return 0; } return _withdrawableDividend; } return 0; } function compoundAccount(address payable account) public onlyOwner returns (bool) { (uint256 amount, uint256 tokens) = _compoundDividendOfUser(account); if (amount > 0) { lastClaimTimes[account] = block.timestamp; emit Compound(account, amount, tokens); return true; } return false; } function _compoundDividendOfUser(address payable account) private returns (uint256, uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(account); if (_withdrawableDividend > 0) { withdrawnDividends[account] += _withdrawableDividend; totalDividendsWithdrawn += _withdrawableDividend; emit DividendWithdrawn(account, _withdrawableDividend); IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02( UNISWAPROUTER ); address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(tokenAddress); bool success; uint256 tokens; uint256 initTokenBal = IERC20(tokenAddress).balanceOf(account); try uniswapV2Router .swapExactETHForTokensSupportingFeeOnTransferTokens{ value: _withdrawableDividend }(0, path, address(account), block.timestamp) { success = true; tokens = IERC20(tokenAddress).balanceOf(account) - initTokenBal; } catch Error( string memory /*err*/ ) { success = false; } if (!success) { withdrawnDividends[account] -= _withdrawableDividend; totalDividendsWithdrawn -= _withdrawableDividend; return (0, 0); } return (_withdrawableDividend, tokens); } return (0, 0); } function withdrawableDividendOf(address account) public view returns (uint256) { return accumulativeDividendOf(account) - withdrawnDividends[account]; } function withdrawnDividendOf(address account) public view returns (uint256) { return withdrawnDividends[account]; } function currentDividendsBalance(address account) public view returns (uint256) { return _balances[account]; } function accumulativeDividendOf(address account) public view returns (uint256) { int256 a = int256(magnifiedDividendPerShare * balanceOf(account)); int256 b = magnifiedDividendCorrections[account]; // this is an explicit int256 (signed) return uint256(a + b) / magnitude; } function getAccountInfo(address account) public view returns ( address, uint256, uint256, uint256, uint256 ) { AccountInfo memory info; info.account = account; info.withdrawableDividends = withdrawableDividendOf(account); info.totalDividends = accumulativeDividendOf(account); info.lastClaimTime = lastClaimTimes[account]; return ( info.account, info.withdrawableDividends, info.totalDividends, info.lastClaimTime, totalDividendsWithdrawn ); } function getLastClaimTime(address account) public view returns (uint256) { return lastClaimTimes[account]; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return 18; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer(address, uint256) public pure override returns (bool) { revert("DividendTracker: method not implemented"); } function allowance(address, address) public pure override returns (uint256) { revert("DividendTracker: method not implemented"); } function approve(address, uint256) public pure override returns (bool) { revert("DividendTracker: method not implemented"); } function transferFrom( address, address, uint256 ) public pure override returns (bool) { revert("DividendTracker: method not implemented"); } }
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":"bool","name":"enabled","type":"bool"}],"name":"CompoundingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"accumulativeDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"compoundingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"currentDividendsBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract DividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLastClaimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"holder","type":"address"}],"name":"manualSendDividend","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_amount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setCompoundingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860146101000a81548160ff0219169083151502179055503480156200008157600080fd5b50620000a262000096620004ae60201b60201c565b620004b660201b60201c565b6040518060400160405280600881526020017f4d4556536861726500000000000000000000000000000000000000000000000081525060059080519060200190620000ef929190620005a3565b506040518060400160405280600881526020017f4d45565348415245000000000000000000000000000000000000000000000000815250600690805190602001906200013d929190620005a3565b506012600760006101000a81548160ff021916908360ff1602179055506c7e37be2022c0914b2680000000600481905550600454600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555030600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620001e69062000634565b620001f3929190620006a6565b604051809103906000f08015801562000210573d6000803e3d6000fd5b50600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a0600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016040518363ffffffff1660e01b8152600401620002d3929190620006f0565b600060405180830381600087803b158015620002ee57600080fd5b505af115801562000303573d6000803e3d6000fd5b50505050600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a03060016040518363ffffffff1660e01b815260040162000367929190620006f0565b600060405180830381600087803b1580156200038257600080fd5b505af115801562000397573d6000803e3d6000fd5b50505050600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a0620003e96200057a60201b60201c565b60016040518363ffffffff1660e01b81526004016200040a929190620006f0565b600060405180830381600087803b1580156200042557600080fd5b505af11580156200043a573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600454604051620004a0919062000738565b60405180910390a3620007b9565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620005b19062000784565b90600052602060002090601f016020900481019282620005d5576000855562000621565b82601f10620005f057805160ff191683800117855562000621565b8280016001018555821562000621579182015b828111156200062057825182559160200191906001019062000603565b5b50905062000630919062000642565b5090565b613871806200339683390190565b5b808211156200065d57600081600090555060010162000643565b5090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200068e8262000661565b9050919050565b620006a08162000681565b82525050565b6000604082019050620006bd600083018562000695565b620006cc602083018462000695565b9392505050565b60008115159050919050565b620006ea81620006d3565b82525050565b600060408201905062000707600083018562000695565b620007166020830184620006df565b9392505050565b6000819050919050565b62000732816200071d565b82525050565b60006020820190506200074f600083018462000727565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200079d57607f821691505b602082108103620007b357620007b262000755565b5b50919050565b612bcd80620007c96000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80637b510fe81161010f578063a8b9d240116100a2578063dd62ed3e11610071578063dd62ed3e146105fb578063e4956ce21461062b578063f2fde38b14610647578063f69e204614610663576101f0565b8063a8b9d2401461053b578063a9059cbb1461056b578063aafd847a1461059b578063c705c569146105cb576101f0565b806395d89b41116100de57806395d89b41146104a15780639e252f00146104bf578063a457c2d7146104db578063a680e0bc1461050b576101f0565b80637b510fe8146104035780638884ebc3146104375780638da5cb5b146104675780638e12694414610485576101f0565b80632f4504ae1161018757806349bd5a5e1161015657806349bd5a5e146103a15780634e71d92d146103bf57806370a08231146103c9578063715018a6146103f9576101f0565b80632f4504ae14610319578063313ce5671461033757806333f3d628146103555780633950935114610371576101f0565b806318160ddd116101c357806318160ddd1461027d57806323b872dd1461029b57806327ce0147146102cb5780632c1f5216146102fb576101f0565b80630483f7a0146101f557806306fdde0314610211578063095ea7b31461022f5780631694505e1461025f575b600080fd5b61020f600480360381019061020a9190611ffe565b61066d565b005b61021961077c565b60405161022691906120d7565b60405180910390f35b6102496004803603810190610244919061212f565b61080e565b604051610256919061217e565b60405180910390f35b61026761082c565b60405161027491906121f8565b60405180910390f35b610285610852565b6040516102929190612222565b60405180910390f35b6102b560048036038101906102b0919061223d565b61085c565b6040516102c2919061217e565b60405180910390f35b6102e560048036038101906102e09190612290565b610935565b6040516102f29190612222565b60405180910390f35b6103036109da565b60405161031091906122f0565b60405180910390f35b610321610a00565b60405161032e919061217e565b60405180910390f35b61033f610a13565b60405161034c9190612327565b60405180910390f35b61036f600480360381019061036a919061212f565b610a2a565b005b61038b6004803603810190610386919061212f565b610b29565b604051610398919061217e565b60405180910390f35b6103a9610bdc565b6040516103b69190612351565b60405180910390f35b6103c7610c02565b005b6103e360048036038101906103de9190612290565b610caa565b6040516103f09190612222565b60405180910390f35b610401610cf3565b005b61041d60048036038101906104189190612290565b610d7b565b60405161042e95949392919061236c565b60405180910390f35b610451600480360381019061044c9190612290565b610e32565b60405161045e9190612222565b60405180910390f35b61046f610ed7565b60405161047c9190612351565b60405180910390f35b61049f600480360381019061049a91906123bf565b610f00565b005b6104a961100f565b6040516104b691906120d7565b60405180910390f35b6104d960048036038101906104d491906123ff565b6110a1565b005b6104f560048036038101906104f0919061212f565b611167565b604051610502919061217e565b60405180910390f35b61052560048036038101906105209190612290565b611234565b6040516105329190612222565b60405180910390f35b61055560048036038101906105509190612290565b6112d9565b6040516105629190612222565b60405180910390f35b6105856004803603810190610580919061212f565b61137e565b604051610592919061217e565b60405180910390f35b6105b560048036038101906105b09190612290565b61139c565b6040516105c29190612222565b60405180910390f35b6105e560048036038101906105e09190612290565b611441565b6040516105f2919061217e565b60405180910390f35b6106156004803603810190610610919061242c565b6114e6565b6040516106229190612222565b60405180910390f35b6106456004803603810190610640919061246c565b61156d565b005b610661600480360381019061065c9190612290565b61163d565b005b61066b611734565b005b61067561182b565b73ffffffffffffffffffffffffffffffffffffffff16610693610ed7565b73ffffffffffffffffffffffffffffffffffffffff16146106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e0906124e5565b60405180910390fd5b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a083836040518363ffffffff1660e01b8152600401610746929190612505565b600060405180830381600087803b15801561076057600080fd5b505af1158015610774573d6000803e3d6000fd5b505050505050565b60606005805461078b9061255d565b80601f01602080910402602001604051908101604052809291908181526020018280546107b79061255d565b80156108045780601f106107d957610100808354040283529160200191610804565b820191906000526020600020905b8154815290600101906020018083116107e757829003601f168201915b5050505050905090565b600061082261081b61182b565b8484611833565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b60006108698484846119fc565b61092a8461087561182b565b61092585604051806060016040528060288152602001612b4b60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108db61182b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2f9092919063ffffffff16565b611833565b600190509392505050565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327ce0147836040518263ffffffff1660e01b81526004016109929190612351565b602060405180830381865afa1580156109af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d391906125a3565b9050919050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860149054906101000a900460ff1681565b6000600760009054906101000a900460ff16905090565b610a3261182b565b73ffffffffffffffffffffffffffffffffffffffff16610a50610ed7565b73ffffffffffffffffffffffffffffffffffffffff1614610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d906124e5565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610ae19291906125d0565b6020604051808303816000875af1158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b24919061260e565b505050565b6000610bd2610b3661182b565b84610bcd8560036000610b4761182b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e8490919063ffffffff16565b611833565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663807ab4f7610c4861182b565b6040518263ffffffff1660e01b8152600401610c64919061265c565b6020604051808303816000875af1158015610c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca7919061260e565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cfb61182b565b73ffffffffffffffffffffffffffffffffffffffff16610d19610ed7565b73ffffffffffffffffffffffffffffffffffffffff1614610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d66906124e5565b60405180910390fd5b610d796000611e9a565b565b6000806000806000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637b510fe8876040518263ffffffff1660e01b8152600401610dde9190612351565b60a060405180830381865afa158015610dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1f919061268c565b9450945094509450945091939590929450565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638884ebc3836040518263ffffffff1660e01b8152600401610e8f9190612351565b602060405180830381865afa158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed091906125a3565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f0861182b565b73ffffffffffffffffffffffffffffffffffffffff16610f26610ed7565b73ffffffffffffffffffffffffffffffffffffffff1614610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f73906124e5565b60405180910390fd5b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e12694483836040518363ffffffff1660e01b8152600401610fd9929190612707565b600060405180830381600087803b158015610ff357600080fd5b505af1158015611007573d6000803e3d6000fd5b505050505050565b60606006805461101e9061255d565b80601f016020809104026020016040519081016040528092919081815260200182805461104a9061255d565b80156110975780601f1061106c57610100808354040283529160200191611097565b820191906000526020600020905b81548152906001019060200180831161107a57829003601f168201915b5050505050905090565b6110a961182b565b73ffffffffffffffffffffffffffffffffffffffff166110c7610ed7565b73ffffffffffffffffffffffffffffffffffffffff161461111d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611114906124e5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611163573d6000803e3d6000fd5b5050565b600061122a61117461182b565b8461122585604051806060016040528060258152602001612b73602591396003600061119e61182b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2f9092919063ffffffff16565b611833565b6001905092915050565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a680e0bc836040518263ffffffff1660e01b81526004016112919190612351565b602060405180830381865afa1580156112ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d291906125a3565b9050919050565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8b9d240836040518263ffffffff1660e01b81526004016113369190612351565b602060405180830381865afa158015611353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137791906125a3565b9050919050565b600061139261138b61182b565b84846119fc565b6001905092915050565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aafd847a836040518263ffffffff1660e01b81526004016113f99190612351565b602060405180830381865afa158015611416573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143a91906125a3565b9050919050565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c705c569836040518263ffffffff1660e01b815260040161149e9190612351565b602060405180830381865afa1580156114bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114df919061260e565b9050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61157561182b565b73ffffffffffffffffffffffffffffffffffffffff16611593610ed7565b73ffffffffffffffffffffffffffffffffffffffff16146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e0906124e5565b60405180910390fd5b80600860146101000a81548160ff0219169083151502179055507f341322866a3a2c26c27efa4c270c5ba86f6963257118897dd8196f224c002d4381604051611632919061217e565b60405180910390a150565b61164561182b565b73ffffffffffffffffffffffffffffffffffffffff16611663610ed7565b73ffffffffffffffffffffffffffffffffffffffff16146116b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b0906124e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171f906127a2565b60405180910390fd5b61173181611e9a565b50565b600860149054906101000a900460ff16611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a9061280e565b60405180910390fd5b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636de1a5a96117c961182b565b6040518263ffffffff1660e01b81526004016117e5919061265c565b6020604051808303816000875af1158015611804573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611828919061260e565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611899906128a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190890612932565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119ef9190612222565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a62906129c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190612a56565b60405180910390fd5b611ae5838383611f5e565b611b5181604051806060016040528060268152602001612b2560269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2f9092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611be681600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e8490919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc84600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611cc5929190612a76565b600060405180830381600087803b158015611cdf57600080fd5b505af1158015611cf3573d6000803e3d6000fd5b50505050600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc83600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611d93929190612a76565b600060405180830381600087803b158015611dad57600080fd5b505af1158015611dc1573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e229190612222565b60405180910390a3505050565b6000838311158290611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e91906120d7565b60405180910390fd5b5082840390509392505050565b60008183611e929190612ace565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f9382611f68565b9050919050565b611fa381611f88565b8114611fae57600080fd5b50565b600081359050611fc081611f9a565b92915050565b60008115159050919050565b611fdb81611fc6565b8114611fe657600080fd5b50565b600081359050611ff881611fd2565b92915050565b6000806040838503121561201557612014611f63565b5b600061202385828601611fb1565b925050602061203485828601611fe9565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561207857808201518184015260208101905061205d565b83811115612087576000848401525b50505050565b6000601f19601f8301169050919050565b60006120a98261203e565b6120b38185612049565b93506120c381856020860161205a565b6120cc8161208d565b840191505092915050565b600060208201905081810360008301526120f1818461209e565b905092915050565b6000819050919050565b61210c816120f9565b811461211757600080fd5b50565b60008135905061212981612103565b92915050565b6000806040838503121561214657612145611f63565b5b600061215485828601611fb1565b92505060206121658582860161211a565b9150509250929050565b61217881611fc6565b82525050565b6000602082019050612193600083018461216f565b92915050565b6000819050919050565b60006121be6121b96121b484611f68565b612199565b611f68565b9050919050565b60006121d0826121a3565b9050919050565b60006121e2826121c5565b9050919050565b6121f2816121d7565b82525050565b600060208201905061220d60008301846121e9565b92915050565b61221c816120f9565b82525050565b60006020820190506122376000830184612213565b92915050565b60008060006060848603121561225657612255611f63565b5b600061226486828701611fb1565b935050602061227586828701611fb1565b92505060406122868682870161211a565b9150509250925092565b6000602082840312156122a6576122a5611f63565b5b60006122b484828501611fb1565b91505092915050565b60006122c8826121a3565b9050919050565b60006122da826122bd565b9050919050565b6122ea816122cf565b82525050565b600060208201905061230560008301846122e1565b92915050565b600060ff82169050919050565b6123218161230b565b82525050565b600060208201905061233c6000830184612318565b92915050565b61234b81611f88565b82525050565b60006020820190506123666000830184612342565b92915050565b600060a0820190506123816000830188612342565b61238e6020830187612213565b61239b6040830186612213565b6123a86060830185612213565b6123b56080830184612213565b9695505050505050565b600080604083850312156123d6576123d5611f63565b5b60006123e48582860161211a565b92505060206123f585828601611fb1565b9150509250929050565b60006020828403121561241557612414611f63565b5b60006124238482850161211a565b91505092915050565b6000806040838503121561244357612442611f63565b5b600061245185828601611fb1565b925050602061246285828601611fb1565b9150509250929050565b60006020828403121561248257612481611f63565b5b600061249084828501611fe9565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006124cf602083612049565b91506124da82612499565b602082019050919050565b600060208201905081810360008301526124fe816124c2565b9050919050565b600060408201905061251a6000830185612342565b612527602083018461216f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061257557607f821691505b6020821081036125885761258761252e565b5b50919050565b60008151905061259d81612103565b92915050565b6000602082840312156125b9576125b8611f63565b5b60006125c78482850161258e565b91505092915050565b60006040820190506125e56000830185612342565b6125f26020830184612213565b9392505050565b60008151905061260881611fd2565b92915050565b60006020828403121561262457612623611f63565b5b6000612632848285016125f9565b91505092915050565b600061264682611f68565b9050919050565b6126568161263b565b82525050565b6000602082019050612671600083018461264d565b92915050565b60008151905061268681611f9a565b92915050565b600080600080600060a086880312156126a8576126a7611f63565b5b60006126b688828901612677565b95505060206126c78882890161258e565b94505060406126d88882890161258e565b93505060606126e98882890161258e565b92505060806126fa8882890161258e565b9150509295509295909350565b600060408201905061271c6000830185612213565b6127296020830184612342565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061278c602683612049565b915061279782612730565b604082019050919050565b600060208201905081810360008301526127bb8161277f565b9050919050565b7f436f6d706f756e64696e67206973206e6f7420656e61626c6564000000000000600082015250565b60006127f8601a83612049565b9150612803826127c2565b602082019050919050565b60006020820190508181036000830152612827816127eb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061288a602483612049565b91506128958261282e565b604082019050919050565b600060208201905081810360008301526128b98161287d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061291c602283612049565b9150612927826128c0565b604082019050919050565b6000602082019050818103600083015261294b8161290f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006129ae602583612049565b91506129b982612952565b604082019050919050565b600060208201905081810360008301526129dd816129a1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612a40602383612049565b9150612a4b826129e4565b604082019050919050565b60006020820190508181036000830152612a6f81612a33565b9050919050565b6000604082019050612a8b600083018561264d565b612a986020830184612213565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ad9826120f9565b9150612ae4836120f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b1957612b18612a9f565b5b82820190509291505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205752dc3e92e7884b4e3d7221ea2cbad7397378e7b381e57239147ec805bea1fa64736f6c634300080d003360a06040526040518060400160405280601281526020017f4d4556524550454c5f4469766964656e64730000000000000000000000000000815250600290805190602001906200005192919062000259565b506040518060400160405280601281526020017f4d4556524550454c5f4469766964656e64730000000000000000000000000000815250600390805190602001906200009f92919062000259565b50348015620000ad57600080fd5b5060405162003871380380620038718339818101604052810190620000d3919062000373565b620000f3620000e76200018d60201b60201c565b6200019560201b60201c565b670de0b6b3a76400006080818152505081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200041e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200026790620003e9565b90600052602060002090601f0160209004810192826200028b5760008555620002d7565b82601f10620002a657805160ff1916838001178555620002d7565b82800160010185558215620002d7579182015b82811115620002d6578251825591602001919060010190620002b9565b5b509050620002e69190620002ea565b5090565b5b8082111562000305576000816000905550600101620002eb565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200033b826200030e565b9050919050565b6200034d816200032e565b81146200035957600080fd5b50565b6000815190506200036d8162000342565b92915050565b600080604083850312156200038d576200038c62000309565b5b60006200039d858286016200035c565b9250506020620003b0858286016200035c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200040257607f821691505b602082108103620004185762000417620003ba565b5b50919050565b6080516134296200044860003960008181610ad6015281816114ac015261163001526134296000f3fe6080604052600436106101dc5760003560e01c806385a6b3ae11610102578063a8b9d24011610095578063c705c56911610064578063c705c5691461072e578063dd62ed3e1461076b578063e30443bc146107a8578063f2fde38b146107d1576101eb565b8063a8b9d2401461064c578063a9059cbb14610689578063aafd847a146106c6578063c49af5f014610703576101eb565b806395d89b41116100d157806395d89b411461058e5780639d76ea58146105b95780639e1e0661146105e4578063a680e0bc1461060f576101eb565b806385a6b3ae146104d25780638884ebc3146104fd5780638da5cb5b1461053a5780638e12694414610565576101eb565b80633009a6091161017a57806370a082311161014957806370a0823114610400578063715018a61461043d5780637b510fe814610454578063807ab4f714610495576101eb565b80633009a60914610330578063313ce5671461035b5780634e7b827f146103865780636de1a5a9146103c3576101eb565b8063095ea7b3116101b6578063095ea7b31461024e57806318160ddd1461028b57806323b872dd146102b657806327ce0147146102f3576101eb565b806303c83302146101f05780630483f7a0146101fa57806306fdde0314610223576101eb565b366101eb576101e96107fa565b005b600080fd5b6101f86107fa565b005b34801561020657600080fd5b50610221600480360381019061021c91906124f2565b6108b9565b005b34801561022f57600080fd5b50610238610b6a565b60405161024591906125cb565b60405180910390f35b34801561025a57600080fd5b5061027560048036038101906102709190612623565b610bfc565b6040516102829190612672565b60405180910390f35b34801561029757600080fd5b506102a0610c39565b6040516102ad919061269c565b60405180910390f35b3480156102c257600080fd5b506102dd60048036038101906102d891906126b7565b610c43565b6040516102ea9190612672565b60405180910390f35b3480156102ff57600080fd5b5061031a6004803603810190610315919061270a565b610c80565b604051610327919061269c565b60405180910390f35b34801561033c57600080fd5b50610345610d10565b604051610352919061269c565b60405180910390f35b34801561036757600080fd5b50610370610d16565b60405161037d9190612753565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a8919061270a565b610d1f565b6040516103ba9190612672565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e591906127ac565b610d3f565b6040516103f79190612672565b60405180910390f35b34801561040c57600080fd5b506104276004803603810190610422919061270a565b610e81565b604051610434919061269c565b60405180910390f35b34801561044957600080fd5b50610452610eca565b005b34801561046057600080fd5b5061047b6004803603810190610476919061270a565b610f52565b60405161048c9594939291906127e8565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b791906127ac565b611032565b6040516104c99190612672565b60405180910390f35b3480156104de57600080fd5b506104e761116d565b6040516104f4919061269c565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f919061270a565b611173565b604051610531919061269c565b60405180910390f35b34801561054657600080fd5b5061054f6111bc565b60405161055c919061283b565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190612856565b6111e5565b005b34801561059a57600080fd5b506105a36112c1565b6040516105b091906125cb565b60405180910390f35b3480156105c557600080fd5b506105ce611353565b6040516105db919061283b565b60405180910390f35b3480156105f057600080fd5b506105f9611379565b604051610606919061269c565b60405180910390f35b34801561061b57600080fd5b506106366004803603810190610631919061270a565b61137f565b604051610643919061269c565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e919061270a565b6113c8565b604051610680919061269c565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190612623565b611424565b6040516106bd9190612672565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e8919061270a565b611461565b6040516106fa919061269c565b60405180910390f35b34801561070f57600080fd5b506107186114aa565b604051610725919061269c565b60405180910390f35b34801561073a57600080fd5b506107556004803603810190610750919061270a565b6114ce565b6040516107629190612672565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190612896565b611524565b60405161079f919061269c565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca91906128d6565b611561565b005b3480156107dd57600080fd5b506107f860048036038101906107f3919061270a565b611675565b005b60006005541161080957600080fd5b60003411156108b757600554700100000000000000000000000000000000346108329190612945565b61083c91906129ce565b60075461084991906129ff565b6007819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651134604051610895919061269c565b60405180910390a234600860008282546108af91906129ff565b925050819055505b565b6108c161176c565b73ffffffffffffffffffffffffffffffffffffffff166108df6111bc565b73ffffffffffffffffffffffffffffffffffffffff1614610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092c90612aa1565b60405180910390fd5b801515600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036109c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109be90612b33565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015610a3457610a2f826000611774565b610b18565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610a91919061283b565b602060405180830381865afa158015610aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad29190612b68565b90507f00000000000000000000000000000000000000000000000000000000000000008110610b0a57610b058382611774565b610b16565b610b15836000611774565b5b505b8173ffffffffffffffffffffffffffffffffffffffff167fa3c7c11b2e12c4144b09a7813f3393ba646392788638998c97be8da908cf04be82604051610b5e9190612672565b60405180910390a25050565b606060028054610b7990612bc4565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba590612bc4565b8015610bf25780601f10610bc757610100808354040283529160200191610bf2565b820191906000526020600020905b815481529060010190602001808311610bd557829003601f168201915b5050505050905090565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090612c67565b60405180910390fd5b6000600554905090565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7790612c67565b60405180910390fd5b600080610c8c83610e81565b600754610c999190612945565b90506000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507001000000000000000000000000000000008183610cfd9190612c91565b610d0791906129ce565b92505050919050565b60045481565b60006012905090565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000610d4961176c565b73ffffffffffffffffffffffffffffffffffffffff16610d676111bc565b73ffffffffffffffffffffffffffffffffffffffff1614610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490612aa1565b60405180910390fd5b600080610dc98461180a565b915091506000821115610e755742600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff167f0e311a2c6dbfb0153ec3a8a5bdca09070b3e5f60768fdc10a20453f38d1868738383604051610e62929190612d25565b60405180910390a2600192505050610e7c565b6000925050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ed261176c565b73ffffffffffffffffffffffffffffffffffffffff16610ef06111bc565b73ffffffffffffffffffffffffffffffffffffffff1614610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3d90612aa1565b60405180910390fd5b610f506000611d2b565b565b6000806000806000610f6261240f565b86816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610fa3876113c8565b816020018181525050610fb587610c80565b816040018181525050600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548160600181815250508060000151816020015182604001518360600151600954955095509550955095505091939590929450565b600061103c61176c565b73ffffffffffffffffffffffffffffffffffffffff1661105a6111bc565b73ffffffffffffffffffffffffffffffffffffffff16146110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a790612aa1565b60405180910390fd5b60006110bb83611def565b905060008111156111625742600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d482604051611150919061269c565b60405180910390a26001915050611168565b60009150505b919050565b60085481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111ed61176c565b73ffffffffffffffffffffffffffffffffffffffff1661120b6111bc565b73ffffffffffffffffffffffffffffffffffffffff1614611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125890612aa1565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc6000851161128e5782611290565b845b9081150290604051600060405180830381858888f193505050501580156112bb573d6000803e3d6000fd5b50505050565b6060600380546112d090612bc4565b80601f01602080910402602001604051908101604052809291908181526020018280546112fc90612bc4565b80156113495780601f1061131e57610100808354040283529160200191611349565b820191906000526020600020905b81548152906001019060200180831161132c57829003601f168201915b5050505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461141383610c80565b61141d9190612d4e565b9050919050565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145890612c67565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890612c67565b60405180910390fd5b61156961176c565b73ffffffffffffffffffffffffffffffffffffffff166115876111bc565b73ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490612aa1565b60405180910390fd5b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611671577f000000000000000000000000000000000000000000000000000000000000000081106116645761165f8282611774565b611670565b61166f826000611774565b5b5b5050565b61167d61176c565b73ffffffffffffffffffffffffffffffffffffffff1661169b6111bc565b73ffffffffffffffffffffffffffffffffffffffff16146116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890612aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790612df4565b60405180910390fd5b61176981611d2b565b50565b600033905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808211156117e057600081836117ce9190612d4e565b90506117da8482611fc8565b50611805565b8082101561180457600082826117f69190612d4e565b905061180284826121ab565b505b5b505050565b6000806000611818846113c8565b90506000811115611d1d5780600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461187291906129ff565b92505081905550806009600082825461188b91906129ff565b925050819055508373ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d826040516118d8919061269c565b60405180910390a26000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600267ffffffffffffffff81111561192457611923612e14565b5b6040519080825280602002602001820160405280156119525781602001602082028036833780820191505090505b5090508173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c49190612e58565b816000815181106119d8576119d7612e85565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611a4957611a48612e85565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000806000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401611ae39190612f13565b602060405180830381865afa158015611b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b249190612b68565b90508473ffffffffffffffffffffffffffffffffffffffff1663b6f9de95876000878d426040518663ffffffff1660e01b8152600401611b679493929190613027565b6000604051808303818588803b158015611b8057600080fd5b505af193505050508015611b92575060015b611bd857611b9e613080565b806308c379a003611bc75750611bb26130d3565b80611bbd5750611bc9565b6000935050611bd3565b505b3d6000803e3d6000fd5b611c86565b6001925080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff1660e01b8152600401611c389190612f13565b602060405180830381865afa158015611c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c799190612b68565b611c839190612d4e565b91505b82611d0c5785600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cda9190612d4e565b925050819055508560096000828254611cf39190612d4e565b9250508190555060008097509750505050505050611d26565b858297509750505050505050611d26565b60008092509250505b915091565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080611dfb836113c8565b90506000811115611fbd5780600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e5591906129ff565b925050819055508060096000828254611e6e91906129ff565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d82604051611ebb919061269c565b60405180910390a260008373ffffffffffffffffffffffffffffffffffffffff1682610bb890604051611eed90613194565b600060405180830381858888f193505050503d8060008114611f2b576040519150601f19603f3d011682016040523d82523d6000602084013e611f30565b606091505b5050905080611fb35781600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f889190612d4e565b925050819055508160096000828254611fa19190612d4e565b92505081905550600092505050611fc3565b8192505050611fc3565b60009150505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e9061321b565b60405180910390fd5b806005600082825461204991906129ff565b9250508190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461209f91906129ff565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612104919061269c565b60405180910390a38060075461211a9190612945565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612164919061323b565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361221a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221190613341565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612298906133d3565b60405180910390fd5b81816122ad9190612d4e565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600560008282546123029190612d4e565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612367919061269c565b60405180910390a38160075461237d9190612945565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123c79190612c91565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124878261245c565b9050919050565b6124978161247c565b81146124a257600080fd5b50565b6000813590506124b48161248e565b92915050565b60008115159050919050565b6124cf816124ba565b81146124da57600080fd5b50565b6000813590506124ec816124c6565b92915050565b6000806040838503121561250957612508612457565b5b6000612517858286016124a5565b9250506020612528858286016124dd565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561256c578082015181840152602081019050612551565b8381111561257b576000848401525b50505050565b6000601f19601f8301169050919050565b600061259d82612532565b6125a7818561253d565b93506125b781856020860161254e565b6125c081612581565b840191505092915050565b600060208201905081810360008301526125e58184612592565b905092915050565b6000819050919050565b612600816125ed565b811461260b57600080fd5b50565b60008135905061261d816125f7565b92915050565b6000806040838503121561263a57612639612457565b5b6000612648858286016124a5565b92505060206126598582860161260e565b9150509250929050565b61266c816124ba565b82525050565b60006020820190506126876000830184612663565b92915050565b612696816125ed565b82525050565b60006020820190506126b1600083018461268d565b92915050565b6000806000606084860312156126d0576126cf612457565b5b60006126de868287016124a5565b93505060206126ef868287016124a5565b92505060406127008682870161260e565b9150509250925092565b6000602082840312156127205761271f612457565b5b600061272e848285016124a5565b91505092915050565b600060ff82169050919050565b61274d81612737565b82525050565b60006020820190506127686000830184612744565b92915050565b60006127798261245c565b9050919050565b6127898161276e565b811461279457600080fd5b50565b6000813590506127a681612780565b92915050565b6000602082840312156127c2576127c1612457565b5b60006127d084828501612797565b91505092915050565b6127e28161247c565b82525050565b600060a0820190506127fd60008301886127d9565b61280a602083018761268d565b612817604083018661268d565b612824606083018561268d565b612831608083018461268d565b9695505050505050565b600060208201905061285060008301846127d9565b92915050565b6000806040838503121561286d5761286c612457565b5b600061287b8582860161260e565b925050602061288c858286016124a5565b9150509250929050565b600080604083850312156128ad576128ac612457565b5b60006128bb858286016124a5565b92505060206128cc858286016124a5565b9150509250929050565b600080604083850312156128ed576128ec612457565b5b60006128fb85828601612797565b925050602061290c8582860161260e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612950826125ed565b915061295b836125ed565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561299457612993612916565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006129d9826125ed565b91506129e4836125ed565b9250826129f4576129f361299f565b5b828204905092915050565b6000612a0a826125ed565b9150612a15836125ed565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612a4a57612a49612916565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612a8b60208361253d565b9150612a9682612a55565b602082019050919050565b60006020820190508181036000830152612aba81612a7e565b9050919050565b7f4469766964656e64547261636b65723a206163636f756e7420616c726561647960008201527f2073657420746f20726571756573746564207374617465000000000000000000602082015250565b6000612b1d60378361253d565b9150612b2882612ac1565b604082019050919050565b60006020820190508181036000830152612b4c81612b10565b9050919050565b600081519050612b62816125f7565b92915050565b600060208284031215612b7e57612b7d612457565b5b6000612b8c84828501612b53565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612bdc57607f821691505b602082108103612bef57612bee612b95565b5b50919050565b7f4469766964656e64547261636b65723a206d6574686f64206e6f7420696d706c60008201527f656d656e74656400000000000000000000000000000000000000000000000000602082015250565b6000612c5160278361253d565b9150612c5c82612bf5565b604082019050919050565b60006020820190508181036000830152612c8081612c44565b9050919050565b6000819050919050565b6000612c9c82612c87565b9150612ca783612c87565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03831360008312151615612ce257612ce1612916565b5b817f8000000000000000000000000000000000000000000000000000000000000000038312600083121615612d1a57612d19612916565b5b828201905092915050565b6000604082019050612d3a600083018561268d565b612d47602083018461268d565b9392505050565b6000612d59826125ed565b9150612d64836125ed565b925082821015612d7757612d76612916565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612dde60268361253d565b9150612de982612d82565b604082019050919050565b60006020820190508181036000830152612e0d81612dd1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050612e528161248e565b92915050565b600060208284031215612e6e57612e6d612457565b5b6000612e7c84828501612e43565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000612ed9612ed4612ecf8461245c565b612eb4565b61245c565b9050919050565b6000612eeb82612ebe565b9050919050565b6000612efd82612ee0565b9050919050565b612f0d81612ef2565b82525050565b6000602082019050612f286000830184612f04565b92915050565b6000819050919050565b6000612f53612f4e612f4984612f2e565b612eb4565b6125ed565b9050919050565b612f6381612f38565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f9e8161247c565b82525050565b6000612fb08383612f95565b60208301905092915050565b6000602082019050919050565b6000612fd482612f69565b612fde8185612f74565b9350612fe983612f85565b8060005b8381101561301a5781516130018882612fa4565b975061300c83612fbc565b925050600181019050612fed565b5085935050505092915050565b600060808201905061303c6000830187612f5a565b818103602083015261304e8186612fc9565b905061305d60408301856127d9565b61306a606083018461268d565b95945050505050565b60008160e01c9050919050565b600060033d111561309f5760046000803e61309c600051613073565b90505b90565b6130ab82612581565b810181811067ffffffffffffffff821117156130ca576130c9612e14565b5b80604052505050565b600060443d10613160576130e561244d565b60043d036004823e80513d602482011167ffffffffffffffff8211171561310d575050613160565b808201805167ffffffffffffffff81111561312b5750505050613160565b80602083010160043d038501811115613148575050505050613160565b613157826020018501866130a2565b82955050505050505b90565b600081905092915050565b50565b600061317e600083613163565b91506131898261316e565b600082019050919050565b600061319f82613171565b9150819050919050565b7f4469766964656e64547261636b65723a206d696e7420746f20746865207a657260008201527f6f20616464726573730000000000000000000000000000000000000000000000602082015250565b600061320560298361253d565b9150613210826131a9565b604082019050919050565b60006020820190508181036000830152613234816131f8565b9050919050565b600061324682612c87565b915061325183612c87565b9250827f80000000000000000000000000000000000000000000000000000000000000000182126000841215161561328c5761328b612916565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0182136000841216156132c4576132c3612916565b5b828203905092915050565b7f4469766964656e64547261636b65723a206275726e2066726f6d20746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061332b602b8361253d565b9150613336826132cf565b604082019050919050565b6000602082019050818103600083015261335a8161331e565b9050919050565b7f4469766964656e64547261636b65723a206275726e20616d6f756e742065786360008201527f656564732062616c616e63650000000000000000000000000000000000000000602082015250565b60006133bd602c8361253d565b91506133c882613361565b604082019050919050565b600060208201905081810360008301526133ec816133b0565b905091905056fea2646970667358221220ce6710d16067b83a1b894ddefa62f82652d828ee3c41b7f7033b6c411c09e00564736f6c634300080d0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637b510fe81161010f578063a8b9d240116100a2578063dd62ed3e11610071578063dd62ed3e146105fb578063e4956ce21461062b578063f2fde38b14610647578063f69e204614610663576101f0565b8063a8b9d2401461053b578063a9059cbb1461056b578063aafd847a1461059b578063c705c569146105cb576101f0565b806395d89b41116100de57806395d89b41146104a15780639e252f00146104bf578063a457c2d7146104db578063a680e0bc1461050b576101f0565b80637b510fe8146104035780638884ebc3146104375780638da5cb5b146104675780638e12694414610485576101f0565b80632f4504ae1161018757806349bd5a5e1161015657806349bd5a5e146103a15780634e71d92d146103bf57806370a08231146103c9578063715018a6146103f9576101f0565b80632f4504ae14610319578063313ce5671461033757806333f3d628146103555780633950935114610371576101f0565b806318160ddd116101c357806318160ddd1461027d57806323b872dd1461029b57806327ce0147146102cb5780632c1f5216146102fb576101f0565b80630483f7a0146101f557806306fdde0314610211578063095ea7b31461022f5780631694505e1461025f575b600080fd5b61020f600480360381019061020a9190611ffe565b61066d565b005b61021961077c565b60405161022691906120d7565b60405180910390f35b6102496004803603810190610244919061212f565b61080e565b604051610256919061217e565b60405180910390f35b61026761082c565b60405161027491906121f8565b60405180910390f35b610285610852565b6040516102929190612222565b60405180910390f35b6102b560048036038101906102b0919061223d565b61085c565b6040516102c2919061217e565b60405180910390f35b6102e560048036038101906102e09190612290565b610935565b6040516102f29190612222565b60405180910390f35b6103036109da565b60405161031091906122f0565b60405180910390f35b610321610a00565b60405161032e919061217e565b60405180910390f35b61033f610a13565b60405161034c9190612327565b60405180910390f35b61036f600480360381019061036a919061212f565b610a2a565b005b61038b6004803603810190610386919061212f565b610b29565b604051610398919061217e565b60405180910390f35b6103a9610bdc565b6040516103b69190612351565b60405180910390f35b6103c7610c02565b005b6103e360048036038101906103de9190612290565b610caa565b6040516103f09190612222565b60405180910390f35b610401610cf3565b005b61041d60048036038101906104189190612290565b610d7b565b60405161042e95949392919061236c565b60405180910390f35b610451600480360381019061044c9190612290565b610e32565b60405161045e9190612222565b60405180910390f35b61046f610ed7565b60405161047c9190612351565b60405180910390f35b61049f600480360381019061049a91906123bf565b610f00565b005b6104a961100f565b6040516104b691906120d7565b60405180910390f35b6104d960048036038101906104d491906123ff565b6110a1565b005b6104f560048036038101906104f0919061212f565b611167565b604051610502919061217e565b60405180910390f35b61052560048036038101906105209190612290565b611234565b6040516105329190612222565b60405180910390f35b61055560048036038101906105509190612290565b6112d9565b6040516105629190612222565b60405180910390f35b6105856004803603810190610580919061212f565b61137e565b604051610592919061217e565b60405180910390f35b6105b560048036038101906105b09190612290565b61139c565b6040516105c29190612222565b60405180910390f35b6105e560048036038101906105e09190612290565b611441565b6040516105f2919061217e565b60405180910390f35b6106156004803603810190610610919061242c565b6114e6565b6040516106229190612222565b60405180910390f35b6106456004803603810190610640919061246c565b61156d565b005b610661600480360381019061065c9190612290565b61163d565b005b61066b611734565b005b61067561182b565b73ffffffffffffffffffffffffffffffffffffffff16610693610ed7565b73ffffffffffffffffffffffffffffffffffffffff16146106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e0906124e5565b60405180910390fd5b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a083836040518363ffffffff1660e01b8152600401610746929190612505565b600060405180830381600087803b15801561076057600080fd5b505af1158015610774573d6000803e3d6000fd5b505050505050565b60606005805461078b9061255d565b80601f01602080910402602001604051908101604052809291908181526020018280546107b79061255d565b80156108045780601f106107d957610100808354040283529160200191610804565b820191906000526020600020905b8154815290600101906020018083116107e757829003601f168201915b5050505050905090565b600061082261081b61182b565b8484611833565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b60006108698484846119fc565b61092a8461087561182b565b61092585604051806060016040528060288152602001612b4b60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108db61182b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2f9092919063ffffffff16565b611833565b600190509392505050565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327ce0147836040518263ffffffff1660e01b81526004016109929190612351565b602060405180830381865afa1580156109af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d391906125a3565b9050919050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860149054906101000a900460ff1681565b6000600760009054906101000a900460ff16905090565b610a3261182b565b73ffffffffffffffffffffffffffffffffffffffff16610a50610ed7565b73ffffffffffffffffffffffffffffffffffffffff1614610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d906124e5565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610ae19291906125d0565b6020604051808303816000875af1158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b24919061260e565b505050565b6000610bd2610b3661182b565b84610bcd8560036000610b4761182b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e8490919063ffffffff16565b611833565b6001905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663807ab4f7610c4861182b565b6040518263ffffffff1660e01b8152600401610c64919061265c565b6020604051808303816000875af1158015610c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca7919061260e565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cfb61182b565b73ffffffffffffffffffffffffffffffffffffffff16610d19610ed7565b73ffffffffffffffffffffffffffffffffffffffff1614610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d66906124e5565b60405180910390fd5b610d796000611e9a565b565b6000806000806000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637b510fe8876040518263ffffffff1660e01b8152600401610dde9190612351565b60a060405180830381865afa158015610dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1f919061268c565b9450945094509450945091939590929450565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638884ebc3836040518263ffffffff1660e01b8152600401610e8f9190612351565b602060405180830381865afa158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed091906125a3565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f0861182b565b73ffffffffffffffffffffffffffffffffffffffff16610f26610ed7565b73ffffffffffffffffffffffffffffffffffffffff1614610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f73906124e5565b60405180910390fd5b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e12694483836040518363ffffffff1660e01b8152600401610fd9929190612707565b600060405180830381600087803b158015610ff357600080fd5b505af1158015611007573d6000803e3d6000fd5b505050505050565b60606006805461101e9061255d565b80601f016020809104026020016040519081016040528092919081815260200182805461104a9061255d565b80156110975780601f1061106c57610100808354040283529160200191611097565b820191906000526020600020905b81548152906001019060200180831161107a57829003601f168201915b5050505050905090565b6110a961182b565b73ffffffffffffffffffffffffffffffffffffffff166110c7610ed7565b73ffffffffffffffffffffffffffffffffffffffff161461111d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611114906124e5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611163573d6000803e3d6000fd5b5050565b600061122a61117461182b565b8461122585604051806060016040528060258152602001612b73602591396003600061119e61182b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2f9092919063ffffffff16565b611833565b6001905092915050565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a680e0bc836040518263ffffffff1660e01b81526004016112919190612351565b602060405180830381865afa1580156112ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d291906125a3565b9050919050565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8b9d240836040518263ffffffff1660e01b81526004016113369190612351565b602060405180830381865afa158015611353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137791906125a3565b9050919050565b600061139261138b61182b565b84846119fc565b6001905092915050565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aafd847a836040518263ffffffff1660e01b81526004016113f99190612351565b602060405180830381865afa158015611416573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143a91906125a3565b9050919050565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c705c569836040518263ffffffff1660e01b815260040161149e9190612351565b602060405180830381865afa1580156114bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114df919061260e565b9050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61157561182b565b73ffffffffffffffffffffffffffffffffffffffff16611593610ed7565b73ffffffffffffffffffffffffffffffffffffffff16146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e0906124e5565b60405180910390fd5b80600860146101000a81548160ff0219169083151502179055507f341322866a3a2c26c27efa4c270c5ba86f6963257118897dd8196f224c002d4381604051611632919061217e565b60405180910390a150565b61164561182b565b73ffffffffffffffffffffffffffffffffffffffff16611663610ed7565b73ffffffffffffffffffffffffffffffffffffffff16146116b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b0906124e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171f906127a2565b60405180910390fd5b61173181611e9a565b50565b600860149054906101000a900460ff16611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a9061280e565b60405180910390fd5b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636de1a5a96117c961182b565b6040518263ffffffff1660e01b81526004016117e5919061265c565b6020604051808303816000875af1158015611804573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611828919061260e565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611899906128a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190890612932565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119ef9190612222565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a62906129c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190612a56565b60405180910390fd5b611ae5838383611f5e565b611b5181604051806060016040528060268152602001612b2560269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e2f9092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611be681600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e8490919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc84600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611cc5929190612a76565b600060405180830381600087803b158015611cdf57600080fd5b505af1158015611cf3573d6000803e3d6000fd5b50505050600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc83600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611d93929190612a76565b600060405180830381600087803b158015611dad57600080fd5b505af1158015611dc1573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e229190612222565b60405180910390a3505050565b6000838311158290611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e91906120d7565b60405180910390fd5b5082840390509392505050565b60008183611e929190612ace565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f9382611f68565b9050919050565b611fa381611f88565b8114611fae57600080fd5b50565b600081359050611fc081611f9a565b92915050565b60008115159050919050565b611fdb81611fc6565b8114611fe657600080fd5b50565b600081359050611ff881611fd2565b92915050565b6000806040838503121561201557612014611f63565b5b600061202385828601611fb1565b925050602061203485828601611fe9565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561207857808201518184015260208101905061205d565b83811115612087576000848401525b50505050565b6000601f19601f8301169050919050565b60006120a98261203e565b6120b38185612049565b93506120c381856020860161205a565b6120cc8161208d565b840191505092915050565b600060208201905081810360008301526120f1818461209e565b905092915050565b6000819050919050565b61210c816120f9565b811461211757600080fd5b50565b60008135905061212981612103565b92915050565b6000806040838503121561214657612145611f63565b5b600061215485828601611fb1565b92505060206121658582860161211a565b9150509250929050565b61217881611fc6565b82525050565b6000602082019050612193600083018461216f565b92915050565b6000819050919050565b60006121be6121b96121b484611f68565b612199565b611f68565b9050919050565b60006121d0826121a3565b9050919050565b60006121e2826121c5565b9050919050565b6121f2816121d7565b82525050565b600060208201905061220d60008301846121e9565b92915050565b61221c816120f9565b82525050565b60006020820190506122376000830184612213565b92915050565b60008060006060848603121561225657612255611f63565b5b600061226486828701611fb1565b935050602061227586828701611fb1565b92505060406122868682870161211a565b9150509250925092565b6000602082840312156122a6576122a5611f63565b5b60006122b484828501611fb1565b91505092915050565b60006122c8826121a3565b9050919050565b60006122da826122bd565b9050919050565b6122ea816122cf565b82525050565b600060208201905061230560008301846122e1565b92915050565b600060ff82169050919050565b6123218161230b565b82525050565b600060208201905061233c6000830184612318565b92915050565b61234b81611f88565b82525050565b60006020820190506123666000830184612342565b92915050565b600060a0820190506123816000830188612342565b61238e6020830187612213565b61239b6040830186612213565b6123a86060830185612213565b6123b56080830184612213565b9695505050505050565b600080604083850312156123d6576123d5611f63565b5b60006123e48582860161211a565b92505060206123f585828601611fb1565b9150509250929050565b60006020828403121561241557612414611f63565b5b60006124238482850161211a565b91505092915050565b6000806040838503121561244357612442611f63565b5b600061245185828601611fb1565b925050602061246285828601611fb1565b9150509250929050565b60006020828403121561248257612481611f63565b5b600061249084828501611fe9565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006124cf602083612049565b91506124da82612499565b602082019050919050565b600060208201905081810360008301526124fe816124c2565b9050919050565b600060408201905061251a6000830185612342565b612527602083018461216f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061257557607f821691505b6020821081036125885761258761252e565b5b50919050565b60008151905061259d81612103565b92915050565b6000602082840312156125b9576125b8611f63565b5b60006125c78482850161258e565b91505092915050565b60006040820190506125e56000830185612342565b6125f26020830184612213565b9392505050565b60008151905061260881611fd2565b92915050565b60006020828403121561262457612623611f63565b5b6000612632848285016125f9565b91505092915050565b600061264682611f68565b9050919050565b6126568161263b565b82525050565b6000602082019050612671600083018461264d565b92915050565b60008151905061268681611f9a565b92915050565b600080600080600060a086880312156126a8576126a7611f63565b5b60006126b688828901612677565b95505060206126c78882890161258e565b94505060406126d88882890161258e565b93505060606126e98882890161258e565b92505060806126fa8882890161258e565b9150509295509295909350565b600060408201905061271c6000830185612213565b6127296020830184612342565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061278c602683612049565b915061279782612730565b604082019050919050565b600060208201905081810360008301526127bb8161277f565b9050919050565b7f436f6d706f756e64696e67206973206e6f7420656e61626c6564000000000000600082015250565b60006127f8601a83612049565b9150612803826127c2565b602082019050919050565b60006020820190508181036000830152612827816127eb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061288a602483612049565b91506128958261282e565b604082019050919050565b600060208201905081810360008301526128b98161287d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061291c602283612049565b9150612927826128c0565b604082019050919050565b6000602082019050818103600083015261294b8161290f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006129ae602583612049565b91506129b982612952565b604082019050919050565b600060208201905081810360008301526129dd816129a1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612a40602383612049565b9150612a4b826129e4565b604082019050919050565b60006020820190508181036000830152612a6f81612a33565b9050919050565b6000604082019050612a8b600083018561264d565b612a986020830184612213565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ad9826120f9565b9150612ae4836120f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b1957612b18612a9f565b5b82820190509291505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205752dc3e92e7884b4e3d7221ea2cbad7397378e7b381e57239147ec805bea1fa64736f6c634300080d0033
Deployed Bytecode Sourcemap
17900:7147:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23021:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19141:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19995:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18375:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19418:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20172:321;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24160:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18330:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18423;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19327:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24788:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20501:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18470:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23502:96;;;:::i;:::-;;19526:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1886:103;;;:::i;:::-;;24352:280;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;23341:154;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1235:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22865:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19232:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24931:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20727:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24640:140;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23782:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19653:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23974:178;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23182:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19836;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22700:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2144:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23606:168;;;:::i;:::-;;23021:153;1466:12;:10;:12::i;:::-;1455:23;;:7;:5;:7::i;:::-;:23;;;1447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23111:15:::1;;;;;;;;;;;:36;;;23148:7;23157:8;23111:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23021:153:::0;;:::o;19141:83::-;19178:13;19211:5;19204:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19141:83;:::o;19995:169::-;20078:4;20095:39;20104:12;:10;:12::i;:::-;20118:7;20127:6;20095:8;:39::i;:::-;20152:4;20145:11;;19995:169;;;;:::o;18375:41::-;;;;;;;;;;;;;:::o;19418:100::-;19471:7;19498:12;;19491:19;;19418:100;:::o;20172:321::-;20278:4;20295:36;20305:6;20313:9;20324:6;20295:9;:36::i;:::-;20342:121;20351:6;20359:12;:10;:12::i;:::-;20373:89;20411:6;20373:89;;;;;;;;;;;;;;;;;:11;:19;20385:6;20373:19;;;;;;;;;;;;;;;:33;20393:12;:10;:12::i;:::-;20373:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;20342:8;:121::i;:::-;20481:4;20474:11;;20172:321;;;;;:::o;24160:184::-;24257:7;24289:15;;;;;;;;;;;:38;;;24328:7;24289:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24282:54;;24160:184;;;:::o;18330:38::-;;;;;;;;;;;;;:::o;18423:::-;;;;;;;;;;;;;:::o;19327:83::-;19368:5;19393:9;;;;;;;;;;;19386:16;;19327:83;:::o;24788:136::-;1466:12;:10;:12::i;:::-;1455:23;;:7;:5;:7::i;:::-;:23;;;1447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24879:6:::1;24872:23;;;24896:10;24908:7;24872:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24788:136:::0;;:::o;20501:218::-;20589:4;20606:83;20615:12;:10;:12::i;:::-;20629:7;20638:50;20677:10;20638:11;:25;20650:12;:10;:12::i;:::-;20638:25;;;;;;;;;;;;;;;:34;20664:7;20638:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20606:8;:83::i;:::-;20707:4;20700:11;;20501:218;;;;:::o;18470:28::-;;;;;;;;;;;;;:::o;23502:96::-;23537:15;;;;;;;;;;;:30;;;23576:12;:10;:12::i;:::-;23537:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23502:96::o;19526:119::-;19592:7;19619:9;:18;19629:7;19619:18;;;;;;;;;;;;;;;;19612:25;;19526:119;;;:::o;1886:103::-;1466:12;:10;:12::i;:::-;1455:23;;:7;:5;:7::i;:::-;:23;;;1447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1951:30:::1;1978:1;1951:18;:30::i;:::-;1886:103::o:0;24352:280::-;24455:7;24477;24499;24521;24543;24585:15;;;;;;;;;;;:30;;;24616:7;24585:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24578:46;;;;;;;;;;24352:280;;;;;;;:::o;23341:154::-;23412:7;23439:15;;;;;;;;;;;:39;;;23479:7;23439:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23432:55;;23341:154;;;:::o;1235:87::-;1281:7;1308:6;;;;;;;;;;;1301:13;;1235:87;:::o;22865:148::-;1466:12;:10;:12::i;:::-;1455:23;;:7;:5;:7::i;:::-;:23;;;1447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22955:15:::1;;;;;;;;;;;:34;;;22990:6;22998;22955:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22865:148:::0;;:::o;19232:87::-;19271:13;19304:7;19297:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19232:87;:::o;24931:111::-;1466:12;:10;:12::i;:::-;1455:23;;:7;:5;:7::i;:::-;:23;;;1447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25005:10:::1;24997:28;;:37;25026:7;24997:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;24931:111:::0;:::o;20727:269::-;20820:4;20837:129;20846:12;:10;:12::i;:::-;20860:7;20869:96;20908:15;20869:96;;;;;;;;;;;;;;;;;:11;:25;20881:12;:10;:12::i;:::-;20869:25;;;;;;;;;;;;;;;:34;20895:7;20869:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;20837:8;:129::i;:::-;20984:4;20977:11;;20727:269;;;;:::o;24640:140::-;24704:7;24731:15;;;;;;;;;;;:32;;;24764:7;24731:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24724:48;;24640:140;;;:::o;23782:184::-;23879:7;23911:15;;;;;;;;;;;:38;;;23950:7;23911:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23904:54;;23782:184;;;:::o;19653:175::-;19739:4;19756:42;19766:12;:10;:12::i;:::-;19780:9;19791:6;19756:9;:42::i;:::-;19816:4;19809:11;;19653:175;;;;:::o;23974:178::-;24068:7;24100:15;;;;;;;;;;;:35;;;24136:7;24100:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24093:51;;23974:178;;;:::o;23182:151::-;23253:4;23277:15;;;;;;;;;;;:39;;;23317:7;23277:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23270:55;;23182:151;;;:::o;19836:::-;19925:7;19952:11;:18;19964:5;19952:18;;;;;;;;;;;;;;;:27;19971:7;19952:27;;;;;;;;;;;;;;;;19945:34;;19836:151;;;;:::o;22700:157::-;1466:12;:10;:12::i;:::-;1455:23;;:7;:5;:7::i;:::-;:23;;;1447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22797:8:::1;22776:18;;:29;;;;;;;;;;;;;;;;;;22821:28;22840:8;22821:28;;;;;;:::i;:::-;;;;;;;;22700:157:::0;:::o;2144:201::-;1466:12;:10;:12::i;:::-;1455:23;;:7;:5;:7::i;:::-;:23;;;1447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2253:1:::1;2233:22;;:8;:22;;::::0;2225:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2309:28;2328:8;2309:18;:28::i;:::-;2144:201:::0;:::o;23606:168::-;23652:18;;;;;;;;;;;23644:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23712:15;;;;;;;;;;;:31;;;23752:12;:10;:12::i;:::-;23712:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23606:168::o;607:98::-;660:7;687:10;680:17;;607:98;:::o;22129:346::-;22248:1;22231:19;;:5;:19;;;22223:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22329:1;22310:21;;:7;:21;;;22302:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22413:6;22383:11;:18;22395:5;22383:18;;;;;;;;;;;;;;;:27;22402:7;22383:27;;;;;;;;;;;;;;;:36;;;;22451:7;22435:32;;22444:5;22435:32;;;22460:6;22435:32;;;;;;:::i;:::-;;;;;;;;22129:346;;;:::o;21004:691::-;21128:1;21110:20;;:6;:20;;;21102:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;21212:1;21191:23;;:9;:23;;;21183:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21267:47;21288:6;21296:9;21307:6;21267:20;:47::i;:::-;21347:71;21369:6;21347:71;;;;;;;;;;;;;;;;;:9;:17;21357:6;21347:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;21327:9;:17;21337:6;21327:17;;;;;;;;;;;;;;;:91;;;;21452:32;21477:6;21452:9;:20;21462:9;21452:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;21429:9;:20;21439:9;21429:20;;;;;;;;;;;;;;;:55;;;;21495:15;;;;;;;;;;;:26;;;21530:6;21539:9;:17;21549:6;21539:17;;;;;;;;;;;;;;;;21495:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21568:15;;;;;;;;;;;:26;;;21603:9;21615;:20;21625:9;21615:20;;;;;;;;;;;;;;;;21568:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21669:9;21652:35;;21661:6;21652:35;;;21680:6;21652:35;;;;;;:::i;:::-;;;;;;;;21004:691;;;:::o;7335:240::-;7455:7;7513:1;7508;:6;;7516:12;7500:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7555:1;7551;:5;7544:12;;7335:240;;;;;:::o;5056:98::-;5114:7;5145:1;5141;:5;;;;:::i;:::-;5134:12;;5056:98;;;;:::o;2505:191::-;2579:16;2598:6;;;;;;;;;;;2579:25;;2624:8;2615:6;;:17;;;;;;;;;;;;;;;;;;2679:8;2648:40;;2669:8;2648:40;;;;;;;;;;;;2568:128;2505:191;:::o;22585:108::-;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:90::-;875:7;918:5;911:13;904:21;893:32;;841:90;;;:::o;937:116::-;1007:21;1022:5;1007:21;:::i;:::-;1000:5;997:32;987:60;;1043:1;1040;1033:12;987:60;937:116;:::o;1059:133::-;1102:5;1140:6;1127:20;1118:29;;1156:30;1180:5;1156:30;:::i;:::-;1059:133;;;;:::o;1198:468::-;1263:6;1271;1320:2;1308:9;1299:7;1295:23;1291:32;1288:119;;;1326:79;;:::i;:::-;1288:119;1446:1;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1417:117;1573:2;1599:50;1641:7;1632:6;1621:9;1617:22;1599:50;:::i;:::-;1589:60;;1544:115;1198:468;;;;;:::o;1672:99::-;1724:6;1758:5;1752:12;1742:22;;1672:99;;;:::o;1777:169::-;1861:11;1895:6;1890:3;1883:19;1935:4;1930:3;1926:14;1911:29;;1777:169;;;;:::o;1952:307::-;2020:1;2030:113;2044:6;2041:1;2038:13;2030:113;;;2129:1;2124:3;2120:11;2114:18;2110:1;2105:3;2101:11;2094:39;2066:2;2063:1;2059:10;2054:15;;2030:113;;;2161:6;2158:1;2155:13;2152:101;;;2241:1;2232:6;2227:3;2223:16;2216:27;2152:101;2001:258;1952:307;;;:::o;2265:102::-;2306:6;2357:2;2353:7;2348:2;2341:5;2337:14;2333:28;2323:38;;2265:102;;;:::o;2373:364::-;2461:3;2489:39;2522:5;2489:39;:::i;:::-;2544:71;2608:6;2603:3;2544:71;:::i;:::-;2537:78;;2624:52;2669:6;2664:3;2657:4;2650:5;2646:16;2624:52;:::i;:::-;2701:29;2723:6;2701:29;:::i;:::-;2696:3;2692:39;2685:46;;2465:272;2373:364;;;;:::o;2743:313::-;2856:4;2894:2;2883:9;2879:18;2871:26;;2943:9;2937:4;2933:20;2929:1;2918:9;2914:17;2907:47;2971:78;3044:4;3035:6;2971:78;:::i;:::-;2963:86;;2743:313;;;;:::o;3062:77::-;3099:7;3128:5;3117:16;;3062:77;;;:::o;3145:122::-;3218:24;3236:5;3218:24;:::i;:::-;3211:5;3208:35;3198:63;;3257:1;3254;3247:12;3198:63;3145:122;:::o;3273:139::-;3319:5;3357:6;3344:20;3335:29;;3373:33;3400:5;3373:33;:::i;:::-;3273:139;;;;:::o;3418:474::-;3486:6;3494;3543:2;3531:9;3522:7;3518:23;3514:32;3511:119;;;3549:79;;:::i;:::-;3511:119;3669:1;3694:53;3739:7;3730:6;3719:9;3715:22;3694:53;:::i;:::-;3684:63;;3640:117;3796:2;3822:53;3867:7;3858:6;3847:9;3843:22;3822:53;:::i;:::-;3812:63;;3767:118;3418:474;;;;;:::o;3898:109::-;3979:21;3994:5;3979:21;:::i;:::-;3974:3;3967:34;3898:109;;:::o;4013:210::-;4100:4;4138:2;4127:9;4123:18;4115:26;;4151:65;4213:1;4202:9;4198:17;4189:6;4151:65;:::i;:::-;4013:210;;;;:::o;4229:60::-;4257:3;4278:5;4271:12;;4229:60;;;:::o;4295:142::-;4345:9;4378:53;4396:34;4405:24;4423:5;4405:24;:::i;:::-;4396:34;:::i;:::-;4378:53;:::i;:::-;4365:66;;4295:142;;;:::o;4443:126::-;4493:9;4526:37;4557:5;4526:37;:::i;:::-;4513:50;;4443:126;;;:::o;4575:152::-;4651:9;4684:37;4715:5;4684:37;:::i;:::-;4671:50;;4575:152;;;:::o;4733:183::-;4846:63;4903:5;4846:63;:::i;:::-;4841:3;4834:76;4733:183;;:::o;4922:274::-;5041:4;5079:2;5068:9;5064:18;5056:26;;5092:97;5186:1;5175:9;5171:17;5162:6;5092:97;:::i;:::-;4922:274;;;;:::o;5202:118::-;5289:24;5307:5;5289:24;:::i;:::-;5284:3;5277:37;5202:118;;:::o;5326:222::-;5419:4;5457:2;5446:9;5442:18;5434:26;;5470:71;5538:1;5527:9;5523:17;5514:6;5470:71;:::i;:::-;5326:222;;;;:::o;5554:619::-;5631:6;5639;5647;5696:2;5684:9;5675:7;5671:23;5667:32;5664:119;;;5702:79;;:::i;:::-;5664:119;5822:1;5847:53;5892:7;5883:6;5872:9;5868:22;5847:53;:::i;:::-;5837:63;;5793:117;5949:2;5975:53;6020:7;6011:6;6000:9;5996:22;5975:53;:::i;:::-;5965:63;;5920:118;6077:2;6103:53;6148:7;6139:6;6128:9;6124:22;6103:53;:::i;:::-;6093:63;;6048:118;5554:619;;;;;:::o;6179:329::-;6238:6;6287:2;6275:9;6266:7;6262:23;6258:32;6255:119;;;6293:79;;:::i;:::-;6255:119;6413:1;6438:53;6483:7;6474:6;6463:9;6459:22;6438:53;:::i;:::-;6428:63;;6384:117;6179:329;;;;:::o;6514:134::-;6572:9;6605:37;6636:5;6605:37;:::i;:::-;6592:50;;6514:134;;;:::o;6654:166::-;6736:9;6769:45;6808:5;6769:45;:::i;:::-;6756:58;;6654:166;;;:::o;6826:195::-;6945:69;7008:5;6945:69;:::i;:::-;6940:3;6933:82;6826:195;;:::o;7027:286::-;7152:4;7190:2;7179:9;7175:18;7167:26;;7203:103;7303:1;7292:9;7288:17;7279:6;7203:103;:::i;:::-;7027:286;;;;:::o;7319:86::-;7354:7;7394:4;7387:5;7383:16;7372:27;;7319:86;;;:::o;7411:112::-;7494:22;7510:5;7494:22;:::i;:::-;7489:3;7482:35;7411:112;;:::o;7529:214::-;7618:4;7656:2;7645:9;7641:18;7633:26;;7669:67;7733:1;7722:9;7718:17;7709:6;7669:67;:::i;:::-;7529:214;;;;:::o;7749:118::-;7836:24;7854:5;7836:24;:::i;:::-;7831:3;7824:37;7749:118;;:::o;7873:222::-;7966:4;8004:2;7993:9;7989:18;7981:26;;8017:71;8085:1;8074:9;8070:17;8061:6;8017:71;:::i;:::-;7873:222;;;;:::o;8101:664::-;8306:4;8344:3;8333:9;8329:19;8321:27;;8358:71;8426:1;8415:9;8411:17;8402:6;8358:71;:::i;:::-;8439:72;8507:2;8496:9;8492:18;8483:6;8439:72;:::i;:::-;8521;8589:2;8578:9;8574:18;8565:6;8521:72;:::i;:::-;8603;8671:2;8660:9;8656:18;8647:6;8603:72;:::i;:::-;8685:73;8753:3;8742:9;8738:19;8729:6;8685:73;:::i;:::-;8101:664;;;;;;;;:::o;8771:474::-;8839:6;8847;8896:2;8884:9;8875:7;8871:23;8867:32;8864:119;;;8902:79;;:::i;:::-;8864:119;9022:1;9047:53;9092:7;9083:6;9072:9;9068:22;9047:53;:::i;:::-;9037:63;;8993:117;9149:2;9175:53;9220:7;9211:6;9200:9;9196:22;9175:53;:::i;:::-;9165:63;;9120:118;8771:474;;;;;:::o;9251:329::-;9310:6;9359:2;9347:9;9338:7;9334:23;9330:32;9327:119;;;9365:79;;:::i;:::-;9327:119;9485:1;9510:53;9555:7;9546:6;9535:9;9531:22;9510:53;:::i;:::-;9500:63;;9456:117;9251:329;;;;:::o;9586:474::-;9654:6;9662;9711:2;9699:9;9690:7;9686:23;9682:32;9679:119;;;9717:79;;:::i;:::-;9679:119;9837:1;9862:53;9907:7;9898:6;9887:9;9883:22;9862:53;:::i;:::-;9852:63;;9808:117;9964:2;9990:53;10035:7;10026:6;10015:9;10011:22;9990:53;:::i;:::-;9980:63;;9935:118;9586:474;;;;;:::o;10066:323::-;10122:6;10171:2;10159:9;10150:7;10146:23;10142:32;10139:119;;;10177:79;;:::i;:::-;10139:119;10297:1;10322:50;10364:7;10355:6;10344:9;10340:22;10322:50;:::i;:::-;10312:60;;10268:114;10066:323;;;;:::o;10395:182::-;10535:34;10531:1;10523:6;10519:14;10512:58;10395:182;:::o;10583:366::-;10725:3;10746:67;10810:2;10805:3;10746:67;:::i;:::-;10739:74;;10822:93;10911:3;10822:93;:::i;:::-;10940:2;10935:3;10931:12;10924:19;;10583:366;;;:::o;10955:419::-;11121:4;11159:2;11148:9;11144:18;11136:26;;11208:9;11202:4;11198:20;11194:1;11183:9;11179:17;11172:47;11236:131;11362:4;11236:131;:::i;:::-;11228:139;;10955:419;;;:::o;11380:320::-;11495:4;11533:2;11522:9;11518:18;11510:26;;11546:71;11614:1;11603:9;11599:17;11590:6;11546:71;:::i;:::-;11627:66;11689:2;11678:9;11674:18;11665:6;11627:66;:::i;:::-;11380:320;;;;;:::o;11706:180::-;11754:77;11751:1;11744:88;11851:4;11848:1;11841:15;11875:4;11872:1;11865:15;11892:320;11936:6;11973:1;11967:4;11963:12;11953:22;;12020:1;12014:4;12010:12;12041:18;12031:81;;12097:4;12089:6;12085:17;12075:27;;12031:81;12159:2;12151:6;12148:14;12128:18;12125:38;12122:84;;12178:18;;:::i;:::-;12122:84;11943:269;11892:320;;;:::o;12218:143::-;12275:5;12306:6;12300:13;12291:22;;12322:33;12349:5;12322:33;:::i;:::-;12218:143;;;;:::o;12367:351::-;12437:6;12486:2;12474:9;12465:7;12461:23;12457:32;12454:119;;;12492:79;;:::i;:::-;12454:119;12612:1;12637:64;12693:7;12684:6;12673:9;12669:22;12637:64;:::i;:::-;12627:74;;12583:128;12367:351;;;;:::o;12724:332::-;12845:4;12883:2;12872:9;12868:18;12860:26;;12896:71;12964:1;12953:9;12949:17;12940:6;12896:71;:::i;:::-;12977:72;13045:2;13034:9;13030:18;13021:6;12977:72;:::i;:::-;12724:332;;;;;:::o;13062:137::-;13116:5;13147:6;13141:13;13132:22;;13163:30;13187:5;13163:30;:::i;:::-;13062:137;;;;:::o;13205:345::-;13272:6;13321:2;13309:9;13300:7;13296:23;13292:32;13289:119;;;13327:79;;:::i;:::-;13289:119;13447:1;13472:61;13525:7;13516:6;13505:9;13501:22;13472:61;:::i;:::-;13462:71;;13418:125;13205:345;;;;:::o;13556:104::-;13601:7;13630:24;13648:5;13630:24;:::i;:::-;13619:35;;13556:104;;;:::o;13666:142::-;13769:32;13795:5;13769:32;:::i;:::-;13764:3;13757:45;13666:142;;:::o;13814:254::-;13923:4;13961:2;13950:9;13946:18;13938:26;;13974:87;14058:1;14047:9;14043:17;14034:6;13974:87;:::i;:::-;13814:254;;;;:::o;14074:143::-;14131:5;14162:6;14156:13;14147:22;;14178:33;14205:5;14178:33;:::i;:::-;14074:143;;;;:::o;14223:977::-;14329:6;14337;14345;14353;14361;14410:3;14398:9;14389:7;14385:23;14381:33;14378:120;;;14417:79;;:::i;:::-;14378:120;14537:1;14562:64;14618:7;14609:6;14598:9;14594:22;14562:64;:::i;:::-;14552:74;;14508:128;14675:2;14701:64;14757:7;14748:6;14737:9;14733:22;14701:64;:::i;:::-;14691:74;;14646:129;14814:2;14840:64;14896:7;14887:6;14876:9;14872:22;14840:64;:::i;:::-;14830:74;;14785:129;14953:2;14979:64;15035:7;15026:6;15015:9;15011:22;14979:64;:::i;:::-;14969:74;;14924:129;15092:3;15119:64;15175:7;15166:6;15155:9;15151:22;15119:64;:::i;:::-;15109:74;;15063:130;14223:977;;;;;;;;:::o;15206:332::-;15327:4;15365:2;15354:9;15350:18;15342:26;;15378:71;15446:1;15435:9;15431:17;15422:6;15378:71;:::i;:::-;15459:72;15527:2;15516:9;15512:18;15503:6;15459:72;:::i;:::-;15206:332;;;;;:::o;15544:225::-;15684:34;15680:1;15672:6;15668:14;15661:58;15753:8;15748:2;15740:6;15736:15;15729:33;15544:225;:::o;15775:366::-;15917:3;15938:67;16002:2;15997:3;15938:67;:::i;:::-;15931:74;;16014:93;16103:3;16014:93;:::i;:::-;16132:2;16127:3;16123:12;16116:19;;15775:366;;;:::o;16147:419::-;16313:4;16351:2;16340:9;16336:18;16328:26;;16400:9;16394:4;16390:20;16386:1;16375:9;16371:17;16364:47;16428:131;16554:4;16428:131;:::i;:::-;16420:139;;16147:419;;;:::o;16572:176::-;16712:28;16708:1;16700:6;16696:14;16689:52;16572:176;:::o;16754:366::-;16896:3;16917:67;16981:2;16976:3;16917:67;:::i;:::-;16910:74;;16993:93;17082:3;16993:93;:::i;:::-;17111:2;17106:3;17102:12;17095:19;;16754:366;;;:::o;17126:419::-;17292:4;17330:2;17319:9;17315:18;17307:26;;17379:9;17373:4;17369:20;17365:1;17354:9;17350:17;17343:47;17407:131;17533:4;17407:131;:::i;:::-;17399:139;;17126:419;;;:::o;17551:223::-;17691:34;17687:1;17679:6;17675:14;17668:58;17760:6;17755:2;17747:6;17743:15;17736:31;17551:223;:::o;17780:366::-;17922:3;17943:67;18007:2;18002:3;17943:67;:::i;:::-;17936:74;;18019:93;18108:3;18019:93;:::i;:::-;18137:2;18132:3;18128:12;18121:19;;17780:366;;;:::o;18152:419::-;18318:4;18356:2;18345:9;18341:18;18333:26;;18405:9;18399:4;18395:20;18391:1;18380:9;18376:17;18369:47;18433:131;18559:4;18433:131;:::i;:::-;18425:139;;18152:419;;;:::o;18577:221::-;18717:34;18713:1;18705:6;18701:14;18694:58;18786:4;18781:2;18773:6;18769:15;18762:29;18577:221;:::o;18804:366::-;18946:3;18967:67;19031:2;19026:3;18967:67;:::i;:::-;18960:74;;19043:93;19132:3;19043:93;:::i;:::-;19161:2;19156:3;19152:12;19145:19;;18804:366;;;:::o;19176:419::-;19342:4;19380:2;19369:9;19365:18;19357:26;;19429:9;19423:4;19419:20;19415:1;19404:9;19400:17;19393:47;19457:131;19583:4;19457:131;:::i;:::-;19449:139;;19176:419;;;:::o;19601:224::-;19741:34;19737:1;19729:6;19725:14;19718:58;19810:7;19805:2;19797:6;19793:15;19786:32;19601:224;:::o;19831:366::-;19973:3;19994:67;20058:2;20053:3;19994:67;:::i;:::-;19987:74;;20070:93;20159:3;20070:93;:::i;:::-;20188:2;20183:3;20179:12;20172:19;;19831:366;;;:::o;20203:419::-;20369:4;20407:2;20396:9;20392:18;20384:26;;20456:9;20450:4;20446:20;20442:1;20431:9;20427:17;20420:47;20484:131;20610:4;20484:131;:::i;:::-;20476:139;;20203:419;;;:::o;20628:222::-;20768:34;20764:1;20756:6;20752:14;20745:58;20837:5;20832:2;20824:6;20820:15;20813:30;20628:222;:::o;20856:366::-;20998:3;21019:67;21083:2;21078:3;21019:67;:::i;:::-;21012:74;;21095:93;21184:3;21095:93;:::i;:::-;21213:2;21208:3;21204:12;21197:19;;20856:366;;;:::o;21228:419::-;21394:4;21432:2;21421:9;21417:18;21409:26;;21481:9;21475:4;21471:20;21467:1;21456:9;21452:17;21445:47;21509:131;21635:4;21509:131;:::i;:::-;21501:139;;21228:419;;;:::o;21653:364::-;21790:4;21828:2;21817:9;21813:18;21805:26;;21841:87;21925:1;21914:9;21910:17;21901:6;21841:87;:::i;:::-;21938:72;22006:2;21995:9;21991:18;21982:6;21938:72;:::i;:::-;21653:364;;;;;:::o;22023:180::-;22071:77;22068:1;22061:88;22168:4;22165:1;22158:15;22192:4;22189:1;22182:15;22209:305;22249:3;22268:20;22286:1;22268:20;:::i;:::-;22263:25;;22302:20;22320:1;22302:20;:::i;:::-;22297:25;;22456:1;22388:66;22384:74;22381:1;22378:81;22375:107;;;22462:18;;:::i;:::-;22375:107;22506:1;22503;22499:9;22492:16;;22209:305;;;;:::o
Swarm Source
ipfs://ce6710d16067b83a1b894ddefa62f82652d828ee3c41b7f7033b6c411c09e005
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.