ETH Price: $3,432.98 (-0.72%)
Gas: 20 Gwei

Token

MEVShare (MEVSHARE)
 

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)

Filtered by Token Holder
icepackog.eth
Balance
70,168,840.044496702181633687 MEVSHARE

Value
$0.00
0x094e4C6398d49b785A04cD83C6Eea943452789c3
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MEVSHARE

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

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

Contract ABI

[{"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"}]

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.