Contract 0xa256f719b98ac8e2330ee9f1611af1e2d5f45f65 2

Contract Overview

Balance:
0 FTM

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x38977bf23ece8659b845353b80bd6c34780c0a37bd2e8ac5ffd2049bac090ab1Auto Step Invest110236362022-10-05 22:33:113 secs ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.00097120881
0xcf8d312059a51675e448b8913cb44c620e1c455b16b65d33f9640806757de627Auto Claim And S...110236342022-10-05 22:32:4232 secs ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.000992309158
0x33f9cb01a391403f5aded8467e5174a3f504f16e51ce7a60ad1a8f02819db24dAuto Step Invest110236332022-10-05 22:32:4133 secs ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.00097120881
0x1b1512444e1135ae158595d1fe2ca0c4e99f617a2a1332141fe75b375d2decaaAuto Claim And S...110236292022-10-05 22:32:121 min ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.000992309158
0x7d469dcc6b3e89765339f2abd9dfe638211adcdddae4c6c8f524023b569a09f7Auto Step Invest110236282022-10-05 22:32:111 min ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.00097062455
0x911d82232353dd90695cb88a56d58aabf833a521d1f6b5c14f2511332f3f9d8dAuto Claim And S...110236232022-10-05 22:31:511 min ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.000991704465
0x52c88f63a648529d1b7257fed14de53df58abfbdcc991b8fb3f75b7da16a819cAuto Step Invest110236222022-10-05 22:31:311 min ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.000970616975
0x307ab4e3a7b235249c68420edba863c66969dd7384a84e56ed8c48762378006dAuto Claim And S...110236202022-10-05 22:31:142 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.007616228607
0xbc25df27c3d82791b4077557133db3e6db31dad89ff34d12ec27c56fee3cd35eAuto Step Invest110236182022-10-05 22:31:052 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.00097120881
0x9f81c1ff22f1c6f47bacb6aa32fb5346c90f98db2b67cd5c9f018cb6f2846549Auto Claim And S...110236152022-10-05 22:30:412 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.000992309158
0x421684c6d4fd9a70cb4154743d28602beda996927b9cf35df67f47e48d1cef10Auto Step Invest110236142022-10-05 22:30:322 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.00097120881
0xd78411276f9e4b3874732ec85af2199ce5949a4983387542b5b3fd568c34c2b5Auto Claim And S...110236122022-10-05 22:30:212 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.000992309158
0xc0384a1c88576ca32a9495f17154cc0d34f3a2d94d440c5986e4c868c8b3c816Auto Step Invest110236112022-10-05 22:30:113 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.000970878329
0xd074abc2d99e7997902ea55e6c75d132cf6c99e14d15dc44d241fc93a98d2adaAuto Claim And S...110236032022-10-05 22:29:513 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.000992309158
0x759c23e31833cda7e63f299692397e434bbe1730ec8bcd00a738ff8bf801e292Auto Step Invest110236022022-10-05 22:29:413 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.000970641595
0x6000d062c28c224844b40f09c848bb75669d9e4d39af9675c964d6138af124f6Auto Claim And S...110235982022-10-05 22:29:213 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.000992309158
0x328014a46bd5af2154e7b958f312e9a88c4934e9868e93625b085bac5897c972Auto Step Invest110235972022-10-05 22:29:114 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.00097120881
0x8f84fd770cfb4a0c96a2ad085ea26316de56d45aa0bd7cd68982afa8bccf7e7aAuto Claim And S...110235922022-10-05 22:28:514 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.000991704465
0x1339cee4038faff421b2b56139a607336d7cb2cb5ba7b48c61ff321d7ea760d9Auto Step Invest110235912022-10-05 22:28:414 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.000970616975
0xc0157a808e0d764d24cef5982fd67a76abf0a40ee6dcb6dafc3f09120e997516Auto Claim And S...110235892022-10-05 22:28:214 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.000991704465
0x6c87c05061219bdb64d4418bf4ab58e18024a088b15e8478445f8081e3cf16e5Auto Step Invest110235882022-10-05 22:28:115 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.000970931358
0x36bc05e2efe6d7fbfbab6bfb870b6d5410f20a45b1cb05b790397b43e9784bf4Auto Claim And S...110235842022-10-05 22:27:515 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.000992101143
0x49a9f708fcf9861a04f8f63b674b8d8c916f48b44d780beaaa0ff58179db74d7Auto Step Invest110235822022-10-05 22:27:415 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.00097120881
0x58dd5f4f086b89778b62258cc5a00e18953971c7ea5853de96f305428fd661bfAuto Claim And S...110235802022-10-05 22:27:215 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.000991704465
0x2655464e41e9ddc0f984dad482f30a8ffb27f5beb1f49ab6f9e954e2e478b135Auto Step Invest110235782022-10-05 22:27:116 mins ago0x4935b168ea3481e52922fa3052586afcc7ebadbb IN  0xa256f719b98ac8e2330ee9f1611af1e2d5f45f650 FTM0.00097120881
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x24890f16b40fb72f5726c1c5af91f8db2f4fc3e5f463e8810087c7c8b483b005102054122022-08-29 2:06:0037 days 20 hrs ago 0x4935b168ea3481e52922fa3052586afcc7ebadbb  Contract Creation0 FTM
[ Download CSV Export 
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xc5c4ab9573B55a0dA8086988c6689A0e0e54c320

Contract Name:
AutoProc

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2022-08-24
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

interface IMARKET {    

    function transferWithoutFee(address to, uint256 amount) external;

    function transferFromWithoutFee(address from, address to, uint256 amount) external;

    function decimals() external view returns (uint8);

    function balanceOf(address account) external view returns (uint256);

    function marketWallet() external view returns (address);    

    function lockedTotalAmount(address user) external view returns (uint256);

    function lockedAmount(address user) external view returns (uint256);

    function lockedDeadline(address user) external view returns (uint256);

    function lockedTimestamp(address user) external view returns (uint256);

    function isRelocked(address user) external view returns (bool);

    function lockInfo(address user) external view returns (uint256 totalAmount, uint256 amount, uint256 timestamp, uint256 deadline, bool relock, uint256 curTimestamp);

    function setLockInfo(address user, uint256 amount, uint256 deadline, bool relock) external;

    function setLockInfoForFirstInvest(address user, uint256 totalAmount, uint256 amount, uint256 deadline, bool relock) external;

    function setLockInfoForStepInvest(address user, uint256 amount) external;

    function calcLockReward(address user, uint256 f, uint256 rewardLastTimestamp) external view returns (uint256);

    function calcLockRewardAtMoment(address user, uint256 f) external view returns (uint256);
}

interface IveMARKET {    

    function mint(address dst, uint256 amount) external;

    function balanceOf(address account) external view returns (uint256);

    function deleteBalance(address account) external;

    function holders() external view returns (address[] memory);
}

interface IMasterPlatypusV3 {        

    function stakingLPFromOther (
        address from, 
        uint256 pid, 
        uint256 amount, 
        uint256 autoBalancePeriod) external;       

    // function stakingPTPFromOther (address from, uint256 amount, uint256 investCount, uint256 investDeadline) external;

    function baseAPR (uint256 pid) external view returns (uint256);

    function boostedAPR (uint256 pid, address user) external view returns (uint256);

    function totalAPR (uint256 pid, address user) external view returns (uint256);

    function medianBoostedAPR (uint256 pid) external view returns (uint256);

    function lpStakedInfo(uint256 pid, address user) 
        external 
        view 
        returns (
            uint256 lpAmount, 
            uint256 rewardAmount, 
            uint256 rewardLastTimestamp,
            uint256 autoBalancePeriod,
            uint256 autoBalanceLastTimestamp
        );
    
    function calcVePTPRewardPub (address user) external view returns (uint256);

    function updatePTPStakedUserInfoForStaking (address user, uint256 amount) external;

    function updatePTPStakedUserInfoForStakingFirstInvest (address user, uint256 amount, uint256 totalAmount) external;

    function updatePTPStakedUserInfoForStakingStepInvest (address user, uint256 unitAmount, uint256 prevUnitAmount, uint256 investCount, uint256 investedCount) external;

    function ptp() external view returns (address);

    function veptp() external view returns (address);

    function claimVePTPFrom(address user) external;

    function directStakingPTP (address user) external;
}

library AddressArray {

    function _isExist (address[] storage addrs, address adr) private view returns (bool) {
        for (uint i=0;i<addrs.length;i++) {
            if (addrs[i] == adr) return true;
        }
        return false;
    }

    function isExist (address[] storage addrs, address adr) public view returns (bool) {
        return _isExist(addrs, adr);
    }

    function addAddr (address[] storage addrs, address adr) public {
        if (_isExist(addrs, adr)) addrs.push(adr);
    }

    function deleteAddr (address[] storage addrs, address adr) public {
        uint idx;
        bool is_exist = false;

        for (uint i=0;i<addrs.length;i++) {
            if (adr == addrs[i]) {
                is_exist = true;
                idx = i;
            }
        }

        if (is_exist) {
            addrs[idx] = addrs[addrs.length-1];
            addrs.pop();
        }
    }

    function deleteAddrOrder (address[] storage addrs, address adr) public {
        uint idx;
        bool is_exist = false;
        
        for (uint i=0;i<addrs.length;i++) {
            if (adr == addrs[i]) {
                is_exist = true;
                idx = i;
            }
        }

        if (is_exist) {
            for (uint i=idx;i<addrs.length-1;i++) {
                addrs[i] = addrs[i+1];
            }
            addrs.pop();
        }
    }
}

interface IAutoProc {
    function sCoinPerMARKET() external view returns (uint256);
    function stakingPTPFromOther (address from, address token1, address token2, address token3, uint256 amount, uint256 investAmount1, uint256 investAmount2, uint256 investAmount3, uint256 investCount, uint256 investDeadline) external;
    function setAutoCompoundInfo(address user, uint256 period, uint8 isEnable) external;
}

contract AutoProc is IAutoProc{ 

    struct InvestInfo {
        uint256 investUnitAmount;
        address token1;
        address token2;
        address token3;
        uint256 investAmount1;
        uint256 investAmount2;
        uint256 investAmount3;
        uint256 investedCount;
        uint256 investCount;
        uint256 investPeriod;
        uint256 lastTimestamp;
    }

    struct CompoundInfo {
        uint256 period; // unit: second
        uint256 lastTimestamp;
    }

    IMasterPlatypusV3 private _masterPlatypus;    
    address private _owner;

    address[] private _stepInvesters;
    mapping(address => InvestInfo[]) private _investInfo;

    address[] private _autoCompounders;
    mapping(address => CompoundInfo) private _autoCompoundInfo;

    uint256 private _sCoinPerMARKET = 200; // 100 times: 200 means 2: 2 Dais = 1 MARKET
       
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);    
    event PTPStaked(address indexed user, address indexed ptptoken, uint256 amount);
    event MasterPlatypusUpdated(
        address indexed sender,
        address indexed prevM,
        address indexed newM
    );
    event ScoinPerMARKETUpdated(
        address indexed sender,
        uint256 prevRate,
        uint256 newRate
    );

    event AutoCompoundInfoUpdated(
        address indexed sender,
        uint256 period,
        uint enable
    );

    using AddressArray for address[];

    constructor () {       
        _owner = msg.sender;
    }   

    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    } 

    function renounceOwnership() public onlyOwner {
        _transferOwnership(address(0));
    }

    function stepInvesters() public view returns (address[] memory) {
        return _stepInvesters;
    }

    function autoCompounders() public view returns (address[] memory) {
        return _autoCompounders;
    }

    function investInfo(address user) public view returns (InvestInfo[] memory) {
        return _investInfo[user];
    }

    function autoCompoundPeriod(address user) public view returns (uint256 period, uint256 lastTimestamp) {
        period = _autoCompoundInfo[user].period;
        lastTimestamp = _autoCompoundInfo[user].lastTimestamp;
    }

    function sCoinPerMARKET() public override view returns (uint256) {
        return _sCoinPerMARKET;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        require(newOwner != _owner, "Ownable: same owner");
        _transferOwnership(newOwner);
    }

    function getMasterPlatypus() external view returns (address) {
        return address(_masterPlatypus);
    }

    function setScoinPerMARKET(uint256 rate) external onlyOwner {
        require(rate > 0, "UNDER_ZERO");
        emit ScoinPerMARKETUpdated(msg.sender, _sCoinPerMARKET, rate);
        _sCoinPerMARKET = rate;
    }

    function setMasterPlatypus(IMasterPlatypusV3 mv) external onlyOwner {
        require(address(mv) != address(0), "ZERO");
        emit MasterPlatypusUpdated(
            msg.sender,
            address(_masterPlatypus),
            address(mv)
        );
        _masterPlatypus = mv;
    }

    function _transferOwnership(address newOwner) internal {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }

    // isEnable: 1- enable, 0- disable
    function setAutoCompoundInfo(address user, uint256 period, uint8 isEnable) public {
        if(isEnable == 1) {
            AddressArray.addAddr(_autoCompounders, user);
            _autoCompoundInfo[user].period = period; // unit: second        
        } else {
            AddressArray.deleteAddr(_autoCompounders, user);
            _autoCompoundInfo[user].period = 0;        
        }
        emit AutoCompoundInfoUpdated(user, period, isEnable);
    }

    function stakingPTPFromOther (address from, address token1, address token2, address token3, uint256 amount, uint256 investAmount1, uint256 investAmount2, uint256 investAmount3, uint256 investCount, uint256 investDeadline) external override { 
        require(address(_masterPlatypus.veptp()) != address(0), "stakingPTPFromOther: VePTP does not set");        
        require(IMARKET(_masterPlatypus.ptp()).balanceOf(from) >= amount, "stakingPTPFromOther: insufficient amount");
        IMARKET(_masterPlatypus.ptp()).transferFromWithoutFee(from, address(_masterPlatypus), amount);
        IveMARKET(_masterPlatypus.veptp()).mint(from, _masterPlatypus.calcVePTPRewardPub(from));
        _masterPlatypus.updatePTPStakedUserInfoForStakingFirstInvest(from, amount, amount*investCount);
        emit PTPStaked(from, address(_masterPlatypus.ptp()), amount);
        _createInvestInfo (from, amount, token1, token2, token3, investAmount1, investAmount2, investAmount3, investCount, investDeadline);        
    }   

    function _createInvestInfo (address user, uint256 unitAmount, address token1, address token2, address token3, uint256 investAmount1, uint256 investAmount2, uint256 investAmount3, uint256 investCount, uint256 investDeadline) private {
        if (investCount > 1) {
            AddressArray.addAddr(_stepInvesters, user);            
            _investInfo[user].push(InvestInfo (unitAmount, token1, token2, token3, investAmount1, investAmount2, investAmount3, 1, investCount, investDeadline/(investCount-1), block.timestamp));
        } 
    }

    function autoStepInvest () public {
        for (uint i=0;i<_stepInvesters.length;i++) {
            InvestInfo[] memory investInfos = _investInfo[_stepInvesters[i]];
            for (uint j=0;j<investInfos.length;j++) {
                InvestInfo memory invInfo = investInfos[j];
                if (invInfo.investCount-invInfo.investedCount > 0 && block.timestamp - invInfo.lastTimestamp > invInfo.investPeriod) {
                    uint256 marketAmount =
                        (((invInfo.investAmount1 * 10**IMARKET(_masterPlatypus.ptp()).decimals()) /
                            10**ERC20(invInfo.token1).decimals() +
                            (invInfo.investAmount2 * 10**IMARKET(_masterPlatypus.ptp()).decimals()) /
                            10**ERC20(invInfo.token2).decimals() +
                            (invInfo.investAmount3 * 10**IMARKET(_masterPlatypus.ptp()).decimals()) /
                            10**ERC20(invInfo.token3).decimals()) / invInfo.investCount / _sCoinPerMARKET) *
                        100;
                    
                    uint256 half = marketAmount / 2;
                    uint256 anotherHalf = marketAmount - half;       
                    IMARKET(_masterPlatypus.ptp()).transferFromWithoutFee(address(_masterPlatypus.ptp()), address(_masterPlatypus), half);
                    IMARKET(_masterPlatypus.ptp()).transferFromWithoutFee(IMARKET(_masterPlatypus.ptp()).marketWallet(), address(_masterPlatypus), anotherHalf);        
                    IveMARKET(_masterPlatypus.veptp()).mint(_stepInvesters[i], _masterPlatypus.calcVePTPRewardPub(_stepInvesters[i]));
                    _masterPlatypus.updatePTPStakedUserInfoForStakingStepInvest(_stepInvesters[i], marketAmount, invInfo.investUnitAmount, invInfo.investCount, invInfo.investedCount);
                    if (IMARKET(_masterPlatypus.ptp()).lockedTimestamp(_stepInvesters[i]) + IMARKET(_masterPlatypus.ptp()).lockedDeadline(_stepInvesters[i]) >= block.timestamp) {
                        IMARKET(_masterPlatypus.ptp()).setLockInfoForStepInvest(_stepInvesters[i], marketAmount);
                    }
                    emit PTPStaked(_stepInvesters[i], address(_masterPlatypus.ptp()), marketAmount);
                    
                    // update invest info
                    _investInfo[_stepInvesters[i]][j].investUnitAmount = marketAmount;
                    _investInfo[_stepInvesters[i]][j].investedCount ++;
                    _investInfo[_stepInvesters[i]][j].lastTimestamp = block.timestamp;
                }
            }
        }
    }

    function autoClaimAndStakingPTP() public {
        for (uint i=0;i<_autoCompounders.length;i++) {
            uint256 period = _autoCompoundInfo[_autoCompounders[i]].period;
            uint256 lastTimestamp = _autoCompoundInfo[_autoCompounders[i]].lastTimestamp;
            if(period > 0 && block.timestamp - lastTimestamp >= period) {            
                // claim veMARKET
                //_masterPlatypus.claimVePTPFrom(_autoCompounders[i]);
                // direct staking MARKET / automatically claim veMARKET
                _masterPlatypus.directStakingPTP(_autoCompounders[i]);
                
                _autoCompoundInfo[_autoCompounders[i]].lastTimestamp = block.timestamp;
            }
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"enable","type":"uint256"}],"name":"AutoCompoundInfoUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"prevM","type":"address"},{"indexed":true,"internalType":"address","name":"newM","type":"address"}],"name":"MasterPlatypusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"ptptoken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PTPStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"prevRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"ScoinPerMARKETUpdated","type":"event"},{"inputs":[],"name":"autoClaimAndStakingPTP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"autoCompoundPeriod","outputs":[{"internalType":"uint256","name":"period","type":"uint256"},{"internalType":"uint256","name":"lastTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoCompounders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoStepInvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMasterPlatypus","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"investInfo","outputs":[{"components":[{"internalType":"uint256","name":"investUnitAmount","type":"uint256"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"address","name":"token2","type":"address"},{"internalType":"address","name":"token3","type":"address"},{"internalType":"uint256","name":"investAmount1","type":"uint256"},{"internalType":"uint256","name":"investAmount2","type":"uint256"},{"internalType":"uint256","name":"investAmount3","type":"uint256"},{"internalType":"uint256","name":"investedCount","type":"uint256"},{"internalType":"uint256","name":"investCount","type":"uint256"},{"internalType":"uint256","name":"investPeriod","type":"uint256"},{"internalType":"uint256","name":"lastTimestamp","type":"uint256"}],"internalType":"struct AutoProc.InvestInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sCoinPerMARKET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"period","type":"uint256"},{"internalType":"uint8","name":"isEnable","type":"uint8"}],"name":"setAutoCompoundInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IMasterPlatypusV3","name":"mv","type":"address"}],"name":"setMasterPlatypus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setScoinPerMARKET","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"address","name":"token2","type":"address"},{"internalType":"address","name":"token3","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"investAmount1","type":"uint256"},{"internalType":"uint256","name":"investAmount2","type":"uint256"},{"internalType":"uint256","name":"investAmount3","type":"uint256"},{"internalType":"uint256","name":"investCount","type":"uint256"},{"internalType":"uint256","name":"investDeadline","type":"uint256"}],"name":"stakingPTPFromOther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stepInvesters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260c860065534801561001557600080fd5b50600180546001600160a01b031916331790556128b6806100376000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063b643916c1161008c578063f21dc81011610066578063f21dc810146101de578063f2f705c1146101f9578063f2fde38b14610201578063f83b09b31461021457600080fd5b8063b643916c146101a3578063d2db083a146101b6578063ecbc3153146101c957600080fd5b806320e68b3b116100c857806320e68b3b1461016f57806349819d4a146101825780635a93a1261461018a578063715018a61461019b57600080fd5b80630c0a3cbe146100ef5780631bc2f8321461013a578063203c2e8f1461015a575b600080fd5b6101206100fd366004612420565b6001600160a01b0316600090815260056020526040902080546001909101549091565b604080519283526020830191909152015b60405180910390f35b61014d610148366004612420565b61021c565b6040516101319190612444565b61016d610168366004612511565b61030d565b005b61016d61017d366004612420565b610480565b61016d610550565b600654604051908152602001610131565b61016d61179d565b61016d6101b1366004612553565b6117d3565b61016d6101c43660046125e6565b611ded565b6101d1611e97565b60405161013191906125ff565b6000546040516001600160a01b039091168152602001610131565b6101d1611ef9565b61016d61020f366004612420565b611f59565b61016d612045565b6001600160a01b0381166000908152600360209081526040808320805482518185028101850190935280835260609492939192909184015b828210156103025760008481526020908190206040805161016081018252600b8602909201805483526001808201546001600160a01b039081168587015260028301548116938501939093526003820154909216606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e084015260088101546101008401526009810154610120840152600a01546101408301529083529092019101610254565b505050509050919050565b8060ff16600114156103aa5760405163e6e9237160e01b81526004808201526001600160a01b0384166024820152731f35fb4ba99e9676d2c2ea7b832a91fa24afe1fd9063e6e923719060440160006040518083038186803b15801561037257600080fd5b505af4158015610386573d6000803e3d6000fd5b5050506001600160a01b038416600090815260056020526040902083905550610435565b6040516306297c5f60e51b81526004808201526001600160a01b0384166024820152731f35fb4ba99e9676d2c2ea7b832a91fa24afe1fd9063c52f8be09060440160006040518083038186803b15801561040357600080fd5b505af4158015610417573d6000803e3d6000fd5b5050506001600160a01b038416600090815260056020526040812055505b6040805183815260ff831660208201526001600160a01b038516917ffdc197604e5033f30f71ae4f8e7efb91de1c7378ff30a3d05dadf1c2af9cf7b6910160405180910390a2505050565b6001546001600160a01b031633146104b35760405162461bcd60e51b81526004016104aa9061264c565b60405180910390fd5b6001600160a01b0381166104f25760405162461bcd60e51b81526004016104aa906020808252600490820152635a45524f60e01b604082015260600190565b600080546040516001600160a01b038085169392169133917fdea9171acb4e68344f671233b6c76596ec7a05e2cdeddeaecac7708da57b148d9190a4600080546001600160a01b0319166001600160a01b0392909216919091179055565b60005b60025481101561179a576000600360006002848154811061057657610576612681565b60009182526020808320909101546001600160a01b031683528281019390935260409182018120805483518186028101860190945280845292939092919084015b828210156106655760008481526020908190206040805161016081018252600b8602909201805483526001808201546001600160a01b039081168587015260028301548116938501939093526003820154909216606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e084015260088101546101008401526009810154610120840152600a015461014083015290835290920191016105b7565b50505050905060005b815181101561178557600082828151811061068b5761068b612681565b6020026020010151905060008160e001518261010001516106ac91906126ad565b1180156106cc57506101208101516101408201516106ca90426126ad565b115b1561177257600060065482610100015183606001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561071957600080fd5b505afa15801561072d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075191906126c4565b61075c90600a6127c7565b60008054906101000a90046001600160a01b03166001600160a01b0316636af667726040518163ffffffff1660e01b815260040160206040518083038186803b1580156107a857600080fd5b505afa1580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e091906127d6565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561081857600080fd5b505afa15801561082c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085091906126c4565b61085b90600a6127c7565b8560c0015161086a91906127f3565b6108749190612812565b84604001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156108b157600080fd5b505afa1580156108c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e991906126c4565b6108f490600a6127c7565b60008054906101000a90046001600160a01b03166001600160a01b0316636af667726040518163ffffffff1660e01b815260040160206040518083038186803b15801561094057600080fd5b505afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906127d6565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156109b057600080fd5b505afa1580156109c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e891906126c4565b6109f390600a6127c7565b8660a00151610a0291906127f3565b610a0c9190612812565b85602001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610a4957600080fd5b505afa158015610a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8191906126c4565b610a8c90600a6127c7565b60008054906101000a90046001600160a01b03166001600160a01b0316636af667726040518163ffffffff1660e01b815260040160206040518083038186803b158015610ad857600080fd5b505afa158015610aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1091906127d6565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610b4857600080fd5b505afa158015610b5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8091906126c4565b610b8b90600a6127c7565b8760800151610b9a91906127f3565b610ba49190612812565b610bae9190612834565b610bb89190612834565b610bc29190612812565b610bcc9190612812565b610bd79060646127f3565b90506000610be6600283612812565b90506000610bf482846126ad565b905060008054906101000a90046001600160a01b03166001600160a01b0316636af667726040518163ffffffff1660e01b815260040160206040518083038186803b158015610c4257600080fd5b505afa158015610c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7a91906127d6565b6001600160a01b0316637f92366f60008054906101000a90046001600160a01b03166001600160a01b0316636af667726040518163ffffffff1660e01b815260040160206040518083038186803b158015610cd457600080fd5b505afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c91906127d6565b60005460405160e084901b6001600160e01b03191681526001600160a01b0392831660048201529116602482015260448101859052606401600060405180830381600087803b158015610d5e57600080fd5b505af1158015610d72573d6000803e3d6000fd5b5050505060008054906101000a90046001600160a01b03166001600160a01b0316636af667726040518163ffffffff1660e01b815260040160206040518083038186803b158015610dc257600080fd5b505afa158015610dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfa91906127d6565b6001600160a01b0316637f92366f60008054906101000a90046001600160a01b03166001600160a01b0316636af667726040518163ffffffff1660e01b815260040160206040518083038186803b158015610e5457600080fd5b505afa158015610e68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8c91906127d6565b6001600160a01b031663e4440a866040518163ffffffff1660e01b815260040160206040518083038186803b158015610ec457600080fd5b505afa158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc91906127d6565b60005460405160e084901b6001600160e01b03191681526001600160a01b0392831660048201529116602482015260448101849052606401600060405180830381600087803b158015610f4e57600080fd5b505af1158015610f62573d6000803e3d6000fd5b5050505060008054906101000a90046001600160a01b03166001600160a01b031663a72a596b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fb257600080fd5b505afa158015610fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fea91906127d6565b6001600160a01b03166340c10f196002898154811061100b5761100b612681565b60009182526020822001549054600280546001600160a01b039384169390921691633476bc5891908d90811061104357611043612681565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b15801561108e57600080fd5b505afa1580156110a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c6919061284c565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561110c57600080fd5b505af1158015611120573d6000803e3d6000fd5b5050600054600280546001600160a01b03909216935063f2eaf2d09250908a90811061114e5761114e612681565b600091825260209091200154865161010088015160e0808a01516040519186901b6001600160e01b03191682526001600160a01b0390941660048201526024810189905260448101929092526064820152608481019190915260a401600060405180830381600087803b1580156111c457600080fd5b505af11580156111d8573d6000803e3d6000fd5b505050504260008054906101000a90046001600160a01b03166001600160a01b0316636af667726040518163ffffffff1660e01b815260040160206040518083038186803b15801561122957600080fd5b505afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126191906127d6565b6001600160a01b0316639645c71960028a8154811061128257611282612681565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b1580156112cd57600080fd5b505afa1580156112e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611305919061284c565b60008054906101000a90046001600160a01b03166001600160a01b0316636af667726040518163ffffffff1660e01b815260040160206040518083038186803b15801561135157600080fd5b505afa158015611365573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138991906127d6565b6001600160a01b031663149501dd60028b815481106113aa576113aa612681565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b1580156113f557600080fd5b505afa158015611409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142d919061284c565b6114379190612834565b1061154e5760008054906101000a90046001600160a01b03166001600160a01b0316636af667726040518163ffffffff1660e01b815260040160206040518083038186803b15801561148857600080fd5b505afa15801561149c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c091906127d6565b6001600160a01b031663d3058cad600289815481106114e1576114e1612681565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260248101869052604401600060405180830381600087803b15801561153557600080fd5b505af1158015611549573d6000803e3d6000fd5b505050505b60008054906101000a90046001600160a01b03166001600160a01b0316636af667726040518163ffffffff1660e01b815260040160206040518083038186803b15801561159a57600080fd5b505afa1580156115ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d291906127d6565b6001600160a01b0316600288815481106115ee576115ee612681565b600091825260209182902001546040518681526001600160a01b03909116917f69cac3b0665489073c5a8caab5801cc1f2f7e21f46194269fce3f6486d77cd5a910160405180910390a3826003600060028a8154811061165057611650612681565b60009182526020808320909101546001600160a01b03168352820192909252604001902080548790811061168657611686612681565b90600052602060002090600b02016000018190555060036000600289815481106116b2576116b2612681565b60009182526020808320909101546001600160a01b0316835282019290925260400190208054869081106116e8576116e8612681565b6000918252602082206007600b909202010180549161170683612865565b9190505550426003600060028a8154811061172357611723612681565b60009182526020808320909101546001600160a01b03168352820192909252604001902080548790811061175957611759612681565b90600052602060002090600b0201600a01819055505050505b508061177d81612865565b91505061066e565b5050808061179290612865565b915050610553565b50565b6001546001600160a01b031633146117c75760405162461bcd60e51b81526004016104aa9061264c565b6117d160006121d9565b565b60006001600160a01b031660008054906101000a90046001600160a01b03166001600160a01b031663a72a596b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561182a57600080fd5b505afa15801561183e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186291906127d6565b6001600160a01b031614156118c95760405162461bcd60e51b815260206004820152602760248201527f7374616b696e6750545046726f6d4f746865723a20566550545020646f6573206044820152661b9bdd081cd95d60ca1b60648201526084016104aa565b6000546040805163357b33b960e11b8152905188926001600160a01b031691636af66772916004808301926020929190829003018186803b15801561190d57600080fd5b505afa158015611921573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194591906127d6565b6040516370a0823160e01b81526001600160a01b038d8116600483015291909116906370a082319060240160206040518083038186803b15801561198857600080fd5b505afa15801561199c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c0919061284c565b1015611a1f5760405162461bcd60e51b815260206004820152602860248201527f7374616b696e6750545046726f6d4f746865723a20696e73756666696369656e6044820152671d08185b5bdd5b9d60c21b60648201526084016104aa565b60008054906101000a90046001600160a01b03166001600160a01b0316636af667726040518163ffffffff1660e01b815260040160206040518083038186803b158015611a6b57600080fd5b505afa158015611a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa391906127d6565b600054604051637f92366f60e01b81526001600160a01b038d81166004830152918216602482015260448101899052911690637f92366f90606401600060405180830381600087803b158015611af857600080fd5b505af1158015611b0c573d6000803e3d6000fd5b5050505060008054906101000a90046001600160a01b03166001600160a01b031663a72a596b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b5c57600080fd5b505afa158015611b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9491906127d6565b60005460405163068ed78b60e31b81526001600160a01b038d81166004830152928316926340c10f19928e92911690633476bc589060240160206040518083038186803b158015611be457600080fd5b505afa158015611bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1c919061284c565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611c6257600080fd5b505af1158015611c76573d6000803e3d6000fd5b50506000546001600160a01b0316915063551fca5890508b88611c9986826127f3565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820152606401600060405180830381600087803b158015611ce757600080fd5b505af1158015611cfb573d6000803e3d6000fd5b5050505060008054906101000a90046001600160a01b03166001600160a01b0316636af667726040518163ffffffff1660e01b815260040160206040518083038186803b158015611d4b57600080fd5b505afa158015611d5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8391906127d6565b6001600160a01b03168a6001600160a01b03167f69cac3b0665489073c5a8caab5801cc1f2f7e21f46194269fce3f6486d77cd5a88604051611dc791815260200190565b60405180910390a3611de18a878b8b8b8a8a8a8a8a61222b565b50505050505050505050565b6001546001600160a01b03163314611e175760405162461bcd60e51b81526004016104aa9061264c565b60008111611e545760405162461bcd60e51b815260206004820152600a602482015269554e4445525f5a45524f60b01b60448201526064016104aa565b600654604080519182526020820183905233917f66b3e76c79b05f3bbedab560a6274ccfd851a4d00368cf057b5903972588d62c910160405180910390a2600655565b60606004805480602002602001604051908101604052809291908181526020018280548015611eef57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611ed1575b5050505050905090565b60606002805480602002602001604051908101604052809291908181526020018280548015611eef576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611ed1575050505050905090565b6001546001600160a01b03163314611f835760405162461bcd60e51b81526004016104aa9061264c565b6001600160a01b038116611fe85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104aa565b6001546001600160a01b038281169116141561203c5760405162461bcd60e51b815260206004820152601360248201527227bbb730b136329d1039b0b6b29037bbb732b960691b60448201526064016104aa565b61179a816121d9565b60005b60045481101561179a576000600560006004848154811061206b5761206b612681565b60009182526020808320909101546001600160a01b0316835282019290925260400181205460048054919350600591839190869081106120ad576120ad612681565b60009182526020808320909101546001600160a01b03168352820192909252604001902060010154905081158015906120ef5750816120ec82426126ad565b10155b156121c457600054600480546001600160a01b0390921691633053a18191908690811061211e5761211e612681565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b039091166004820152602401600060405180830381600087803b15801561216b57600080fd5b505af115801561217f573d6000803e3d6000fd5b5050505042600560006004868154811061219b5761219b612681565b60009182526020808320909101546001600160a01b031683528201929092526040019020600101555b505080806121d190612865565b915050612048565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001821115611de15760405163e6e9237160e01b8152600260048201526001600160a01b038b166024820152731f35fb4ba99e9676d2c2ea7b832a91fa24afe1fd9063e6e923719060440160006040518083038186803b15801561228e57600080fd5b505af41580156122a2573d6000803e3d6000fd5b50505050600360008b6001600160a01b03166001600160a01b031681526020019081526020016000206040518061016001604052808b81526020018a6001600160a01b03168152602001896001600160a01b03168152602001886001600160a01b031681526020018781526020018681526020018581526020016001815260200184815260200160018561233691906126ad565b6123409085612812565b8152426020918201528254600181810185556000948552938290208351600b909202019081559082015192810180546001600160a01b039485166001600160a01b03199182161790915560408301516002830180549186169183169190911790556060830151600383018054919095169116179092556080810151600483015560a0810151600583015560c0810151600683015560e08101516007830155610100810151600883015561012081015160098301556101400151600a9091015550505050505050505050565b6001600160a01b038116811461179a57600080fd5b60006020828403121561243257600080fd5b813561243d8161240b565b9392505050565b602080825282518282018190526000919060409081850190868401855b828110156124f557815180518552868101516001600160a01b039081168887015286820151811687870152606080830151909116908601526080808201519086015260a0808201519086015260c0808201519086015260e080820151908601526101008082015190860152610120808201519086015261014090810151908501526101609093019290850190600101612461565b5091979650505050505050565b60ff8116811461179a57600080fd5b60008060006060848603121561252657600080fd5b83356125318161240b565b925060208401359150604084013561254881612502565b809150509250925092565b6000806000806000806000806000806101408b8d03121561257357600080fd5b8a3561257e8161240b565b995060208b013561258e8161240b565b985060408b013561259e8161240b565b975060608b01356125ae8161240b565b999c989b50969960808101359860a0820135985060c0820135975060e082013596506101008201359550610120909101359350915050565b6000602082840312156125f857600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156126405783516001600160a01b03168352928401929184019160010161261b565b50909695505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156126bf576126bf612697565b500390565b6000602082840312156126d657600080fd5b815161243d81612502565b600181815b8085111561271c57816000190482111561270257612702612697565b8085161561270f57918102915b93841c93908002906126e6565b509250929050565b600082612733575060016127c1565b81612740575060006127c1565b816001811461275657600281146127605761277c565b60019150506127c1565b60ff84111561277157612771612697565b50506001821b6127c1565b5060208310610133831016604e8410600b841016171561279f575081810a6127c1565b6127a983836126e1565b80600019048211156127bd576127bd612697565b0290505b92915050565b600061243d60ff841683612724565b6000602082840312156127e857600080fd5b815161243d8161240b565b600081600019048311821515161561280d5761280d612697565b500290565b60008261282f57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561284757612847612697565b500190565b60006020828403121561285e57600080fd5b5051919050565b600060001982141561287957612879612697565b506001019056fea2646970667358221220384005fd5f7fa797a3bce216b23db3fd21d134ab6b97f98a1809adeb8ae098a864736f6c63430008090033

Library Used

AddressArray : 0x1f35fb4ba99e9676d2c2ea7b832a91fa24afe1fd

Deployed ByteCode Sourcemap

20240:9080:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22410:224;;;;;;:::i;:::-;-1:-1:-1;;;;;22532:23:0;22473:14;22532:23;;;:17;:23;;;;;:30;;22589:37;;;;;22532:30;;22410:224;;;;;576:25:1;;;632:2;617:18;;610:34;;;;549:18;22410:224:0;;;;;;;;22283:119;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23897:467::-;;;;;;:::i;:::-;;:::i;:::-;;23360:298;;;;;;:::i;:::-;;:::i;25953:2611::-;;;:::i;22642:106::-;22725:15;;22642:106;;3450:25:1;;;3438:2;3423:18;22642:106:0;3304:177:1;21952:95:0;;;:::i;24372:1013::-;;;;;;:::i;:::-;;:::i;23137:215::-;;;;;;:::i;:::-;;:::i;22167:108::-;;;:::i;:::-;;;;;;;:::i;23018:111::-;23070:7;23105:15;23018:111;;-1:-1:-1;;;;;23105:15:0;;;5570:51:1;;5558:2;5543:18;23018:111:0;5424:203:1;22055:104:0;;;:::i;22756:254::-;;;;;;:::i;:::-;;:::i;28572:745::-;;;:::i;22283:119::-;-1:-1:-1;;;;;22377:17:0;;;;;;:11;:17;;;;;;;;22370:24;;;;;;;;;;;;;;;;;22338:19;;22370:24;;22377:17;;22370:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22370:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22283:119;;;:::o;23897:467::-;23993:8;:13;;24005:1;23993:13;23990:304;;;24023:44;;-1:-1:-1;;;24023:44:0;;24044:16;24023:44;;;5836:25:1;-1:-1:-1;;;;;5897:32:1;;5877:18;;;5870:60;24023:12:0;;:20;;5809:18:1;;24023:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;24082:23:0;;;;;;:17;:23;;;;;:39;;;-1:-1:-1;23990:304:0;;;24178:47;;-1:-1:-1;;;24178:47:0;;24202:16;24178:47;;;5836:25:1;-1:-1:-1;;;;;5897:32:1;;5877:18;;;5870:60;24178:12:0;;:23;;5809:18:1;;24178:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;24240:23:0;;24273:1;24240:23;;;:17;:23;;;;;:34;-1:-1:-1;23990:304:0;24309:47;;;6113:25:1;;;6186:4;6174:17;;6169:2;6154:18;;6147:45;-1:-1:-1;;;;;24309:47:0;;;;;6086:18:1;24309:47:0;;;;;;;23897:467;;;:::o;23360:298::-;21866:6;;-1:-1:-1;;;;;21866:6:0;21876:10;21866:20;21858:65;;;;-1:-1:-1;;;21858:65:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;23447:25:0;::::1;23439:42;;;;-1:-1:-1::0;;;23439:42:0::1;;;;;;6766:2:1::0;6748:21;;;6805:1;6785:18;;;6778:29;-1:-1:-1;;;6838:2:1;6823:18;;6816:34;6882:2;6867:18;;6564:327;23439:42:0::1;23566:15;::::0;;23497:122:::1;::::0;-1:-1:-1;;;;;23497:122:0;;::::1;::::0;23566:15;::::1;::::0;23533:10:::1;::::0;23497:122:::1;::::0;23566:15;23497:122:::1;23630:15;:20:::0;;-1:-1:-1;;;;;;23630:20:0::1;-1:-1:-1::0;;;;;23630:20:0;;;::::1;::::0;;;::::1;::::0;;23360:298::o;25953:2611::-;26003:6;25998:2559;26014:14;:21;26012:23;;25998:2559;;;26056:31;26090:11;:30;26102:14;26117:1;26102:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26102:17:0;26090:30;;;;;;;;;;;;;;;26056:64;;;;;;;;;;;;;;;;;;;26090:30;;26056:64;26102:17;26056:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26056:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26140:6;26135:2411;26151:11;:18;26149:1;:20;26135:2411;;;26194:25;26222:11;26234:1;26222:14;;;;;;;;:::i;:::-;;;;;;;26194:42;;26303:1;26279:7;:21;;;26259:7;:19;;;:41;;;;:::i;:::-;:45;:111;;;;-1:-1:-1;26350:20:0;;;;26326:21;;;;26308:39;;:15;:39;:::i;:::-;:62;26259:111;26255:2276;;;26395:20;26952:15;;26930:7;:19;;;26900:7;:14;;;-1:-1:-1;;;;;26894:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26890:36;;:2;:36;:::i;:::-;26824:15;;;;;;;;-1:-1:-1;;;;;26824:15:0;-1:-1:-1;;;;;26824:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26816:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26812:45;;:2;:45;:::i;:::-;26788:7;:21;;;:69;;;;:::i;:::-;26787:139;;;;:::i;:::-;26729:7;:14;;;-1:-1:-1;;;;;26723:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26719:36;;:2;:36;:::i;:::-;26653:15;;;;;;;;-1:-1:-1;;;;;26653:15:0;-1:-1:-1;;;;;26653:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26645:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26641:45;;:2;:45;:::i;:::-;26617:7;:21;;;:69;;;;:::i;:::-;26616:139;;;;:::i;:::-;26558:7;:14;;;-1:-1:-1;;;;;26552:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26548:36;;:2;:36;:::i;:::-;26482:15;;;;;;;;-1:-1:-1;;;;;26482:15:0;-1:-1:-1;;;;;26482:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26474:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26470:45;;:2;:45;:::i;:::-;26446:7;:21;;;:69;;;;:::i;:::-;26445:139;;;;:::i;:::-;:310;;;;:::i;:::-;:481;;;;:::i;:::-;26444:505;;;;:::i;:::-;:523;;;;:::i;:::-;26443:556;;26996:3;26443:556;:::i;:::-;26395:604;-1:-1:-1;27044:12:0;27059:16;27074:1;26395:604;27059:16;:::i;:::-;27044:31;-1:-1:-1;27098:19:0;27120;27044:31;27120:12;:19;:::i;:::-;27098:41;;27177:15;;;;;;;;-1:-1:-1;;;;;27177:15:0;-1:-1:-1;;;;;27177:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27169:53:0;;27231:15;;;;;;;;-1:-1:-1;;;;;27231:15:0;-1:-1:-1;;;;;27231:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27263:15;;27169:117;;;;;;-1:-1:-1;;;;;;27169:117:0;;;-1:-1:-1;;;;;9967:15:1;;;27169:117:0;;;9949:34:1;27263:15:0;;9999:18:1;;;9992:43;10051:18;;;10044:34;;;9884:18;;27169:117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27317:15;;;;;;;;-1:-1:-1;;;;;27317:15:0;-1:-1:-1;;;;;27317:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27309:53:0;;27371:15;;;;;;;;-1:-1:-1;;;;;27371:15:0;-1:-1:-1;;;;;27371:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27363:43:0;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27418:15;;27309:139;;;;;;-1:-1:-1;;;;;;27309:139:0;;;-1:-1:-1;;;;;9967:15:1;;;27309:139:0;;;9949:34:1;27418:15:0;;9999:18:1;;;9992:43;10051:18;;;10044:34;;;9884:18;;27309:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27489:15;;;;;;;;-1:-1:-1;;;;;27489:15:0;-1:-1:-1;;;;;27489:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27479:39:0;;27519:14;27534:1;27519:17;;;;;;;;:::i;:::-;;;;;;;;;;27538:15;;27573:14;:17;;-1:-1:-1;;;;;27519:17:0;;;;27538:15;;;;:34;;27573:14;27588:1;;27573:17;;;;;;:::i;:::-;;;;;;;;;;;27538:53;;;;;;-1:-1:-1;;;;;;27538:53:0;;;-1:-1:-1;;;;;27573:17:0;;;27538:53;;;5570:51:1;5543:18;;27538:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27479:113;;-1:-1:-1;;;;;;27479:113:0;;;;;;;-1:-1:-1;;;;;10470:32:1;;;27479:113:0;;;10452:51:1;10519:18;;;10512:34;10425:18;;27479:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27615:15:0;;27675:14;:17;;-1:-1:-1;;;;;27615:15:0;;;;-1:-1:-1;27615:59:0;;-1:-1:-1;27675:14:0;27690:1;;27675:17;;;;;;:::i;:::-;;;;;;;;;;;27708:24;;27675:17;27734:19;;;27755:21;;;;;27615:162;;;;;;-1:-1:-1;;;;;;27615:162:0;;;-1:-1:-1;;;;;27675:17:0;;;27615:162;;;10816:51:1;10883:18;;;10876:34;;;10926:18;;;10919:34;;;;10969:18;;;10962:34;11012:19;;;11005:35;;;;10788:19;;27615:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27940:15;27880;;;;;;;;-1:-1:-1;;;;;27880:15:0;-1:-1:-1;;;;;27880:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27872:45:0;;27918:14;27933:1;27918:17;;;;;;;;:::i;:::-;;;;;;;;;;;27872:64;;;;;;-1:-1:-1;;;;;;27872:64:0;;;-1:-1:-1;;;;;27918:17:0;;;27872:64;;;5570:51:1;5543:18;;27872:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27812:15;;;;;;;;-1:-1:-1;;;;;27812:15:0;-1:-1:-1;;;;;27812:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27804:46:0;;27851:14;27866:1;27851:17;;;;;;;;:::i;:::-;;;;;;;;;;;27804:65;;;;;;-1:-1:-1;;;;;;27804:65:0;;;-1:-1:-1;;;;;27851:17:0;;;27804:65;;;5570:51:1;5543:18;;27804:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:132;;;;:::i;:::-;:151;27800:296;;27992:15;;;;;;;;-1:-1:-1;;;;;27992:15:0;-1:-1:-1;;;;;27992:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27984:55:0;;28040:14;28055:1;28040:17;;;;;;;;:::i;:::-;;;;;;;;;;;27984:88;;;;;;-1:-1:-1;;;;;;27984:88:0;;;-1:-1:-1;;;;;28040:17:0;;;27984:88;;;10452:51:1;10519:18;;;10512:34;;;10425:18;;27984:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27800:296;28160:15;;;;;;;;-1:-1:-1;;;;;28160:15:0;-1:-1:-1;;;;;28160:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28123:74:0;28133:14;28148:1;28133:17;;;;;;;;:::i;:::-;;;;;;;;;;;;28123:74;;3450:25:1;;;-1:-1:-1;;;;;28133:17:0;;;;28123:74;;3423:18:1;28123:74:0;;;;;;;28338:12;28285:11;:30;28297:14;28312:1;28297:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28297:17:0;28285:30;;;;;;;;;;;;:33;;28316:1;;28285:33;;;;;;:::i;:::-;;;;;;;;;;;:50;;:65;;;;28373:11;:30;28385:14;28400:1;28385:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28385:17:0;28373:30;;;;;;;;;;;;:33;;28404:1;;28373:33;;;;;;:::i;:::-;;;;;;;;:47;:33;;;;;:47;:50;;;;;;:::i;:::-;;;;;;28496:15;28446:11;:30;28458:14;28473:1;28458:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28458:17:0;28446:30;;;;;;;;;;;;:33;;28477:1;;28446:33;;;;;;:::i;:::-;;;;;;;;;;;:47;;:65;;;;26372:2159;;;26255:2276;-1:-1:-1;26170:3:0;;;;:::i;:::-;;;;26135:2411;;;;26041:2516;26036:3;;;;;:::i;:::-;;;;25998:2559;;;;25953:2611::o;21952:95::-;21866:6;;-1:-1:-1;;;;;21866:6:0;21876:10;21866:20;21858:65;;;;-1:-1:-1;;;21858:65:0;;;;;;;:::i;:::-;22009:30:::1;22036:1;22009:18;:30::i;:::-;21952:95::o:0;24372:1013::-;24676:1;-1:-1:-1;;;;;24632:46:0;24640:15;;;;;;;;-1:-1:-1;;;;;24640:15:0;-1:-1:-1;;;;;24640:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24632:46:0;;;24624:98;;;;-1:-1:-1;;;24624:98:0;;11393:2:1;24624:98:0;;;11375:21:1;11432:2;11412:18;;;11405:30;11471:34;11451:18;;;11444:62;-1:-1:-1;;;11522:18:1;;;11515:37;11569:19;;24624:98:0;11191:403:1;24624:98:0;24757:15;;:21;;;-1:-1:-1;;;24757:21:0;;;;24799:6;;-1:-1:-1;;;;;24757:15:0;;:19;;:21;;;;;;;;;;;;;;:15;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24749:46;;-1:-1:-1;;;24749:46:0;;-1:-1:-1;;;;;5588:32:1;;;24749:46:0;;;5570:51:1;24749:40:0;;;;;;;5543:18:1;;24749:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;24741:109;;;;-1:-1:-1;;;24741:109:0;;11801:2:1;24741:109:0;;;11783:21:1;11840:2;11820:18;;;11813:30;11879:34;11859:18;;;11852:62;-1:-1:-1;;;11930:18:1;;;11923:38;11978:19;;24741:109:0;11599:404:1;24741:109:0;24869:15;;;;;;;;-1:-1:-1;;;;;24869:15:0;-1:-1:-1;;;;;24869:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24929:15;;24861:93;;-1:-1:-1;;;24861:93:0;;-1:-1:-1;;;;;9967:15:1;;;24861:93:0;;;9949:34:1;24929:15:0;;;9999:18:1;;;9992:43;10051:18;;;10044:34;;;24861:53:0;;;;;9884:18:1;;24861:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24975:15;;;;;;;;-1:-1:-1;;;;;24975:15:0;-1:-1:-1;;;;;24975:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25011:15;;:40;;-1:-1:-1;;;25011:40:0;;-1:-1:-1;;;;;5588:32:1;;;25011:40:0;;;5570:51:1;24965:39:0;;;;;;25005:4;;25011:15;;;:34;;5543:18:1;;25011:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24965:87;;-1:-1:-1;;;;;;24965:87:0;;;;;;;-1:-1:-1;;;;;10470:32:1;;;24965:87:0;;;10452:51:1;10519:18;;;10512:34;10425:18;;24965:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25063:15:0;;-1:-1:-1;;;;;25063:15:0;;-1:-1:-1;25063:60:0;;-1:-1:-1;25124:4:0;25130:6;25138:18;25145:11;25130:6;25138:18;:::i;:::-;25063:94;;-1:-1:-1;;;;;;25063:94:0;;;;;;;-1:-1:-1;;;;;12228:32:1;;;25063:94:0;;;12210:51:1;12277:18;;;12270:34;;;;12320:18;;;12313:34;12183:18;;25063:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25197:15;;;;;;;;-1:-1:-1;;;;;25197:15:0;-1:-1:-1;;;;;25197:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25173:55:0;25183:4;-1:-1:-1;;;;;25173:55:0;;25221:6;25173:55;;;;3450:25:1;;3438:2;3423:18;;3304:177;25173:55:0;;;;;;;;25239:130;25258:4;25264:6;25272;25280;25288;25296:13;25311;25326;25341:11;25354:14;25239:17;:130::i;:::-;24372:1013;;;;;;;;;;:::o;23137:215::-;21866:6;;-1:-1:-1;;;;;21866:6:0;21876:10;21866:20;21858:65;;;;-1:-1:-1;;;21858:65:0;;;;;;;:::i;:::-;23223:1:::1;23216:4;:8;23208:31;;;::::0;-1:-1:-1;;;23208:31:0;;12560:2:1;23208:31:0::1;::::0;::::1;12542:21:1::0;12599:2;12579:18;;;12572:30;-1:-1:-1;;;12618:18:1;;;12611:40;12668:18;;23208:31:0::1;12358:334:1::0;23208:31:0::1;23289:15;::::0;23255:56:::1;::::0;;576:25:1;;;632:2;617:18;;610:34;;;23277:10:0::1;::::0;23255:56:::1;::::0;549:18:1;23255:56:0::1;;;;;;;23322:15;:22:::0;23137:215::o;22167:108::-;22215:16;22251;22244:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22244:23:0;;;;;;;;;;;;;;;;;;;;;;;22167:108;:::o;22055:104::-;22101:16;22137:14;22130:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22130:21:0;;;;;;;;;;;;;;;;;;;;;;22055:104;:::o;22756:254::-;21866:6;;-1:-1:-1;;;;;21866:6:0;21876:10;21866:20;21858:65;;;;-1:-1:-1;;;21858:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22837:22:0;::::1;22829:73;;;::::0;-1:-1:-1;;;22829:73:0;;12899:2:1;22829:73:0::1;::::0;::::1;12881:21:1::0;12938:2;12918:18;;;12911:30;12977:34;12957:18;;;12950:62;-1:-1:-1;;;13028:18:1;;;13021:36;13074:19;;22829:73:0::1;12697:402:1::0;22829:73:0::1;22933:6;::::0;-1:-1:-1;;;;;22921:18:0;;::::1;22933:6:::0;::::1;22921:18;;22913:50;;;::::0;-1:-1:-1;;;22913:50:0;;13306:2:1;22913:50:0::1;::::0;::::1;13288:21:1::0;13345:2;13325:18;;;13318:30;-1:-1:-1;;;13364:18:1;;;13357:49;13423:18;;22913:50:0::1;13104:343:1::0;22913:50:0::1;22974:28;22993:8;22974:18;:28::i;28572:745::-:0;28629:6;28624:686;28640:16;:23;28638:25;;28624:686;;;28684:14;28701:17;:38;28719:16;28736:1;28719:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28719:19:0;28701:38;;;;;;;;;;;;:45;28803:16;:19;;28701:45;;-1:-1:-1;28785:17:0;;28719:19;;28803:16;28820:1;;28803:19;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28803:19:0;28785:38;;;;;;;;;;;;28803:19;28785:52;;;-1:-1:-1;28855:10:0;;;;;:55;;-1:-1:-1;28904:6:0;28869:31;28887:13;28869:15;:31;:::i;:::-;:41;;28855:55;28852:447;;;29123:15;;29156:16;:19;;-1:-1:-1;;;;;29123:15:0;;;;:32;;29156:16;29173:1;;29156:19;;;;;;:::i;:::-;;;;;;;;;;;29123:53;;;;;;-1:-1:-1;;;;;;29123:53:0;;;-1:-1:-1;;;;;29156:19:0;;;29123:53;;;5570:51:1;5543:18;;29123:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29268:15;29213:17;:38;29231:16;29248:1;29231:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29231:19:0;29213:38;;;;;;;;;;;;29231:19;29213:52;:70;28852:447;28669:641;;28664:3;;;;;:::i;:::-;;;;28624:686;;23666:183;23751:6;;;-1:-1:-1;;;;;23768:17:0;;;-1:-1:-1;;;;;;23768:17:0;;;;;;;23801:40;;23751:6;;;23768:17;23751:6;;23801:40;;23732:16;;23801:40;23721:128;23666:183;:::o;25396:549::-;25657:1;25643:11;:15;25639:298;;;25675:42;;-1:-1:-1;;;25675:42:0;;25696:14;25675:42;;;5836:25:1;-1:-1:-1;;;;;5897:32:1;;5877:18;;;5870:60;25675:12:0;;:20;;5809:18:1;;25675:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25744:11;:17;25756:4;-1:-1:-1;;;;;25744:17:0;-1:-1:-1;;;;;25744:17:0;;;;;;;;;;;;25767:157;;;;;;;;25779:10;25767:157;;;;25791:6;-1:-1:-1;;;;;25767:157:0;;;;;25799:6;-1:-1:-1;;;;;25767:157:0;;;;;25807:6;-1:-1:-1;;;;;25767:157:0;;;;;25815:13;25767:157;;;;25830:13;25767:157;;;;25845:13;25767:157;;;;25860:1;25767:157;;;;25863:11;25767:157;;;;25904:1;25892:11;:13;;;;:::i;:::-;25876:30;;:14;:30;:::i;:::-;25767:157;;25908:15;25767:157;;;;;25744:181;;;;;;;;-1:-1:-1;25744:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25744:181:0;;;-1:-1:-1;;;;;;25744:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25396:549;;;;;;;;;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:1:o;764:1682::-;991:2;1043:21;;;1113:13;;1016:18;;;1135:22;;;962:4;;991:2;1176;;1194:18;;;;1235:15;;;962:4;1278:1142;1292:6;1289:1;1286:13;1278:1142;;;1351:13;;1389:9;;1377:22;;1438:11;;;1432:18;-1:-1:-1;;;;;721:31:1;;;1496:12;;;709:44;1550:11;;;1544:18;721:31;;1610:12;;;709:44;1646:4;1691:11;;;1685:18;721:31;;;1751:12;;;709:44;1787:4;1831:11;;;1825:18;1811:12;;;1804:40;1867:4;1911:11;;;1905:18;1891:12;;;1884:40;1947:4;1991:11;;;1985:18;1971:12;;;1964:40;2027:4;2071:11;;;2065:18;2051:12;;;2044:40;2107:6;2153:11;;;2147:18;2133:12;;;2126:40;2190:6;2237:12;;;2231:19;2216:13;;;2209:42;2275:6;2322:12;;;2316:19;2301:13;;;2294:42;2365:6;2356:16;;;;2395:15;;;;1314:1;1307:9;1278:1142;;;-1:-1:-1;2437:3:1;;764:1682;-1:-1:-1;;;;;;;764:1682:1:o;2451:114::-;2535:4;2528:5;2524:16;2517:5;2514:27;2504:55;;2555:1;2552;2545:12;2570:452;2645:6;2653;2661;2714:2;2702:9;2693:7;2689:23;2685:32;2682:52;;;2730:1;2727;2720:12;2682:52;2769:9;2756:23;2788:31;2813:5;2788:31;:::i;:::-;2838:5;-1:-1:-1;2890:2:1;2875:18;;2862:32;;-1:-1:-1;2946:2:1;2931:18;;2918:32;2959:31;2918:32;2959:31;:::i;:::-;3009:7;2999:17;;;2570:452;;;;;:::o;3486:1085::-;3626:6;3634;3642;3650;3658;3666;3674;3682;3690;3698;3751:3;3739:9;3730:7;3726:23;3722:33;3719:53;;;3768:1;3765;3758:12;3719:53;3807:9;3794:23;3826:31;3851:5;3826:31;:::i;:::-;3876:5;-1:-1:-1;3933:2:1;3918:18;;3905:32;3946:33;3905:32;3946:33;:::i;:::-;3998:7;-1:-1:-1;4057:2:1;4042:18;;4029:32;4070:33;4029:32;4070:33;:::i;:::-;4122:7;-1:-1:-1;4181:2:1;4166:18;;4153:32;4194:33;4153:32;4194:33;:::i;:::-;3486:1085;;;;-1:-1:-1;3486:1085:1;;4300:3;4285:19;;4272:33;;4352:3;4337:19;;4324:33;;-1:-1:-1;4404:3:1;4389:19;;4376:33;;-1:-1:-1;4456:3:1;4441:19;;4428:33;;-1:-1:-1;4508:3:1;4493:19;;4480:33;;-1:-1:-1;4560:3:1;4545:19;;;4532:33;;-1:-1:-1;3486:1085:1;-1:-1:-1;;3486:1085:1:o;4576:180::-;4635:6;4688:2;4676:9;4667:7;4663:23;4659:32;4656:52;;;4704:1;4701;4694:12;4656:52;-1:-1:-1;4727:23:1;;4576:180;-1:-1:-1;4576:180:1:o;4761:658::-;4932:2;4984:21;;;5054:13;;4957:18;;;5076:22;;;4903:4;;4932:2;5155:15;;;;5129:2;5114:18;;;4903:4;5198:195;5212:6;5209:1;5206:13;5198:195;;;5277:13;;-1:-1:-1;;;;;5273:39:1;5261:52;;5368:15;;;;5333:12;;;;5309:1;5227:9;5198:195;;;-1:-1:-1;5410:3:1;;4761:658;-1:-1:-1;;;;;;4761:658:1:o;6203:356::-;6405:2;6387:21;;;6424:18;;;6417:30;6483:34;6478:2;6463:18;;6456:62;6550:2;6535:18;;6203:356::o;6896:127::-;6957:10;6952:3;6948:20;6945:1;6938:31;6988:4;6985:1;6978:15;7012:4;7009:1;7002:15;7028:127;7089:10;7084:3;7080:20;7077:1;7070:31;7120:4;7117:1;7110:15;7144:4;7141:1;7134:15;7160:125;7200:4;7228:1;7225;7222:8;7219:34;;;7233:18;;:::i;:::-;-1:-1:-1;7270:9:1;;7160:125::o;7290:247::-;7358:6;7411:2;7399:9;7390:7;7386:23;7382:32;7379:52;;;7427:1;7424;7417:12;7379:52;7459:9;7453:16;7478:29;7501:5;7478:29;:::i;7542:422::-;7631:1;7674:5;7631:1;7688:270;7709:7;7699:8;7696:21;7688:270;;;7768:4;7764:1;7760:6;7756:17;7750:4;7747:27;7744:53;;;7777:18;;:::i;:::-;7827:7;7817:8;7813:22;7810:55;;;7847:16;;;;7810:55;7926:22;;;;7886:15;;;;7688:270;;;7692:3;7542:422;;;;;:::o;7969:806::-;8018:5;8048:8;8038:80;;-1:-1:-1;8089:1:1;8103:5;;8038:80;8137:4;8127:76;;-1:-1:-1;8174:1:1;8188:5;;8127:76;8219:4;8237:1;8232:59;;;;8305:1;8300:130;;;;8212:218;;8232:59;8262:1;8253:10;;8276:5;;;8300:130;8337:3;8327:8;8324:17;8321:43;;;8344:18;;:::i;:::-;-1:-1:-1;;8400:1:1;8386:16;;8415:5;;8212:218;;8514:2;8504:8;8501:16;8495:3;8489:4;8486:13;8482:36;8476:2;8466:8;8463:16;8458:2;8452:4;8449:12;8445:35;8442:77;8439:159;;;-1:-1:-1;8551:19:1;;;8583:5;;8439:159;8630:34;8655:8;8649:4;8630:34;:::i;:::-;8700:6;8696:1;8692:6;8688:19;8679:7;8676:32;8673:58;;;8711:18;;:::i;:::-;8749:20;;-1:-1:-1;7969:806:1;;;;;:::o;8780:140::-;8838:5;8867:47;8908:4;8898:8;8894:19;8888:4;8867:47;:::i;8925:251::-;8995:6;9048:2;9036:9;9027:7;9023:23;9019:32;9016:52;;;9064:1;9061;9054:12;9016:52;9096:9;9090:16;9115:31;9140:5;9115:31;:::i;9181:168::-;9221:7;9287:1;9283;9279:6;9275:14;9272:1;9269:21;9264:1;9257:9;9250:17;9246:45;9243:71;;;9294:18;;:::i;:::-;-1:-1:-1;9334:9:1;;9181:168::o;9354:217::-;9394:1;9420;9410:132;;9464:10;9459:3;9455:20;9452:1;9445:31;9499:4;9496:1;9489:15;9527:4;9524:1;9517:15;9410:132;-1:-1:-1;9556:9:1;;9354:217::o;9576:128::-;9616:3;9647:1;9643:6;9640:1;9637:13;9634:39;;;9653:18;;:::i;:::-;-1:-1:-1;9689:9:1;;9576:128::o;10089:184::-;10159:6;10212:2;10200:9;10191:7;10187:23;10183:32;10180:52;;;10228:1;10225;10218:12;10180:52;-1:-1:-1;10251:16:1;;10089:184;-1:-1:-1;10089:184:1:o;11051:135::-;11090:3;-1:-1:-1;;11111:17:1;;11108:43;;;11131:18;;:::i;:::-;-1:-1:-1;11178:1:1;11167:13;;11051:135::o

Swarm Source

ipfs://384005fd5f7fa797a3bce216b23db3fd21d134ab6b97f98a1809adeb8ae098a8
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading