ETH Price: $3,515.76 (+2.77%)
Gas: 4 Gwei

Token

SeenHaus Governance (xSEEN)
 

Overview

Max Total Supply

54,982.497482098861476881 xSEEN

Holders

59

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
morocho.eth
Balance
30.841545585404597083 xSEEN

Value
$0.00
0x0471ccf14bcfb7c626da92286dd3c93b88ac71f4
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:
SeenHaus

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-04-13
*/

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract GovERC20 {
    /// @notice EIP-20 token name for this token
    string public constant name = "SeenHaus Governance";

    /// @notice EIP-20 token symbol for this token
    string public constant symbol = "xSEEN";

    /// @notice EIP-20 token decimals for this token
    uint8 public constant decimals = 18;

    uint public totalSupply;

    mapping (address => mapping (address => uint96)) internal allowances;

    mapping (address => uint96) internal balances;

    /// @notice A record of each accounts delegate
    mapping (address => address) public delegates;

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint96 votes;
    }

    /// @notice A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;

    /// @notice The number of checkpoints for each account
    mapping (address => uint32) public numCheckpoints;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

    /// @notice A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

    /// @notice An event thats emitted when an account changes its delegate
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /// @notice An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);

    /// @notice The standard EIP-20 transfer event
    event Transfer(address indexed from, address indexed to, uint256 amount);

    /// @notice The standard EIP-20 approval event
    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /**
     * @notice Get the number of tokens `spender` is approved to spend on behalf of `account`
     * @param account The address of the account holding the funds
     * @param spender The address of the account spending the funds
     * @return The number of tokens approved
     */
    function allowance(address account, address spender) external view returns (uint) {
        return allowances[account][spender];
    }

    /**
     * @notice Approve `spender` to transfer up to `amount` from `src`
     * @dev This will overwrite the approval amount for `spender`
     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
     * @param spender The address of the account which may transfer tokens
     * @param rawAmount The number of tokens that are approved (2^256-1 means infinite)
     * @return Whether or not the approval succeeded
     */
    function approve(address spender, uint rawAmount) external returns (bool) {
        uint96 amount;
        if (rawAmount == type(uint256).max) {
            amount = type(uint96).max;
        } else {
            amount = safe96(rawAmount, "Comp::approve: amount exceeds 96 bits");
        }

        allowances[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);
        return true;
    }

    /**
     * @notice Get the number of tokens held by the `account`
     * @param account The address of the account to get the balance of
     * @return The number of tokens held
     */
    function balanceOf(address account) external view returns (uint) {
        return balances[account];
    }

    /**
     * @notice Transfer `amount` tokens from `msg.sender` to `dst`
     * @param dst The address of the destination account
     * @param rawAmount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transfer(address dst, uint rawAmount) external returns (bool) {
        uint96 amount = safe96(rawAmount, "Comp::transfer: amount exceeds 96 bits");
        _transferTokens(msg.sender, dst, amount);
        return true;
    }

    /**
     * @notice Transfer `amount` tokens from `src` to `dst`
     * @param src The address of the source account
     * @param dst The address of the destination account
     * @param rawAmount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transferFrom(address src, address dst, uint rawAmount) external returns (bool) {
        address spender = msg.sender;
        uint96 spenderAllowance = allowances[src][spender];
        uint96 amount = safe96(rawAmount, "Comp::approve: amount exceeds 96 bits");

        if (spender != src && spenderAllowance != type(uint96).max) {
            uint96 newAllowance = sub96(spenderAllowance, amount, "Comp::transferFrom: transfer amount exceeds spender allowance");
            allowances[src][spender] = newAllowance;

            emit Approval(src, spender, newAllowance);
        }

        _transferTokens(src, dst, amount);
        return true;
    }

    function _mint(address account, uint amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0));

        totalSupply += amount;
        balances[account] += uint96(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account);

        require(balances[account] >= uint96(amount), "ERC20: burn amount exceeds balance");
        balances[account] -= uint96(amount);
        totalSupply -= amount;

        emit Transfer(account, address(0), amount);
    }

    /**
     * @notice Delegate votes from `msg.sender` to `delegatee`
     * @param delegatee The address to delegate votes to
     */
    function delegate(address delegatee) public {
        return _delegate(msg.sender, delegatee);
    }

    /**
     * @notice Delegates votes from signatory to `delegatee`
     * @param delegatee The address to delegate votes to
     * @param nonce The contract state required to match the signature
     * @param expiry The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) public {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "Comp::delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "Comp::delegateBySig: invalid nonce");
        require(block.timestamp <= expiry, "Comp::delegateBySig: signature expired");
        return _delegate(signatory, delegatee);
    }

    /**
     * @notice Gets the current votes balance for `account`
     * @param account The address to get votes balance
     * @return The number of current votes for `account`
     */
    function getCurrentVotes(address account) external view returns (uint96) {
        uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    /**
     * @notice Determine the prior number of votes for an account as of a block number
     * @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
     * @param account The address of the account to check
     * @param blockNumber The block number to get the vote balance at
     * @return The number of votes the account had as of the given block
     */
    function getPriorVotes(address account, uint blockNumber) public view returns (uint96) {
        require(blockNumber < block.number, "Comp::getPriorVotes: not yet determined");

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = delegates[delegator];
        uint96 delegatorBalance = balances[delegator];
        delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _transferTokens(address src, address dst, uint96 amount) internal {
        require(src != address(0), "Comp::_transferTokens: cannot transfer from the zero address");
        require(dst != address(0), "Comp::_transferTokens: cannot transfer to the zero address");

        _beforeTokenTransfer(src);

        balances[src] = sub96(balances[src], amount, "Comp::_transferTokens: transfer amount exceeds balance");
        balances[dst] = add96(balances[dst], amount, "Comp::_transferTokens: transfer amount overflows");
        emit Transfer(src, dst, amount);

        _moveDelegates(delegates[src], delegates[dst], amount);
    }

    function _moveDelegates(address srcRep, address dstRep, uint96 amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint96 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint96 srcRepNew = sub96(srcRepOld, amount, "Comp::_moveVotes: vote amount underflows");
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint96 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint96 dstRepNew = add96(dstRepOld, amount, "Comp::_moveVotes: vote amount overflows");
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint96 oldVotes, uint96 newVotes) internal {
      uint32 blockNumber = safe32(block.number, "Comp::_writeCheckpoint: block number exceeds 32 bits");

      if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
          checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
      } else {
          checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
          numCheckpoints[delegatee] = nCheckpoints + 1;
      }

      emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    function safe96(uint n, string memory errorMessage) internal pure returns (uint96) {
        require(n < 2**96, errorMessage);
        return uint96(n);
    }

    function add96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) {
        uint96 c = a + b;
        require(c >= a, errorMessage);
        return c;
    }

    function sub96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) {
        require(b <= a, errorMessage);
        return a - b;
    }

    function getChainId() internal view returns (uint) {
        uint256 chainId;
        assembly { chainId := chainid() }
        return chainId;
    }

    function _beforeTokenTransfer(address from) internal virtual { }
}

interface IWETH {
    function deposit() external payable;
}

interface Sushiswap {
    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
}

contract SeenHaus is GovERC20(){
    address public constant weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address public constant sushiswap = 0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F;
    IERC20 public constant seen = IERC20(0xCa3FE04C7Ee111F0bbb02C328c699226aCf9Fd33);

    // accounts balances are locked for 3 days after entering 
    mapping(address => uint256) locked;

    constructor() {
        IERC20(weth).approve(sushiswap, type(uint256).max);
    }

    function _beforeTokenTransfer(address from) internal view override {
        require(locked[from] <= block.timestamp, "transfer:too soon after minting");
    }

    // Enter the haus. Pay some SEENs. Earn some shares.
    function enter(uint256 _amount) public {
        uint256 totalSeen = seen.balanceOf(address(this));
        uint256 totalShares = totalSupply;

        locked[msg.sender] = block.timestamp + 3 days;

        if (totalShares == 0 || totalSeen == 0) {
            _mint(msg.sender, _amount);
        } else {
            uint256 what = _amount * totalShares / totalSeen;
            _mint(msg.sender, what);
        }
        seen.transferFrom(msg.sender, address(this), _amount);
    }

    // Leave the haus. Claim back your SEENs.
    function leave(uint256 _share) public {
        uint256 totalShares = totalSupply;
        uint256 what = _share * seen.balanceOf(address(this)) / totalShares;
        _burn(msg.sender, _share);
        seen.transfer(msg.sender, what);
    }

    function swap() public {
        IWETH(weth).deposit{value: address(this).balance}();
        uint256 amountIn = IERC20(weth).balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = weth;
        path[1] = address(seen);

        Sushiswap(sushiswap).swapExactTokensForTokens(
            amountIn,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    receive() external payable {}

}

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":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","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":"rawAmount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint96","name":"votes","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"enter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_share","type":"uint256"}],"name":"leave","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"seen","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sushiswap","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swap","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":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663095ea7b373d9e1ce17f2641f24ae83637ab66a2cca9c378b9f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200009792919062000159565b602060405180830381600087803b158015620000b257600080fd5b505af1158015620000c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ed91906200010b565b50620001ea565b6000815190506200010581620001d0565b92915050565b6000602082840312156200011e57600080fd5b60006200012e84828501620000f4565b91505092915050565b620001428162000186565b82525050565b6200015381620001c6565b82525050565b600060408201905062000170600083018562000137565b6200017f602083018462000148565b9392505050565b60006200019382620001a6565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b620001db816200019a565b8114620001e757600080fd5b50565b61430780620001fa6000396000f3fe60806040526004361061016a5760003560e01c8063782d6fe1116100d1578063a9059cbb1161008a578063d99aa8e211610064578063d99aa8e214610583578063dd62ed3e146105ae578063e7a324dc146105eb578063f1127ed81461061657610171565b8063a9059cbb146104e0578063b4b5ea571461051d578063c3cda5201461055a57610171565b8063782d6fe1146103d05780637ecebe001461040d5780638119c0651461044a57806395d89b41146104615780639be287851461048c578063a59f3e0c146104b757610171565b80633fc8cef3116101235780633fc8cef31461029c578063587cde1e146102c75780635c19a95c1461030457806367dfd4c91461032d5780636fcfff451461035657806370a082311461039357610171565b806306fdde0314610176578063095ea7b3146101a157806318160ddd146101de57806320606b701461020957806323b872dd14610234578063313ce5671461027157610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b610654565b604051610198919061364f565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c39190612fd4565b61068d565b6040516101d5919061352f565b60405180910390f35b3480156101ea57600080fd5b506101f361080c565b60405161020091906137b1565b60405180910390f35b34801561021557600080fd5b5061021e610812565b60405161022b919061354a565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190612f85565b610836565b604051610268919061352f565b60405180910390f35b34801561027d57600080fd5b50610286610aaa565b604051610293919061386a565b60405180910390f35b3480156102a857600080fd5b506102b1610aaf565b6040516102be91906134b4565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e99190612f20565b610ac7565b6040516102fb91906134b4565b60405180910390f35b34801561031057600080fd5b5061032b60048036038101906103269190612f20565b610afa565b005b34801561033957600080fd5b50610354600480360381019061034f919061313f565b610b07565b005b34801561036257600080fd5b5061037d60048036038101906103789190612f20565b610c75565b60405161038a9190613826565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b59190612f20565b610c98565b6040516103c791906137b1565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190612fd4565b610d07565b60405161040491906138a0565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190612f20565b611142565b60405161044191906137b1565b60405180910390f35b34801561045657600080fd5b5061045f61115a565b005b34801561046d57600080fd5b506104766114a8565b604051610483919061364f565b60405180910390f35b34801561049857600080fd5b506104a16114e1565b6040516104ae91906134b4565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d9919061313f565b6114f9565b005b3480156104ec57600080fd5b5061050760048036038101906105029190612fd4565b6116e5565b604051610514919061352f565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f9190612f20565b611722565b60405161055191906138a0565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190613010565b611819565b005b34801561058f57600080fd5b50610598611adc565b6040516105a59190613634565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d09190612f49565b611af4565b6040516105e291906137b1565b60405180910390f35b3480156105f757600080fd5b50610600611ba1565b60405161060d919061354a565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190613099565b611bc5565b60405161064b929190613841565b60405180910390f35b6040518060400160405280601381526020017f5365656e4861757320476f7665726e616e63650000000000000000000000000081525081565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156106cc576bffffffffffffffffffffffff90506106f1565b6106ee8360405180606001604052806025815260200161419760259139611c1e565b90505b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107f99190613885565b60405180910390a3600191505092915050565b60005481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6000803390506000600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16905060006108f98560405180606001604052806025815260200161419760259139611c1e565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561095357506bffffffffffffffffffffffff8016826bffffffffffffffffffffffff1614155b15610a9157600061097d83836040518060600160405280603d815260200161426e603d9139611c7c565b905080600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610a879190613885565b60405180910390a3505b610a9c878783611cf6565b600193505050509392505050565b601281565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b0433826120e0565b50565b60008054905060008173ca3fe04c7ee111f0bbb02c328c699226acf9fd3373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b5d91906134b4565b60206040518083038186803b158015610b7557600080fd5b505afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad9190613168565b84610bb89190613ac9565b610bc29190613a67565b9050610bce33846122a0565b73ca3fe04c7ee111f0bbb02c328c699226acf9fd3373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610c1d929190613506565b602060405180830381600087803b158015610c3757600080fd5b505af1158015610c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6f9190613116565b50505050565b60056020528060005260406000206000915054906101000a900463ffffffff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050919050565b6000438210610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d42906136d1565b60405180910390fd5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415610db857600091505061113c565b82600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610e079190613b57565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610ecc57600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610e8e9190613b57565b63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff1691505061113c565b82600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610f4d57600091505061113c565b600080600183610f5d9190613b57565b90505b8163ffffffff168163ffffffff1611156110be57600060028383610f849190613b57565b610f8e9190613a98565b82610f999190613b57565b90506000600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905086816000015163ffffffff16141561108d5780602001519550505050505061113c565b86816000015163ffffffff1610156110a7578193506110b7565b6001826110b49190613b57565b92505b5050610f60565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff1693505050505b92915050565b60066020528060005260406000206000915090505481565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111b657600080fd5b505af11580156111ca573d6000803e3d6000fd5b5050505050600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161121e91906134b4565b60206040518083038186803b15801561123657600080fd5b505afa15801561124a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126e9190613168565b90506000600267ffffffffffffffff8111156112b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156112e15781602001602082028036833780820191505090505b50905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600081518110611333577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073ca3fe04c7ee111f0bbb02c328c699226acf9fd33816001815181106113bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073d9e1ce17f2641f24ae83637ab66a2cca9c378b9f73ffffffffffffffffffffffffffffffffffffffff166338ed17398360008430426040518663ffffffff1660e01b815260040161144c9594939291906137cc565b600060405180830381600087803b15801561146657600080fd5b505af115801561147a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906114a391906130d5565b505050565b6040518060400160405280600581526020017f785345454e00000000000000000000000000000000000000000000000000000081525081565b73d9e1ce17f2641f24ae83637ab66a2cca9c378b9f81565b600073ca3fe04c7ee111f0bbb02c328c699226acf9fd3373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161154891906134b4565b60206040518083038186803b15801561156057600080fd5b505afa158015611574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115989190613168565b90506000805490506203f480426115af9190613995565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008114806116015750600082145b156116155761161033846124e5565b61163c565b60008282856116249190613ac9565b61162e9190613a67565b905061163a33826124e5565b505b73ca3fe04c7ee111f0bbb02c328c699226acf9fd3373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b815260040161168d939291906134cf565b602060405180830381600087803b1580156116a757600080fd5b505af11580156116bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116df9190613116565b50505050565b60008061170a836040518060600160405280602681526020016141bc60269139611c1e565b9050611717338583611cf6565b600191505092915050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161161178c576000611811565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001836117da9190613b57565b63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b915050919050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280601381526020017f5365656e4861757320476f7665726e616e63650000000000000000000000000081525080519060200120611881612675565b3060405160200161189594939291906135aa565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8888886040516020016118e69493929190613565565b6040516020818303038152906040528051906020012090506000828260405160200161191392919061347d565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161195094939291906135ef565b6020604051602081039080840390855afa158015611972573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e590613691565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611a3e90613cf2565b919050558914611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a906136f1565b60405180910390fd5b87421115611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd906136b1565b60405180910390fd5b611ad0818b6120e0565b50505050505050505050565b73ca3fe04c7ee111f0bbb02c328c699226acf9fd3381565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6004602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060000160049054906101000a90046bffffffffffffffffffffffff16905082565b60006c0100000000000000000000000083108290611c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c69919061364f565b60405180910390fd5b5082905092915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd7919061364f565b60405180910390fd5b508284611ced9190613b8b565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d90613751565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd90613711565b60405180910390fd5b611ddf83612682565b611e59600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff168260405180606001604052806036815260200161416160369139611c7c565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550611f40600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff168260405180606001604052806030815260200161423e60309139612707565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161200a9190613885565b60405180910390a36120db600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612786565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16905082600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a461229a828483612786565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230790613771565b60405180910390fd5b61231982612682565b806bffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff1610156123cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c690613671565b60405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a90046bffffffffffffffffffffffff166124359190613b8b565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550806000808282546124749190613b23565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124d991906137b1565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254c90613791565b60405180910390fd5b61255f6000612682565b806000808282546125709190613995565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a90046bffffffffffffffffffffffff166125dd9190613a25565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161266991906137b1565b60405180910390a35050565b6000804690508091505090565b42600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fb90613731565b60405180910390fd5b50565b60008083856127169190613a25565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff161015839061277a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612771919061364f565b60405180910390fd5b50809150509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127d057506000816bffffffffffffffffffffffff16115b15612a8e57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612931576000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116128735760006128f8565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846128c19190613b57565b63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b9050600061291f828560405180606001604052806028815260200161421660289139611c7c565b905061292d86848484612a93565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a8d576000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116129cf576000612a54565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184612a1d9190613b57565b63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b90506000612a7b82856040518060600160405280602781526020016142ab60279139612707565b9050612a8985848484612a93565b5050505b5b505050565b6000612ab7436040518060600160405280603481526020016141e260349139612da1565b905060008463ffffffff16118015612b5557508063ffffffff16600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187612b1f9190613b57565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b15612bf95781600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187612ba99190613b57565b63ffffffff1663ffffffff16815260200190815260200160002060000160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550612d4a565b60405180604001604052808263ffffffff168152602001836bffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050600184612cec91906139eb565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612d929291906138bb565b60405180910390a25050505050565b600064010000000083108290612ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de4919061364f565b60405180910390fd5b5082905092915050565b6000612e0a612e0584613909565b6138e4565b90508083825260208201905082856020860282011115612e2957600080fd5b60005b85811015612e595781612e3f8882612ee1565b845260208401935060208301925050600181019050612e2c565b5050509392505050565b600081359050612e72816140d6565b92915050565b600082601f830112612e8957600080fd5b8151612e99848260208601612df7565b91505092915050565b600081519050612eb1816140ed565b92915050565b600081359050612ec681614104565b92915050565b600081359050612edb8161411b565b92915050565b600081519050612ef08161411b565b92915050565b600081359050612f0581614132565b92915050565b600081359050612f1a81614149565b92915050565b600060208284031215612f3257600080fd5b6000612f4084828501612e63565b91505092915050565b60008060408385031215612f5c57600080fd5b6000612f6a85828601612e63565b9250506020612f7b85828601612e63565b9150509250929050565b600080600060608486031215612f9a57600080fd5b6000612fa886828701612e63565b9350506020612fb986828701612e63565b9250506040612fca86828701612ecc565b9150509250925092565b60008060408385031215612fe757600080fd5b6000612ff585828601612e63565b925050602061300685828601612ecc565b9150509250929050565b60008060008060008060c0878903121561302957600080fd5b600061303789828a01612e63565b965050602061304889828a01612ecc565b955050604061305989828a01612ecc565b945050606061306a89828a01612f0b565b935050608061307b89828a01612eb7565b92505060a061308c89828a01612eb7565b9150509295509295509295565b600080604083850312156130ac57600080fd5b60006130ba85828601612e63565b92505060206130cb85828601612ef6565b9150509250929050565b6000602082840312156130e757600080fd5b600082015167ffffffffffffffff81111561310157600080fd5b61310d84828501612e78565b91505092915050565b60006020828403121561312857600080fd5b600061313684828501612ea2565b91505092915050565b60006020828403121561315157600080fd5b600061315f84828501612ecc565b91505092915050565b60006020828403121561317a57600080fd5b600061318884828501612ee1565b91505092915050565b600061319d83836131a9565b60208301905092915050565b6131b281613bbf565b82525050565b6131c181613bbf565b82525050565b60006131d282613945565b6131dc8185613968565b93506131e783613935565b8060005b838110156132185781516131ff8882613191565b975061320a8361395b565b9250506001810190506131eb565b5085935050505092915050565b61322e81613bd1565b82525050565b61323d81613bdd565b82525050565b61325461324f82613bdd565b613d3b565b82525050565b61326381613c46565b82525050565b61327281613c6a565b82525050565b600061328382613950565b61328d8185613979565b935061329d818560208601613c8e565b6132a681613dd2565b840191505092915050565b60006132be602283613979565b91506132c982613de3565b604082019050919050565b60006132e1602683613979565b91506132ec82613e32565b604082019050919050565b6000613304602683613979565b915061330f82613e81565b604082019050919050565b600061332760028361398a565b915061333282613ed0565b600282019050919050565b600061334a602783613979565b915061335582613ef9565b604082019050919050565b600061336d602283613979565b915061337882613f48565b604082019050919050565b6000613390603a83613979565b915061339b82613f97565b604082019050919050565b60006133b3601f83613979565b91506133be82613fe6565b602082019050919050565b60006133d6603c83613979565b91506133e18261400f565b604082019050919050565b60006133f9602183613979565b91506134048261405e565b604082019050919050565b600061341c601f83613979565b9150613427826140ad565b602082019050919050565b61343b81613c07565b82525050565b61344a81613c11565b82525050565b61345981613c21565b82525050565b61346881613c7c565b82525050565b61347781613c2e565b82525050565b60006134888261331a565b91506134948285613243565b6020820191506134a48284613243565b6020820191508190509392505050565b60006020820190506134c960008301846131b8565b92915050565b60006060820190506134e460008301866131b8565b6134f160208301856131b8565b6134fe6040830184613432565b949350505050565b600060408201905061351b60008301856131b8565b6135286020830184613432565b9392505050565b60006020820190506135446000830184613225565b92915050565b600060208201905061355f6000830184613234565b92915050565b600060808201905061357a6000830187613234565b61358760208301866131b8565b6135946040830185613432565b6135a16060830184613432565b95945050505050565b60006080820190506135bf6000830187613234565b6135cc6020830186613234565b6135d96040830185613432565b6135e660608301846131b8565b95945050505050565b60006080820190506136046000830187613234565b6136116020830186613450565b61361e6040830185613234565b61362b6060830184613234565b95945050505050565b6000602082019050613649600083018461325a565b92915050565b600060208201905081810360008301526136698184613278565b905092915050565b6000602082019050818103600083015261368a816132b1565b9050919050565b600060208201905081810360008301526136aa816132d4565b9050919050565b600060208201905081810360008301526136ca816132f7565b9050919050565b600060208201905081810360008301526136ea8161333d565b9050919050565b6000602082019050818103600083015261370a81613360565b9050919050565b6000602082019050818103600083015261372a81613383565b9050919050565b6000602082019050818103600083015261374a816133a6565b9050919050565b6000602082019050818103600083015261376a816133c9565b9050919050565b6000602082019050818103600083015261378a816133ec565b9050919050565b600060208201905081810360008301526137aa8161340f565b9050919050565b60006020820190506137c66000830184613432565b92915050565b600060a0820190506137e16000830188613432565b6137ee6020830187613269565b818103604083015261380081866131c7565b905061380f60608301856131b8565b61381c6080830184613432565b9695505050505050565b600060208201905061383b6000830184613441565b92915050565b60006040820190506138566000830185613441565b613863602083018461346e565b9392505050565b600060208201905061387f6000830184613450565b92915050565b600060208201905061389a600083018461345f565b92915050565b60006020820190506138b5600083018461346e565b92915050565b60006040820190506138d0600083018561345f565b6138dd602083018461345f565b9392505050565b60006138ee6138ff565b90506138fa8282613cc1565b919050565b6000604051905090565b600067ffffffffffffffff82111561392457613923613da3565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006139a082613c07565b91506139ab83613c07565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139e0576139df613d45565b5b828201905092915050565b60006139f682613c11565b9150613a0183613c11565b92508263ffffffff03821115613a1a57613a19613d45565b5b828201905092915050565b6000613a3082613c2e565b9150613a3b83613c2e565b9250826bffffffffffffffffffffffff03821115613a5c57613a5b613d45565b5b828201905092915050565b6000613a7282613c07565b9150613a7d83613c07565b925082613a8d57613a8c613d74565b5b828204905092915050565b6000613aa382613c11565b9150613aae83613c11565b925082613abe57613abd613d74565b5b828204905092915050565b6000613ad482613c07565b9150613adf83613c07565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b1857613b17613d45565b5b828202905092915050565b6000613b2e82613c07565b9150613b3983613c07565b925082821015613b4c57613b4b613d45565b5b828203905092915050565b6000613b6282613c11565b9150613b6d83613c11565b925082821015613b8057613b7f613d45565b5b828203905092915050565b6000613b9682613c2e565b9150613ba183613c2e565b925082821015613bb457613bb3613d45565b5b828203905092915050565b6000613bca82613be7565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60006bffffffffffffffffffffffff82169050919050565b6000613c5182613c58565b9050919050565b6000613c6382613be7565b9050919050565b6000613c7582613c07565b9050919050565b6000613c8782613c2e565b9050919050565b60005b83811015613cac578082015181840152602081019050613c91565b83811115613cbb576000848401525b50505050565b613cca82613dd2565b810181811067ffffffffffffffff82111715613ce957613ce8613da3565b5b80604052505050565b6000613cfd82613c07565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d3057613d2f613d45565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f436f6d703a3a64656c656761746542795369673a20696e76616c69642073696760008201527f6e61747572650000000000000000000000000000000000000000000000000000602082015250565b7f436f6d703a3a64656c656761746542795369673a207369676e6174757265206560008201527f7870697265640000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f436f6d703a3a6765745072696f72566f7465733a206e6f74207965742064657460008201527f65726d696e656400000000000000000000000000000000000000000000000000602082015250565b7f436f6d703a3a64656c656761746542795369673a20696e76616c6964206e6f6e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f436f6d703a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260008201527f616e7366657220746f20746865207a65726f2061646472657373000000000000602082015250565b7f7472616e736665723a746f6f20736f6f6e206166746572206d696e74696e6700600082015250565b7f436f6d703a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260008201527f616e736665722066726f6d20746865207a65726f206164647265737300000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6140df81613bbf565b81146140ea57600080fd5b50565b6140f681613bd1565b811461410157600080fd5b50565b61410d81613bdd565b811461411857600080fd5b50565b61412481613c07565b811461412f57600080fd5b50565b61413b81613c11565b811461414657600080fd5b50565b61415281613c21565b811461415d57600080fd5b5056fe436f6d703a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365436f6d703a3a617070726f76653a20616d6f756e7420657863656564732039362062697473436f6d703a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473436f6d703a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473436f6d703a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773436f6d703a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773436f6d703a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365436f6d703a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773a2646970667358221220158ffbe380f6baef2174aef1b3e5e53f4705f75083f8966d20c9e069e876211664736f6c63430008030033

Deployed Bytecode

0x60806040526004361061016a5760003560e01c8063782d6fe1116100d1578063a9059cbb1161008a578063d99aa8e211610064578063d99aa8e214610583578063dd62ed3e146105ae578063e7a324dc146105eb578063f1127ed81461061657610171565b8063a9059cbb146104e0578063b4b5ea571461051d578063c3cda5201461055a57610171565b8063782d6fe1146103d05780637ecebe001461040d5780638119c0651461044a57806395d89b41146104615780639be287851461048c578063a59f3e0c146104b757610171565b80633fc8cef3116101235780633fc8cef31461029c578063587cde1e146102c75780635c19a95c1461030457806367dfd4c91461032d5780636fcfff451461035657806370a082311461039357610171565b806306fdde0314610176578063095ea7b3146101a157806318160ddd146101de57806320606b701461020957806323b872dd14610234578063313ce5671461027157610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b610654565b604051610198919061364f565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c39190612fd4565b61068d565b6040516101d5919061352f565b60405180910390f35b3480156101ea57600080fd5b506101f361080c565b60405161020091906137b1565b60405180910390f35b34801561021557600080fd5b5061021e610812565b60405161022b919061354a565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190612f85565b610836565b604051610268919061352f565b60405180910390f35b34801561027d57600080fd5b50610286610aaa565b604051610293919061386a565b60405180910390f35b3480156102a857600080fd5b506102b1610aaf565b6040516102be91906134b4565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e99190612f20565b610ac7565b6040516102fb91906134b4565b60405180910390f35b34801561031057600080fd5b5061032b60048036038101906103269190612f20565b610afa565b005b34801561033957600080fd5b50610354600480360381019061034f919061313f565b610b07565b005b34801561036257600080fd5b5061037d60048036038101906103789190612f20565b610c75565b60405161038a9190613826565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b59190612f20565b610c98565b6040516103c791906137b1565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190612fd4565b610d07565b60405161040491906138a0565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190612f20565b611142565b60405161044191906137b1565b60405180910390f35b34801561045657600080fd5b5061045f61115a565b005b34801561046d57600080fd5b506104766114a8565b604051610483919061364f565b60405180910390f35b34801561049857600080fd5b506104a16114e1565b6040516104ae91906134b4565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d9919061313f565b6114f9565b005b3480156104ec57600080fd5b5061050760048036038101906105029190612fd4565b6116e5565b604051610514919061352f565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f9190612f20565b611722565b60405161055191906138a0565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190613010565b611819565b005b34801561058f57600080fd5b50610598611adc565b6040516105a59190613634565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d09190612f49565b611af4565b6040516105e291906137b1565b60405180910390f35b3480156105f757600080fd5b50610600611ba1565b60405161060d919061354a565b60405180910390f35b34801561062257600080fd5b5061063d60048036038101906106389190613099565b611bc5565b60405161064b929190613841565b60405180910390f35b6040518060400160405280601381526020017f5365656e4861757320476f7665726e616e63650000000000000000000000000081525081565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156106cc576bffffffffffffffffffffffff90506106f1565b6106ee8360405180606001604052806025815260200161419760259139611c1e565b90505b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107f99190613885565b60405180910390a3600191505092915050565b60005481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6000803390506000600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16905060006108f98560405180606001604052806025815260200161419760259139611c1e565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561095357506bffffffffffffffffffffffff8016826bffffffffffffffffffffffff1614155b15610a9157600061097d83836040518060600160405280603d815260200161426e603d9139611c7c565b905080600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610a879190613885565b60405180910390a3505b610a9c878783611cf6565b600193505050509392505050565b601281565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b0433826120e0565b50565b60008054905060008173ca3fe04c7ee111f0bbb02c328c699226acf9fd3373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b5d91906134b4565b60206040518083038186803b158015610b7557600080fd5b505afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad9190613168565b84610bb89190613ac9565b610bc29190613a67565b9050610bce33846122a0565b73ca3fe04c7ee111f0bbb02c328c699226acf9fd3373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610c1d929190613506565b602060405180830381600087803b158015610c3757600080fd5b505af1158015610c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6f9190613116565b50505050565b60056020528060005260406000206000915054906101000a900463ffffffff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050919050565b6000438210610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d42906136d1565b60405180910390fd5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415610db857600091505061113c565b82600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610e079190613b57565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610ecc57600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610e8e9190613b57565b63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff1691505061113c565b82600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610f4d57600091505061113c565b600080600183610f5d9190613b57565b90505b8163ffffffff168163ffffffff1611156110be57600060028383610f849190613b57565b610f8e9190613a98565b82610f999190613b57565b90506000600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905086816000015163ffffffff16141561108d5780602001519550505050505061113c565b86816000015163ffffffff1610156110a7578193506110b7565b6001826110b49190613b57565b92505b5050610f60565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff1693505050505b92915050565b60066020528060005260406000206000915090505481565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111b657600080fd5b505af11580156111ca573d6000803e3d6000fd5b5050505050600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161121e91906134b4565b60206040518083038186803b15801561123657600080fd5b505afa15801561124a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126e9190613168565b90506000600267ffffffffffffffff8111156112b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156112e15781602001602082028036833780820191505090505b50905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600081518110611333577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073ca3fe04c7ee111f0bbb02c328c699226acf9fd33816001815181106113bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073d9e1ce17f2641f24ae83637ab66a2cca9c378b9f73ffffffffffffffffffffffffffffffffffffffff166338ed17398360008430426040518663ffffffff1660e01b815260040161144c9594939291906137cc565b600060405180830381600087803b15801561146657600080fd5b505af115801561147a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906114a391906130d5565b505050565b6040518060400160405280600581526020017f785345454e00000000000000000000000000000000000000000000000000000081525081565b73d9e1ce17f2641f24ae83637ab66a2cca9c378b9f81565b600073ca3fe04c7ee111f0bbb02c328c699226acf9fd3373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161154891906134b4565b60206040518083038186803b15801561156057600080fd5b505afa158015611574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115989190613168565b90506000805490506203f480426115af9190613995565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008114806116015750600082145b156116155761161033846124e5565b61163c565b60008282856116249190613ac9565b61162e9190613a67565b905061163a33826124e5565b505b73ca3fe04c7ee111f0bbb02c328c699226acf9fd3373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b815260040161168d939291906134cf565b602060405180830381600087803b1580156116a757600080fd5b505af11580156116bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116df9190613116565b50505050565b60008061170a836040518060600160405280602681526020016141bc60269139611c1e565b9050611717338583611cf6565b600191505092915050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161161178c576000611811565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001836117da9190613b57565b63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b915050919050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280601381526020017f5365656e4861757320476f7665726e616e63650000000000000000000000000081525080519060200120611881612675565b3060405160200161189594939291906135aa565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8888886040516020016118e69493929190613565565b6040516020818303038152906040528051906020012090506000828260405160200161191392919061347d565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161195094939291906135ef565b6020604051602081039080840390855afa158015611972573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e590613691565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611a3e90613cf2565b919050558914611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a906136f1565b60405180910390fd5b87421115611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd906136b1565b60405180910390fd5b611ad0818b6120e0565b50505050505050505050565b73ca3fe04c7ee111f0bbb02c328c699226acf9fd3381565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6004602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060000160049054906101000a90046bffffffffffffffffffffffff16905082565b60006c0100000000000000000000000083108290611c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c69919061364f565b60405180910390fd5b5082905092915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd7919061364f565b60405180910390fd5b508284611ced9190613b8b565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d90613751565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd90613711565b60405180910390fd5b611ddf83612682565b611e59600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff168260405180606001604052806036815260200161416160369139611c7c565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550611f40600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff168260405180606001604052806030815260200161423e60309139612707565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161200a9190613885565b60405180910390a36120db600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612786565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16905082600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a461229a828483612786565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230790613771565b60405180910390fd5b61231982612682565b806bffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff1610156123cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c690613671565b60405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a90046bffffffffffffffffffffffff166124359190613b8b565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550806000808282546124749190613b23565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124d991906137b1565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254c90613791565b60405180910390fd5b61255f6000612682565b806000808282546125709190613995565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a90046bffffffffffffffffffffffff166125dd9190613a25565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161266991906137b1565b60405180910390a35050565b6000804690508091505090565b42600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fb90613731565b60405180910390fd5b50565b60008083856127169190613a25565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff161015839061277a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612771919061364f565b60405180910390fd5b50809150509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127d057506000816bffffffffffffffffffffffff16115b15612a8e57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612931576000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116128735760006128f8565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846128c19190613b57565b63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b9050600061291f828560405180606001604052806028815260200161421660289139611c7c565b905061292d86848484612a93565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a8d576000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116129cf576000612a54565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184612a1d9190613b57565b63ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b90506000612a7b82856040518060600160405280602781526020016142ab60279139612707565b9050612a8985848484612a93565b5050505b5b505050565b6000612ab7436040518060600160405280603481526020016141e260349139612da1565b905060008463ffffffff16118015612b5557508063ffffffff16600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187612b1f9190613b57565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b15612bf95781600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187612ba99190613b57565b63ffffffff1663ffffffff16815260200190815260200160002060000160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550612d4a565b60405180604001604052808263ffffffff168152602001836bffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050600184612cec91906139eb565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612d929291906138bb565b60405180910390a25050505050565b600064010000000083108290612ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de4919061364f565b60405180910390fd5b5082905092915050565b6000612e0a612e0584613909565b6138e4565b90508083825260208201905082856020860282011115612e2957600080fd5b60005b85811015612e595781612e3f8882612ee1565b845260208401935060208301925050600181019050612e2c565b5050509392505050565b600081359050612e72816140d6565b92915050565b600082601f830112612e8957600080fd5b8151612e99848260208601612df7565b91505092915050565b600081519050612eb1816140ed565b92915050565b600081359050612ec681614104565b92915050565b600081359050612edb8161411b565b92915050565b600081519050612ef08161411b565b92915050565b600081359050612f0581614132565b92915050565b600081359050612f1a81614149565b92915050565b600060208284031215612f3257600080fd5b6000612f4084828501612e63565b91505092915050565b60008060408385031215612f5c57600080fd5b6000612f6a85828601612e63565b9250506020612f7b85828601612e63565b9150509250929050565b600080600060608486031215612f9a57600080fd5b6000612fa886828701612e63565b9350506020612fb986828701612e63565b9250506040612fca86828701612ecc565b9150509250925092565b60008060408385031215612fe757600080fd5b6000612ff585828601612e63565b925050602061300685828601612ecc565b9150509250929050565b60008060008060008060c0878903121561302957600080fd5b600061303789828a01612e63565b965050602061304889828a01612ecc565b955050604061305989828a01612ecc565b945050606061306a89828a01612f0b565b935050608061307b89828a01612eb7565b92505060a061308c89828a01612eb7565b9150509295509295509295565b600080604083850312156130ac57600080fd5b60006130ba85828601612e63565b92505060206130cb85828601612ef6565b9150509250929050565b6000602082840312156130e757600080fd5b600082015167ffffffffffffffff81111561310157600080fd5b61310d84828501612e78565b91505092915050565b60006020828403121561312857600080fd5b600061313684828501612ea2565b91505092915050565b60006020828403121561315157600080fd5b600061315f84828501612ecc565b91505092915050565b60006020828403121561317a57600080fd5b600061318884828501612ee1565b91505092915050565b600061319d83836131a9565b60208301905092915050565b6131b281613bbf565b82525050565b6131c181613bbf565b82525050565b60006131d282613945565b6131dc8185613968565b93506131e783613935565b8060005b838110156132185781516131ff8882613191565b975061320a8361395b565b9250506001810190506131eb565b5085935050505092915050565b61322e81613bd1565b82525050565b61323d81613bdd565b82525050565b61325461324f82613bdd565b613d3b565b82525050565b61326381613c46565b82525050565b61327281613c6a565b82525050565b600061328382613950565b61328d8185613979565b935061329d818560208601613c8e565b6132a681613dd2565b840191505092915050565b60006132be602283613979565b91506132c982613de3565b604082019050919050565b60006132e1602683613979565b91506132ec82613e32565b604082019050919050565b6000613304602683613979565b915061330f82613e81565b604082019050919050565b600061332760028361398a565b915061333282613ed0565b600282019050919050565b600061334a602783613979565b915061335582613ef9565b604082019050919050565b600061336d602283613979565b915061337882613f48565b604082019050919050565b6000613390603a83613979565b915061339b82613f97565b604082019050919050565b60006133b3601f83613979565b91506133be82613fe6565b602082019050919050565b60006133d6603c83613979565b91506133e18261400f565b604082019050919050565b60006133f9602183613979565b91506134048261405e565b604082019050919050565b600061341c601f83613979565b9150613427826140ad565b602082019050919050565b61343b81613c07565b82525050565b61344a81613c11565b82525050565b61345981613c21565b82525050565b61346881613c7c565b82525050565b61347781613c2e565b82525050565b60006134888261331a565b91506134948285613243565b6020820191506134a48284613243565b6020820191508190509392505050565b60006020820190506134c960008301846131b8565b92915050565b60006060820190506134e460008301866131b8565b6134f160208301856131b8565b6134fe6040830184613432565b949350505050565b600060408201905061351b60008301856131b8565b6135286020830184613432565b9392505050565b60006020820190506135446000830184613225565b92915050565b600060208201905061355f6000830184613234565b92915050565b600060808201905061357a6000830187613234565b61358760208301866131b8565b6135946040830185613432565b6135a16060830184613432565b95945050505050565b60006080820190506135bf6000830187613234565b6135cc6020830186613234565b6135d96040830185613432565b6135e660608301846131b8565b95945050505050565b60006080820190506136046000830187613234565b6136116020830186613450565b61361e6040830185613234565b61362b6060830184613234565b95945050505050565b6000602082019050613649600083018461325a565b92915050565b600060208201905081810360008301526136698184613278565b905092915050565b6000602082019050818103600083015261368a816132b1565b9050919050565b600060208201905081810360008301526136aa816132d4565b9050919050565b600060208201905081810360008301526136ca816132f7565b9050919050565b600060208201905081810360008301526136ea8161333d565b9050919050565b6000602082019050818103600083015261370a81613360565b9050919050565b6000602082019050818103600083015261372a81613383565b9050919050565b6000602082019050818103600083015261374a816133a6565b9050919050565b6000602082019050818103600083015261376a816133c9565b9050919050565b6000602082019050818103600083015261378a816133ec565b9050919050565b600060208201905081810360008301526137aa8161340f565b9050919050565b60006020820190506137c66000830184613432565b92915050565b600060a0820190506137e16000830188613432565b6137ee6020830187613269565b818103604083015261380081866131c7565b905061380f60608301856131b8565b61381c6080830184613432565b9695505050505050565b600060208201905061383b6000830184613441565b92915050565b60006040820190506138566000830185613441565b613863602083018461346e565b9392505050565b600060208201905061387f6000830184613450565b92915050565b600060208201905061389a600083018461345f565b92915050565b60006020820190506138b5600083018461346e565b92915050565b60006040820190506138d0600083018561345f565b6138dd602083018461345f565b9392505050565b60006138ee6138ff565b90506138fa8282613cc1565b919050565b6000604051905090565b600067ffffffffffffffff82111561392457613923613da3565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006139a082613c07565b91506139ab83613c07565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139e0576139df613d45565b5b828201905092915050565b60006139f682613c11565b9150613a0183613c11565b92508263ffffffff03821115613a1a57613a19613d45565b5b828201905092915050565b6000613a3082613c2e565b9150613a3b83613c2e565b9250826bffffffffffffffffffffffff03821115613a5c57613a5b613d45565b5b828201905092915050565b6000613a7282613c07565b9150613a7d83613c07565b925082613a8d57613a8c613d74565b5b828204905092915050565b6000613aa382613c11565b9150613aae83613c11565b925082613abe57613abd613d74565b5b828204905092915050565b6000613ad482613c07565b9150613adf83613c07565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b1857613b17613d45565b5b828202905092915050565b6000613b2e82613c07565b9150613b3983613c07565b925082821015613b4c57613b4b613d45565b5b828203905092915050565b6000613b6282613c11565b9150613b6d83613c11565b925082821015613b8057613b7f613d45565b5b828203905092915050565b6000613b9682613c2e565b9150613ba183613c2e565b925082821015613bb457613bb3613d45565b5b828203905092915050565b6000613bca82613be7565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60006bffffffffffffffffffffffff82169050919050565b6000613c5182613c58565b9050919050565b6000613c6382613be7565b9050919050565b6000613c7582613c07565b9050919050565b6000613c8782613c2e565b9050919050565b60005b83811015613cac578082015181840152602081019050613c91565b83811115613cbb576000848401525b50505050565b613cca82613dd2565b810181811067ffffffffffffffff82111715613ce957613ce8613da3565b5b80604052505050565b6000613cfd82613c07565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d3057613d2f613d45565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f436f6d703a3a64656c656761746542795369673a20696e76616c69642073696760008201527f6e61747572650000000000000000000000000000000000000000000000000000602082015250565b7f436f6d703a3a64656c656761746542795369673a207369676e6174757265206560008201527f7870697265640000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f436f6d703a3a6765745072696f72566f7465733a206e6f74207965742064657460008201527f65726d696e656400000000000000000000000000000000000000000000000000602082015250565b7f436f6d703a3a64656c656761746542795369673a20696e76616c6964206e6f6e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f436f6d703a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260008201527f616e7366657220746f20746865207a65726f2061646472657373000000000000602082015250565b7f7472616e736665723a746f6f20736f6f6e206166746572206d696e74696e6700600082015250565b7f436f6d703a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260008201527f616e736665722066726f6d20746865207a65726f206164647265737300000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6140df81613bbf565b81146140ea57600080fd5b50565b6140f681613bd1565b811461410157600080fd5b50565b61410d81613bdd565b811461411857600080fd5b50565b61412481613c07565b811461412f57600080fd5b50565b61413b81613c11565b811461414657600080fd5b50565b61415281613c21565b811461415d57600080fd5b5056fe436f6d703a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365436f6d703a3a617070726f76653a20616d6f756e7420657863656564732039362062697473436f6d703a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473436f6d703a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473436f6d703a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773436f6d703a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773436f6d703a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365436f6d703a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773a2646970667358221220158ffbe380f6baef2174aef1b3e5e53f4705f75083f8966d20c9e069e876211664736f6c63430008030033

Deployed Bytecode Sourcemap

16356:2022:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2861:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5907:434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3119:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3884:122;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7464:678;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3075:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16394:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3334:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9048:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17625:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3762:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6544:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11239:1218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4298:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17879:457;;;;;;;;;;;;;:::i;:::-;;2973:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16474:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17073:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6916:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10586:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9584:801;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16559:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5293:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4100:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3623:70;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;2861:51;;;;;;;;;;;;;;;;;;;:::o;5907:434::-;5975:4;5992:13;6033:17;6020:9;:30;6016:188;;;6076:16;6067:25;;6016:188;;;6134:58;6141:9;6134:58;;;;;;;;;;;;;;;;;:6;:58::i;:::-;6125:67;;6016:188;6250:6;6216:10;:22;6227:10;6216:22;;;;;;;;;;;;;;;:31;6239:7;6216:31;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;6295:7;6274:37;;6283:10;6274:37;;;6304:6;6274:37;;;;;;:::i;:::-;;;;;;;;6329:4;6322:11;;;5907:434;;;;:::o;3119:23::-;;;;:::o;3884:122::-;3926:80;3884:122;:::o;7464:678::-;7546:4;7563:15;7581:10;7563:28;;7602:23;7628:10;:15;7639:3;7628:15;;;;;;;;;;;;;;;:24;7644:7;7628:24;;;;;;;;;;;;;;;;;;;;;;;;;7602:50;;7663:13;7679:58;7686:9;7679:58;;;;;;;;;;;;;;;;;:6;:58::i;:::-;7663:74;;7765:3;7754:14;;:7;:14;;;;:54;;;;;7792:16;7772:36;;:16;:36;;;;7754:54;7750:317;;;7825:19;7847:96;7853:16;7871:6;7847:96;;;;;;;;;;;;;;;;;:5;:96::i;:::-;7825:118;;7985:12;7958:10;:15;7969:3;7958:15;;;;;;;;;;;;;;;:24;7974:7;7958:24;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;8033:7;8019:36;;8028:3;8019:36;;;8042:12;8019:36;;;;;;:::i;:::-;;;;;;;;7750:317;;8079:33;8095:3;8100;8105:6;8079:15;:33::i;:::-;8130:4;8123:11;;;;;7464:678;;;;;:::o;3075:35::-;3108:2;3075:35;:::o;16394:73::-;16425:42;16394:73;:::o;3334:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;9048:102::-;9110:32;9120:10;9132:9;9110;:32::i;:::-;9048:102;:::o;17625:246::-;17674:19;17696:11;;17674:33;;17718:12;17774:11;16596:42;17742:14;;;17765:4;17742:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17733:6;:38;;;;:::i;:::-;:52;;;;:::i;:::-;17718:67;;17796:25;17802:10;17814:6;17796:5;:25::i;:::-;16596:42;17832:13;;;17846:10;17858:4;17832:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17625:246;;;:::o;3762:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;6544:108::-;6603:4;6627:8;:17;6636:7;6627:17;;;;;;;;;;;;;;;;;;;;;;;;;6620:24;;;;6544:108;;;:::o;11239:1218::-;11318:6;11359:12;11345:11;:26;11337:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;11428:19;11450:14;:23;11465:7;11450:23;;;;;;;;;;;;;;;;;;;;;;;;;11428:45;;11504:1;11488:12;:17;;;11484:58;;;11529:1;11522:8;;;;;11484:58;11654:11;11602;:20;11614:7;11602:20;;;;;;;;;;;;;;;:38;11638:1;11623:12;:16;;;;:::i;:::-;11602:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;11598:147;;11689:11;:20;11701:7;11689:20;;;;;;;;;;;;;;;:38;11725:1;11710:12;:16;;;;:::i;:::-;11689:38;;;;;;;;;;;;;;;:44;;;;;;;;;;;;11682:51;;;;;11598:147;11842:11;11806;:20;11818:7;11806:20;;;;;;;;;;;;;;;:23;11827:1;11806:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;11802:88;;;11877:1;11870:8;;;;;11802:88;11902:12;11929;11959:1;11944:12;:16;;;;:::i;:::-;11929:31;;11971:428;11986:5;11978:13;;:5;:13;;;11971:428;;;12008:13;12050:1;12041:5;12033;:13;;;;:::i;:::-;12032:19;;;;:::i;:::-;12024:5;:27;;;;:::i;:::-;12008:43;;12093:20;12116:11;:20;12128:7;12116:20;;;;;;;;;;;;;;;:28;12137:6;12116:28;;;;;;;;;;;;;;;12093:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12179:11;12163:2;:12;;;:27;;;12159:229;;;12218:2;:8;;;12211:15;;;;;;;;;12159:229;12267:11;12252:2;:12;;;:26;;;12248:140;;;12307:6;12299:14;;12248:140;;;12371:1;12362:6;:10;;;;:::i;:::-;12354:18;;12248:140;11971:428;;;;;12416:11;:20;12428:7;12416:20;;;;;;;;;;;;;;;:27;12437:5;12416:27;;;;;;;;;;;;;;;:33;;;;;;;;;;;;12409:40;;;;;11239:1218;;;;;:::o;4298:39::-;;;;;;;;;;;;;;;;;:::o;17879:457::-;16425:42;17913:19;;;17940:21;17913:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17975:16;16425:42;17994:22;;;18025:4;17994:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17975:56;;18044:21;18082:1;18068:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18044:40;;16425:42;18095:4;18100:1;18095:7;;;;;;;;;;;;;;;;;;;;;:14;;;;;;;;;;;16596:42;18120:4;18125:1;18120:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;16510:42;18156:45;;;18216:8;18239:1;18255:4;18282;18302:15;18156:172;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17879:457;;:::o;2973:39::-;;;;;;;;;;;;;;;;;;;:::o;16474:78::-;16510:42;16474:78;:::o;17073:497::-;17123:17;16596:42;17143:14;;;17166:4;17143:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17123:49;;17183:19;17205:11;;17183:33;;17268:6;17250:15;:24;;;;:::i;:::-;17229:6;:18;17236:10;17229:18;;;;;;;;;;;;;;;:45;;;;17306:1;17291:11;:16;:34;;;;17324:1;17311:9;:14;17291:34;17287:212;;;17342:26;17348:10;17360:7;17342:5;:26::i;:::-;17287:212;;;17401:12;17440:9;17426:11;17416:7;:21;;;;:::i;:::-;:33;;;;:::i;:::-;17401:48;;17464:23;17470:10;17482:4;17464:5;:23::i;:::-;17287:212;;16596:42;17509:17;;;17527:10;17547:4;17554:7;17509:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17073:497;;;:::o;6916:238::-;6981:4;6998:13;7014:59;7021:9;7014:59;;;;;;;;;;;;;;;;;:6;:59::i;:::-;6998:75;;7084:40;7100:10;7112:3;7117:6;7084:15;:40::i;:::-;7142:4;7135:11;;;6916:238;;;;:::o;10586:222::-;10651:6;10670:19;10692:14;:23;10707:7;10692:23;;;;;;;;;;;;;;;;;;;;;;;;;10670:45;;10748:1;10733:12;:16;;;:67;;10799:1;10733:67;;;10752:11;:20;10764:7;10752:20;;;;;;;;;;;;;;;:38;10788:1;10773:12;:16;;;;:::i;:::-;10752:38;;;;;;;;;;;;;;;:44;;;;;;;;;;;;10733:67;10726:74;;;10586:222;;;:::o;9584:801::-;9700:23;3926:80;9780:4;;;;;;;;;;;;;;;;;9764:22;;;;;;9788:12;:10;:12::i;:::-;9810:4;9736:80;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9726:91;;;;;;9700:117;;9828:18;4146:71;9891:9;9902:5;9909:6;9859:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9849:68;;;;;;9828:89;;9928:14;9984:15;10001:10;9955:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9945:68;;;;;;9928:85;;10024:17;10044:26;10054:6;10062:1;10065;10068;10044:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10024:46;;10110:1;10089:23;;:9;:23;;;;10081:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;10183:6;:17;10190:9;10183:17;;;;;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;10174:5;:28;10166:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;10279:6;10260:15;:25;;10252:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;10346:31;10356:9;10367;10346;:31::i;:::-;10339:38;;;;9584:801;;;;;;:::o;16559:80::-;16596:42;16559:80;:::o;5293:136::-;5369:4;5393:10;:19;5404:7;5393:19;;;;;;;;;;;;;;;:28;5413:7;5393:28;;;;;;;;;;;;;;;;;;;;;;;;;5386:35;;;;5293:136;;;;:::o;4100:117::-;4146:71;4100:117;:::o;3623:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15261:161::-;15336:6;15367:5;15363:1;:9;15374:12;15355:32;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;15412:1;15398:16;;15261:161;;;;:::o;15626:165::-;15712:6;15744:1;15739:6;;:1;:6;;;;15747:12;15731:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;15782:1;15778;:5;;;;:::i;:::-;15771:12;;15626:165;;;;;:::o;12848:652::-;12957:1;12942:17;;:3;:17;;;;12934:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;13058:1;13043:17;;:3;:17;;;;13035:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;13136:25;13157:3;13136:20;:25::i;:::-;13190:86;13196:8;:13;13205:3;13196:13;;;;;;;;;;;;;;;;;;;;;;;;;13211:6;13190:86;;;;;;;;;;;;;;;;;:5;:86::i;:::-;13174:8;:13;13183:3;13174:13;;;;;;;;;;;;;;;;:102;;;;;;;;;;;;;;;;;;13303:80;13309:8;:13;13318:3;13309:13;;;;;;;;;;;;;;;;;;;;;;;;;13324:6;13303:80;;;;;;;;;;;;;;;;;:5;:80::i;:::-;13287:8;:13;13296:3;13287:13;;;;;;;;;;;;;;;;:96;;;;;;;;;;;;;;;;;;13413:3;13399:26;;13408:3;13399:26;;;13418:6;13399:26;;;;;;:::i;:::-;;;;;;;;13438:54;13453:9;:14;13463:3;13453:14;;;;;;;;;;;;;;;;;;;;;;;;;13469:9;:14;13479:3;13469:14;;;;;;;;;;;;;;;;;;;;;;;;;13485:6;13438:14;:54::i;:::-;12848:652;;;:::o;12465:375::-;12542:23;12568:9;:20;12578:9;12568:20;;;;;;;;;;;;;;;;;;;;;;;;;12542:46;;12599:23;12625:8;:19;12634:9;12625:19;;;;;;;;;;;;;;;;;;;;;;;;;12599:45;;12678:9;12655;:20;12665:9;12655:20;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;12749:9;12705:54;;12732:15;12705:54;;12721:9;12705:54;;;;;;;;;;;;12772:60;12787:15;12804:9;12815:16;12772:14;:60::i;:::-;12465:375;;;;:::o;8482:418::-;8582:1;8563:21;;:7;:21;;;;8555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8635:29;8656:7;8635:20;:29::i;:::-;8713:6;8685:35;;:8;:17;8694:7;8685:17;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;;8677:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;8798:6;8770:8;:17;8779:7;8770:17;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8831:6;8816:11;;:21;;;;;;;:::i;:::-;;;;;;;;8881:1;8855:37;;8864:7;8855:37;;;8885:6;8855:37;;;;;;:::i;:::-;;;;;;;;8482:418;;:::o;8150:324::-;8250:1;8231:21;;:7;:21;;;;8223:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;8301:32;8330:1;8301:20;:32::i;:::-;8361:6;8346:11;;:21;;;;;;;:::i;:::-;;;;;;;;8406:6;8378:8;:17;8387:7;8378:17;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8450:7;8429:37;;8446:1;8429:37;;;8459:6;8429:37;;;;;;:::i;:::-;;;;;;;;8150:324;;:::o;15799:153::-;15844:4;15861:15;15909:9;15898:20;;15937:7;15930:14;;;15799:153;:::o;16846:161::-;16948:15;16932:6;:12;16939:4;16932:12;;;;;;;;;;;;;;;;:31;;16924:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;16846:161;:::o;15430:188::-;15516:6;15535:8;15550:1;15546;:5;;;;:::i;:::-;15535:16;;15575:1;15570:6;;:1;:6;;;;15578:12;15562:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;15609:1;15602:8;;;15430:188;;;;;:::o;13508:939::-;13613:6;13603:16;;:6;:16;;;;:30;;;;;13632:1;13623:6;:10;;;13603:30;13599:841;;;13672:1;13654:20;;:6;:20;;;13650:382;;13695:16;13714:14;:22;13729:6;13714:22;;;;;;;;;;;;;;;;;;;;;;;;;13695:41;;13755:16;13786:1;13774:9;:13;;;:60;;13833:1;13774:60;;;13790:11;:19;13802:6;13790:19;;;;;;;;;;;;;;;:34;13822:1;13810:9;:13;;;;:::i;:::-;13790:34;;;;;;;;;;;;;;;:40;;;;;;;;;;;;13774:60;13755:79;;13853:16;13872:68;13878:9;13889:6;13872:68;;;;;;;;;;;;;;;;;:5;:68::i;:::-;13853:87;;13959:57;13976:6;13984:9;13995;14006;13959:16;:57::i;:::-;13650:382;;;;14070:1;14052:20;;:6;:20;;;14048:381;;14093:16;14112:14;:22;14127:6;14112:22;;;;;;;;;;;;;;;;;;;;;;;;;14093:41;;14153:16;14184:1;14172:9;:13;;;:60;;14231:1;14172:60;;;14188:11;:19;14200:6;14188:19;;;;;;;;;;;;;;;:34;14220:1;14208:9;:13;;;;:::i;:::-;14188:34;;;;;;;;;;;;;;;:40;;;;;;;;;;;;14172:60;14153:79;;14251:16;14270:67;14276:9;14287:6;14270:67;;;;;;;;;;;;;;;;;:5;:67::i;:::-;14251:86;;14356:57;14373:6;14381:9;14392;14403;14356:16;:57::i;:::-;14048:381;;;;13599:841;13508:939;;;:::o;14455:629::-;14573:18;14594:76;14601:12;14594:76;;;;;;;;;;;;;;;;;:6;:76::i;:::-;14573:97;;14700:1;14685:12;:16;;;:85;;;;;14759:11;14705:65;;:11;:22;14717:9;14705:22;;;;;;;;;;;;;;;:40;14743:1;14728:12;:16;;;;:::i;:::-;14705:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;14685:85;14681:329;;;14834:8;14785:11;:22;14797:9;14785:22;;;;;;;;;;;;;;;:40;14823:1;14808:12;:16;;;;:::i;:::-;14785:40;;;;;;;;;;;;;;;:46;;;:57;;;;;;;;;;;;;;;;;;14681:329;;;14910:33;;;;;;;;14921:11;14910:33;;;;;;14934:8;14910:33;;;;;14871:11;:22;14883:9;14871:22;;;;;;;;;;;;;;;:36;14894:12;14871:36;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14999:1;14984:12;:16;;;;:::i;:::-;14956:14;:25;14971:9;14956:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;14681:329;15046:9;15025:51;;;15057:8;15067;15025:51;;;;;;;:::i;:::-;;;;;;;;14455:629;;;;;:::o;15092:161::-;15167:6;15198:5;15194:1;:9;15205:12;15186:32;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;15243:1;15229:16;;15092:161;;;;:::o;24:645:1:-;;156:81;172:64;229:6;172:64;:::i;:::-;156:81;:::i;:::-;147:90;;257:5;285:6;278:5;271:21;311:4;304:5;300:16;293:23;;336:6;386:3;378:4;370:6;366:17;361:3;357:27;354:36;351:2;;;403:1;400;393:12;351:2;431:1;416:247;441:6;438:1;435:13;416:247;;;508:3;536:48;580:3;568:10;536:48;:::i;:::-;531:3;524:61;614:4;609:3;605:14;598:21;;648:4;643:3;639:14;632:21;;476:187;463:1;460;456:9;451:14;;416:247;;;420:14;137:532;;;;;;;:::o;675:139::-;;759:6;746:20;737:29;;775:33;802:5;775:33;:::i;:::-;727:87;;;;:::o;837:318::-;;968:3;961:4;953:6;949:17;945:27;935:2;;986:1;983;976:12;935:2;1019:6;1013:13;1044:105;1145:3;1137:6;1130:4;1122:6;1118:17;1044:105;:::i;:::-;1035:114;;925:230;;;;;:::o;1161:137::-;;1246:6;1240:13;1231:22;;1262:30;1286:5;1262:30;:::i;:::-;1221:77;;;;:::o;1304:139::-;;1388:6;1375:20;1366:29;;1404:33;1431:5;1404:33;:::i;:::-;1356:87;;;;:::o;1449:139::-;;1533:6;1520:20;1511:29;;1549:33;1576:5;1549:33;:::i;:::-;1501:87;;;;:::o;1594:143::-;;1682:6;1676:13;1667:22;;1698:33;1725:5;1698:33;:::i;:::-;1657:80;;;;:::o;1743:137::-;;1826:6;1813:20;1804:29;;1842:32;1868:5;1842:32;:::i;:::-;1794:86;;;;:::o;1886:135::-;;1968:6;1955:20;1946:29;;1984:31;2009:5;1984:31;:::i;:::-;1936:85;;;;:::o;2027:262::-;;2135:2;2123:9;2114:7;2110:23;2106:32;2103:2;;;2151:1;2148;2141:12;2103:2;2194:1;2219:53;2264:7;2255:6;2244:9;2240:22;2219:53;:::i;:::-;2209:63;;2165:117;2093:196;;;;:::o;2295:407::-;;;2420:2;2408:9;2399:7;2395:23;2391:32;2388:2;;;2436:1;2433;2426:12;2388:2;2479:1;2504:53;2549:7;2540:6;2529:9;2525:22;2504:53;:::i;:::-;2494:63;;2450:117;2606:2;2632:53;2677:7;2668:6;2657:9;2653:22;2632:53;:::i;:::-;2622:63;;2577:118;2378:324;;;;;:::o;2708:552::-;;;;2850:2;2838:9;2829:7;2825:23;2821:32;2818:2;;;2866:1;2863;2856:12;2818:2;2909:1;2934:53;2979:7;2970:6;2959:9;2955:22;2934:53;:::i;:::-;2924:63;;2880:117;3036:2;3062:53;3107:7;3098:6;3087:9;3083:22;3062:53;:::i;:::-;3052:63;;3007:118;3164:2;3190:53;3235:7;3226:6;3215:9;3211:22;3190:53;:::i;:::-;3180:63;;3135:118;2808:452;;;;;:::o;3266:407::-;;;3391:2;3379:9;3370:7;3366:23;3362:32;3359:2;;;3407:1;3404;3397:12;3359:2;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3577:2;3603:53;3648:7;3639:6;3628:9;3624:22;3603:53;:::i;:::-;3593:63;;3548:118;3349:324;;;;;:::o;3679:986::-;;;;;;;3870:3;3858:9;3849:7;3845:23;3841:33;3838:2;;;3887:1;3884;3877:12;3838:2;3930:1;3955:53;4000:7;3991:6;3980:9;3976:22;3955:53;:::i;:::-;3945:63;;3901:117;4057:2;4083:53;4128:7;4119:6;4108:9;4104:22;4083:53;:::i;:::-;4073:63;;4028:118;4185:2;4211:53;4256:7;4247:6;4236:9;4232:22;4211:53;:::i;:::-;4201:63;;4156:118;4313:2;4339:51;4382:7;4373:6;4362:9;4358:22;4339:51;:::i;:::-;4329:61;;4284:116;4439:3;4466:53;4511:7;4502:6;4491:9;4487:22;4466:53;:::i;:::-;4456:63;;4410:119;4568:3;4595:53;4640:7;4631:6;4620:9;4616:22;4595:53;:::i;:::-;4585:63;;4539:119;3828:837;;;;;;;;:::o;4671:405::-;;;4795:2;4783:9;4774:7;4770:23;4766:32;4763:2;;;4811:1;4808;4801:12;4763:2;4854:1;4879:53;4924:7;4915:6;4904:9;4900:22;4879:53;:::i;:::-;4869:63;;4825:117;4981:2;5007:52;5051:7;5042:6;5031:9;5027:22;5007:52;:::i;:::-;4997:62;;4952:117;4753:323;;;;;:::o;5082:420::-;;5226:2;5214:9;5205:7;5201:23;5197:32;5194:2;;;5242:1;5239;5232:12;5194:2;5306:1;5295:9;5291:17;5285:24;5336:18;5328:6;5325:30;5322:2;;;5368:1;5365;5358:12;5322:2;5396:89;5477:7;5468:6;5457:9;5453:22;5396:89;:::i;:::-;5386:99;;5256:239;5184:318;;;;:::o;5508:278::-;;5624:2;5612:9;5603:7;5599:23;5595:32;5592:2;;;5640:1;5637;5630:12;5592:2;5683:1;5708:61;5761:7;5752:6;5741:9;5737:22;5708:61;:::i;:::-;5698:71;;5654:125;5582:204;;;;:::o;5792:262::-;;5900:2;5888:9;5879:7;5875:23;5871:32;5868:2;;;5916:1;5913;5906:12;5868:2;5959:1;5984:53;6029:7;6020:6;6009:9;6005:22;5984:53;:::i;:::-;5974:63;;5930:117;5858:196;;;;:::o;6060:284::-;;6179:2;6167:9;6158:7;6154:23;6150:32;6147:2;;;6195:1;6192;6185:12;6147:2;6238:1;6263:64;6319:7;6310:6;6299:9;6295:22;6263:64;:::i;:::-;6253:74;;6209:128;6137:207;;;;:::o;6350:179::-;;6440:46;6482:3;6474:6;6440:46;:::i;:::-;6518:4;6513:3;6509:14;6495:28;;6430:99;;;;:::o;6535:108::-;6612:24;6630:5;6612:24;:::i;:::-;6607:3;6600:37;6590:53;;:::o;6649:118::-;6736:24;6754:5;6736:24;:::i;:::-;6731:3;6724:37;6714:53;;:::o;6803:732::-;;6951:54;6999:5;6951:54;:::i;:::-;7021:86;7100:6;7095:3;7021:86;:::i;:::-;7014:93;;7131:56;7181:5;7131:56;:::i;:::-;7210:7;7241:1;7226:284;7251:6;7248:1;7245:13;7226:284;;;7327:6;7321:13;7354:63;7413:3;7398:13;7354:63;:::i;:::-;7347:70;;7440:60;7493:6;7440:60;:::i;:::-;7430:70;;7286:224;7273:1;7270;7266:9;7261:14;;7226:284;;;7230:14;7526:3;7519:10;;6927:608;;;;;;;:::o;7541:109::-;7622:21;7637:5;7622:21;:::i;:::-;7617:3;7610:34;7600:50;;:::o;7656:118::-;7743:24;7761:5;7743:24;:::i;:::-;7738:3;7731:37;7721:53;;:::o;7780:157::-;7885:45;7905:24;7923:5;7905:24;:::i;:::-;7885:45;:::i;:::-;7880:3;7873:58;7863:74;;:::o;7943:157::-;8043:50;8087:5;8043:50;:::i;:::-;8038:3;8031:63;8021:79;;:::o;8106:147::-;8201:45;8240:5;8201:45;:::i;:::-;8196:3;8189:58;8179:74;;:::o;8259:364::-;;8375:39;8408:5;8375:39;:::i;:::-;8430:71;8494:6;8489:3;8430:71;:::i;:::-;8423:78;;8510:52;8555:6;8550:3;8543:4;8536:5;8532:16;8510:52;:::i;:::-;8587:29;8609:6;8587:29;:::i;:::-;8582:3;8578:39;8571:46;;8351:272;;;;;:::o;8629:366::-;;8792:67;8856:2;8851:3;8792:67;:::i;:::-;8785:74;;8868:93;8957:3;8868:93;:::i;:::-;8986:2;8981:3;8977:12;8970:19;;8775:220;;;:::o;9001:366::-;;9164:67;9228:2;9223:3;9164:67;:::i;:::-;9157:74;;9240:93;9329:3;9240:93;:::i;:::-;9358:2;9353:3;9349:12;9342:19;;9147:220;;;:::o;9373:366::-;;9536:67;9600:2;9595:3;9536:67;:::i;:::-;9529:74;;9612:93;9701:3;9612:93;:::i;:::-;9730:2;9725:3;9721:12;9714:19;;9519:220;;;:::o;9745:400::-;;9926:84;10008:1;10003:3;9926:84;:::i;:::-;9919:91;;10019:93;10108:3;10019:93;:::i;:::-;10137:1;10132:3;10128:11;10121:18;;9909:236;;;:::o;10151:366::-;;10314:67;10378:2;10373:3;10314:67;:::i;:::-;10307:74;;10390:93;10479:3;10390:93;:::i;:::-;10508:2;10503:3;10499:12;10492:19;;10297:220;;;:::o;10523:366::-;;10686:67;10750:2;10745:3;10686:67;:::i;:::-;10679:74;;10762:93;10851:3;10762:93;:::i;:::-;10880:2;10875:3;10871:12;10864:19;;10669:220;;;:::o;10895:366::-;;11058:67;11122:2;11117:3;11058:67;:::i;:::-;11051:74;;11134:93;11223:3;11134:93;:::i;:::-;11252:2;11247:3;11243:12;11236:19;;11041:220;;;:::o;11267:366::-;;11430:67;11494:2;11489:3;11430:67;:::i;:::-;11423:74;;11506:93;11595:3;11506:93;:::i;:::-;11624:2;11619:3;11615:12;11608:19;;11413:220;;;:::o;11639:366::-;;11802:67;11866:2;11861:3;11802:67;:::i;:::-;11795:74;;11878:93;11967:3;11878:93;:::i;:::-;11996:2;11991:3;11987:12;11980:19;;11785:220;;;:::o;12011:366::-;;12174:67;12238:2;12233:3;12174:67;:::i;:::-;12167:74;;12250:93;12339:3;12250:93;:::i;:::-;12368:2;12363:3;12359:12;12352:19;;12157:220;;;:::o;12383:366::-;;12546:67;12610:2;12605:3;12546:67;:::i;:::-;12539:74;;12622:93;12711:3;12622:93;:::i;:::-;12740:2;12735:3;12731:12;12724:19;;12529:220;;;:::o;12755:118::-;12842:24;12860:5;12842:24;:::i;:::-;12837:3;12830:37;12820:53;;:::o;12879:115::-;12964:23;12981:5;12964:23;:::i;:::-;12959:3;12952:36;12942:52;;:::o;13000:112::-;13083:22;13099:5;13083:22;:::i;:::-;13078:3;13071:35;13061:51;;:::o;13118:129::-;13204:36;13234:5;13204:36;:::i;:::-;13199:3;13192:49;13182:65;;:::o;13253:115::-;13338:23;13355:5;13338:23;:::i;:::-;13333:3;13326:36;13316:52;;:::o;13374:663::-;;13637:148;13781:3;13637:148;:::i;:::-;13630:155;;13795:75;13866:3;13857:6;13795:75;:::i;:::-;13895:2;13890:3;13886:12;13879:19;;13908:75;13979:3;13970:6;13908:75;:::i;:::-;14008:2;14003:3;13999:12;13992:19;;14028:3;14021:10;;13619:418;;;;;:::o;14043:222::-;;14174:2;14163:9;14159:18;14151:26;;14187:71;14255:1;14244:9;14240:17;14231:6;14187:71;:::i;:::-;14141:124;;;;:::o;14271:442::-;;14458:2;14447:9;14443:18;14435:26;;14471:71;14539:1;14528:9;14524:17;14515:6;14471:71;:::i;:::-;14552:72;14620:2;14609:9;14605:18;14596:6;14552:72;:::i;:::-;14634;14702:2;14691:9;14687:18;14678:6;14634:72;:::i;:::-;14425:288;;;;;;:::o;14719:332::-;;14878:2;14867:9;14863:18;14855:26;;14891:71;14959:1;14948:9;14944:17;14935:6;14891:71;:::i;:::-;14972:72;15040:2;15029:9;15025:18;15016:6;14972:72;:::i;:::-;14845:206;;;;;:::o;15057:210::-;;15182:2;15171:9;15167:18;15159:26;;15195:65;15257:1;15246:9;15242:17;15233:6;15195:65;:::i;:::-;15149:118;;;;:::o;15273:222::-;;15404:2;15393:9;15389:18;15381:26;;15417:71;15485:1;15474:9;15470:17;15461:6;15417:71;:::i;:::-;15371:124;;;;:::o;15501:553::-;;15716:3;15705:9;15701:19;15693:27;;15730:71;15798:1;15787:9;15783:17;15774:6;15730:71;:::i;:::-;15811:72;15879:2;15868:9;15864:18;15855:6;15811:72;:::i;:::-;15893;15961:2;15950:9;15946:18;15937:6;15893:72;:::i;:::-;15975;16043:2;16032:9;16028:18;16019:6;15975:72;:::i;:::-;15683:371;;;;;;;:::o;16060:553::-;;16275:3;16264:9;16260:19;16252:27;;16289:71;16357:1;16346:9;16342:17;16333:6;16289:71;:::i;:::-;16370:72;16438:2;16427:9;16423:18;16414:6;16370:72;:::i;:::-;16452;16520:2;16509:9;16505:18;16496:6;16452:72;:::i;:::-;16534;16602:2;16591:9;16587:18;16578:6;16534:72;:::i;:::-;16242:371;;;;;;;:::o;16619:545::-;;16830:3;16819:9;16815:19;16807:27;;16844:71;16912:1;16901:9;16897:17;16888:6;16844:71;:::i;:::-;16925:68;16989:2;16978:9;16974:18;16965:6;16925:68;:::i;:::-;17003:72;17071:2;17060:9;17056:18;17047:6;17003:72;:::i;:::-;17085;17153:2;17142:9;17138:18;17129:6;17085:72;:::i;:::-;16797:367;;;;;;;:::o;17170:248::-;;17314:2;17303:9;17299:18;17291:26;;17327:84;17408:1;17397:9;17393:17;17384:6;17327:84;:::i;:::-;17281:137;;;;:::o;17424:313::-;;17575:2;17564:9;17560:18;17552:26;;17624:9;17618:4;17614:20;17610:1;17599:9;17595:17;17588:47;17652:78;17725:4;17716:6;17652:78;:::i;:::-;17644:86;;17542:195;;;;:::o;17743:419::-;;17947:2;17936:9;17932:18;17924:26;;17996:9;17990:4;17986:20;17982:1;17971:9;17967:17;17960:47;18024:131;18150:4;18024:131;:::i;:::-;18016:139;;17914:248;;;:::o;18168:419::-;;18372:2;18361:9;18357:18;18349:26;;18421:9;18415:4;18411:20;18407:1;18396:9;18392:17;18385:47;18449:131;18575:4;18449:131;:::i;:::-;18441:139;;18339:248;;;:::o;18593:419::-;;18797:2;18786:9;18782:18;18774:26;;18846:9;18840:4;18836:20;18832:1;18821:9;18817:17;18810:47;18874:131;19000:4;18874:131;:::i;:::-;18866:139;;18764:248;;;:::o;19018:419::-;;19222:2;19211:9;19207:18;19199:26;;19271:9;19265:4;19261:20;19257:1;19246:9;19242:17;19235:47;19299:131;19425:4;19299:131;:::i;:::-;19291:139;;19189:248;;;:::o;19443:419::-;;19647:2;19636:9;19632:18;19624:26;;19696:9;19690:4;19686:20;19682:1;19671:9;19667:17;19660:47;19724:131;19850:4;19724:131;:::i;:::-;19716:139;;19614:248;;;:::o;19868:419::-;;20072:2;20061:9;20057:18;20049:26;;20121:9;20115:4;20111:20;20107:1;20096:9;20092:17;20085:47;20149:131;20275:4;20149:131;:::i;:::-;20141:139;;20039:248;;;:::o;20293:419::-;;20497:2;20486:9;20482:18;20474:26;;20546:9;20540:4;20536:20;20532:1;20521:9;20517:17;20510:47;20574:131;20700:4;20574:131;:::i;:::-;20566:139;;20464:248;;;:::o;20718:419::-;;20922:2;20911:9;20907:18;20899:26;;20971:9;20965:4;20961:20;20957:1;20946:9;20942:17;20935:47;20999:131;21125:4;20999:131;:::i;:::-;20991:139;;20889:248;;;:::o;21143:419::-;;21347:2;21336:9;21332:18;21324:26;;21396:9;21390:4;21386:20;21382:1;21371:9;21367:17;21360:47;21424:131;21550:4;21424:131;:::i;:::-;21416:139;;21314:248;;;:::o;21568:419::-;;21772:2;21761:9;21757:18;21749:26;;21821:9;21815:4;21811:20;21807:1;21796:9;21792:17;21785:47;21849:131;21975:4;21849:131;:::i;:::-;21841:139;;21739:248;;;:::o;21993:222::-;;22124:2;22113:9;22109:18;22101:26;;22137:71;22205:1;22194:9;22190:17;22181:6;22137:71;:::i;:::-;22091:124;;;;:::o;22221:831::-;;22522:3;22511:9;22507:19;22499:27;;22536:71;22604:1;22593:9;22589:17;22580:6;22536:71;:::i;:::-;22617:80;22693:2;22682:9;22678:18;22669:6;22617:80;:::i;:::-;22744:9;22738:4;22734:20;22729:2;22718:9;22714:18;22707:48;22772:108;22875:4;22866:6;22772:108;:::i;:::-;22764:116;;22890:72;22958:2;22947:9;22943:18;22934:6;22890:72;:::i;:::-;22972:73;23040:3;23029:9;23025:19;23016:6;22972:73;:::i;:::-;22489:563;;;;;;;;:::o;23058:218::-;;23187:2;23176:9;23172:18;23164:26;;23200:69;23266:1;23255:9;23251:17;23242:6;23200:69;:::i;:::-;23154:122;;;;:::o;23282:324::-;;23437:2;23426:9;23422:18;23414:26;;23450:69;23516:1;23505:9;23501:17;23492:6;23450:69;:::i;:::-;23529:70;23595:2;23584:9;23580:18;23571:6;23529:70;:::i;:::-;23404:202;;;;;:::o;23612:214::-;;23739:2;23728:9;23724:18;23716:26;;23752:67;23816:1;23805:9;23801:17;23792:6;23752:67;:::i;:::-;23706:120;;;;:::o;23832:220::-;;23962:2;23951:9;23947:18;23939:26;;23975:70;24042:1;24031:9;24027:17;24018:6;23975:70;:::i;:::-;23929:123;;;;:::o;24058:218::-;;24187:2;24176:9;24172:18;24164:26;;24200:69;24266:1;24255:9;24251:17;24242:6;24200:69;:::i;:::-;24154:122;;;;:::o;24282:328::-;;24439:2;24428:9;24424:18;24416:26;;24452:70;24519:1;24508:9;24504:17;24495:6;24452:70;:::i;:::-;24532:71;24599:2;24588:9;24584:18;24575:6;24532:71;:::i;:::-;24406:204;;;;;:::o;24616:129::-;;24677:20;;:::i;:::-;24667:30;;24706:33;24734:4;24726:6;24706:33;:::i;:::-;24657:88;;;:::o;24751:75::-;;24817:2;24811:9;24801:19;;24791:35;:::o;24832:311::-;;24999:18;24991:6;24988:30;24985:2;;;25021:18;;:::i;:::-;24985:2;25071:4;25063:6;25059:17;25051:25;;25131:4;25125;25121:15;25113:23;;24914:229;;;:::o;25149:132::-;;25239:3;25231:11;;25269:4;25264:3;25260:14;25252:22;;25221:60;;;:::o;25287:114::-;;25388:5;25382:12;25372:22;;25361:40;;;:::o;25407:99::-;;25493:5;25487:12;25477:22;;25466:40;;;:::o;25512:113::-;;25614:4;25609:3;25605:14;25597:22;;25587:38;;;:::o;25631:184::-;;25764:6;25759:3;25752:19;25804:4;25799:3;25795:14;25780:29;;25742:73;;;;:::o;25821:169::-;;25939:6;25934:3;25927:19;25979:4;25974:3;25970:14;25955:29;;25917:73;;;;:::o;25996:148::-;;26135:3;26120:18;;26110:34;;;;:::o;26150:305::-;;26209:20;26227:1;26209:20;:::i;:::-;26204:25;;26243:20;26261:1;26243:20;:::i;:::-;26238:25;;26397:1;26329:66;26325:74;26322:1;26319:81;26316:2;;;26403:18;;:::i;:::-;26316:2;26447:1;26444;26440:9;26433:16;;26194:261;;;;:::o;26461:246::-;;26519:19;26536:1;26519:19;:::i;:::-;26514:24;;26552:19;26569:1;26552:19;:::i;:::-;26547:24;;26649:1;26637:10;26633:18;26630:1;26627:25;26624:2;;;26655:18;;:::i;:::-;26624:2;26699:1;26696;26692:9;26685:16;;26504:203;;;;:::o;26713:262::-;;26771:19;26788:1;26771:19;:::i;:::-;26766:24;;26804:19;26821:1;26804:19;:::i;:::-;26799:24;;26917:1;26889:26;26885:34;26882:1;26879:41;26876:2;;;26923:18;;:::i;:::-;26876:2;26967:1;26964;26960:9;26953:16;;26756:219;;;;:::o;26981:185::-;;27038:20;27056:1;27038:20;:::i;:::-;27033:25;;27072:20;27090:1;27072:20;:::i;:::-;27067:25;;27111:1;27101:2;;27116:18;;:::i;:::-;27101:2;27158:1;27155;27151:9;27146:14;;27023:143;;;;:::o;27172:182::-;;27228:19;27245:1;27228:19;:::i;:::-;27223:24;;27261:19;27278:1;27261:19;:::i;:::-;27256:24;;27299:1;27289:2;;27304:18;;:::i;:::-;27289:2;27346:1;27343;27339:9;27334:14;;27213:141;;;;:::o;27360:348::-;;27423:20;27441:1;27423:20;:::i;:::-;27418:25;;27457:20;27475:1;27457:20;:::i;:::-;27452:25;;27645:1;27577:66;27573:74;27570:1;27567:81;27562:1;27555:9;27548:17;27544:105;27541:2;;;27652:18;;:::i;:::-;27541:2;27700:1;27697;27693:9;27682:20;;27408:300;;;;:::o;27714:191::-;;27774:20;27792:1;27774:20;:::i;:::-;27769:25;;27808:20;27826:1;27808:20;:::i;:::-;27803:25;;27847:1;27844;27841:8;27838:2;;;27852:18;;:::i;:::-;27838:2;27897:1;27894;27890:9;27882:17;;27759:146;;;;:::o;27911:188::-;;27970:19;27987:1;27970:19;:::i;:::-;27965:24;;28003:19;28020:1;28003:19;:::i;:::-;27998:24;;28041:1;28038;28035:8;28032:2;;;28046:18;;:::i;:::-;28032:2;28091:1;28088;28084:9;28076:17;;27955:144;;;;:::o;28105:188::-;;28164:19;28181:1;28164:19;:::i;:::-;28159:24;;28197:19;28214:1;28197:19;:::i;:::-;28192:24;;28235:1;28232;28229:8;28226:2;;;28240:18;;:::i;:::-;28226:2;28285:1;28282;28278:9;28270:17;;28149:144;;;;:::o;28299:96::-;;28365:24;28383:5;28365:24;:::i;:::-;28354:35;;28344:51;;;:::o;28401:90::-;;28478:5;28471:13;28464:21;28453:32;;28443:48;;;:::o;28497:77::-;;28563:5;28552:16;;28542:32;;;:::o;28580:126::-;;28657:42;28650:5;28646:54;28635:65;;28625:81;;;:::o;28712:77::-;;28778:5;28767:16;;28757:32;;;:::o;28795:93::-;;28871:10;28864:5;28860:22;28849:33;;28839:49;;;:::o;28894:86::-;;28969:4;28962:5;28958:16;28947:27;;28937:43;;;:::o;28986:109::-;;29062:26;29055:5;29051:38;29040:49;;29030:65;;;:::o;29101:152::-;;29197:50;29241:5;29197:50;:::i;:::-;29184:63;;29174:79;;;:::o;29259:126::-;;29355:24;29373:5;29355:24;:::i;:::-;29342:37;;29332:53;;;:::o;29391:121::-;;29482:24;29500:5;29482:24;:::i;:::-;29469:37;;29459:53;;;:::o;29518:111::-;;29600:23;29617:5;29600:23;:::i;:::-;29587:36;;29577:52;;;:::o;29635:307::-;29703:1;29713:113;29727:6;29724:1;29721:13;29713:113;;;29812:1;29807:3;29803:11;29797:18;29793:1;29788:3;29784:11;29777:39;29749:2;29746:1;29742:10;29737:15;;29713:113;;;29844:6;29841:1;29838:13;29835:2;;;29924:1;29915:6;29910:3;29906:16;29899:27;29835:2;29684:258;;;;:::o;29948:281::-;30031:27;30053:4;30031:27;:::i;:::-;30023:6;30019:40;30161:6;30149:10;30146:22;30125:18;30113:10;30110:34;30107:62;30104:2;;;30172:18;;:::i;:::-;30104:2;30212:10;30208:2;30201:22;29991:238;;;:::o;30235:233::-;;30297:24;30315:5;30297:24;:::i;:::-;30288:33;;30343:66;30336:5;30333:77;30330:2;;;30413:18;;:::i;:::-;30330:2;30460:1;30453:5;30449:13;30442:20;;30278:190;;;:::o;30474:79::-;;30542:5;30531:16;;30521:32;;;:::o;30559:180::-;30607:77;30604:1;30597:88;30704:4;30701:1;30694:15;30728:4;30725:1;30718:15;30745:180;30793:77;30790:1;30783:88;30890:4;30887:1;30880:15;30914:4;30911:1;30904:15;30931:180;30979:77;30976:1;30969:88;31076:4;31073:1;31066:15;31100:4;31097:1;31090:15;31117:102;;31209:2;31205:7;31200:2;31193:5;31189:14;31185:28;31175:38;;31165:54;;;:::o;31225:221::-;31365:34;31361:1;31353:6;31349:14;31342:58;31434:4;31429:2;31421:6;31417:15;31410:29;31331:115;:::o;31452:225::-;31592:34;31588:1;31580:6;31576:14;31569:58;31661:8;31656:2;31648:6;31644:15;31637:33;31558:119;:::o;31683:225::-;31823:34;31819:1;31811:6;31807:14;31800:58;31892:8;31887:2;31879:6;31875:15;31868:33;31789:119;:::o;31914:214::-;32054:66;32050:1;32042:6;32038:14;32031:90;32020:108;:::o;32134:226::-;32274:34;32270:1;32262:6;32258:14;32251:58;32343:9;32338:2;32330:6;32326:15;32319:34;32240:120;:::o;32366:221::-;32506:34;32502:1;32494:6;32490:14;32483:58;32575:4;32570:2;32562:6;32558:15;32551:29;32472:115;:::o;32593:245::-;32733:34;32729:1;32721:6;32717:14;32710:58;32802:28;32797:2;32789:6;32785:15;32778:53;32699:139;:::o;32844:181::-;32984:33;32980:1;32972:6;32968:14;32961:57;32950:75;:::o;33031:247::-;33171:34;33167:1;33159:6;33155:14;33148:58;33240:30;33235:2;33227:6;33223:15;33216:55;33137:141;:::o;33284:220::-;33424:34;33420:1;33412:6;33408:14;33401:58;33493:3;33488:2;33480:6;33476:15;33469:28;33390:114;:::o;33510:181::-;33650:33;33646:1;33638:6;33634:14;33627:57;33616:75;:::o;33697:122::-;33770:24;33788:5;33770:24;:::i;:::-;33763:5;33760:35;33750:2;;33809:1;33806;33799:12;33750:2;33740:79;:::o;33825:116::-;33895:21;33910:5;33895:21;:::i;:::-;33888:5;33885:32;33875:2;;33931:1;33928;33921:12;33875:2;33865:76;:::o;33947:122::-;34020:24;34038:5;34020:24;:::i;:::-;34013:5;34010:35;34000:2;;34059:1;34056;34049:12;34000:2;33990:79;:::o;34075:122::-;34148:24;34166:5;34148:24;:::i;:::-;34141:5;34138:35;34128:2;;34187:1;34184;34177:12;34128:2;34118:79;:::o;34203:120::-;34275:23;34292:5;34275:23;:::i;:::-;34268:5;34265:34;34255:2;;34313:1;34310;34303:12;34255:2;34245:78;:::o;34329:118::-;34400:22;34416:5;34400:22;:::i;:::-;34393:5;34390:33;34380:2;;34437:1;34434;34427:12;34380:2;34370:77;:::o

Swarm Source

ipfs://158ffbe380f6baef2174aef1b3e5e53f4705f75083f8966d20c9e069e8762116
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.