ETH Price: $3,365.00 (-3.17%)

Contract

0x0b1F6ACaB2BFB0b72d61c7BE8455f0D5F72c617C
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve167635442023-03-05 17:00:59661 days ago1678035659IN
0x0b1F6ACa...5F72c617C
0 ETH0.000583323.44666956
Approve149568342022-06-13 16:03:58926 days ago1655136238IN
0x0b1F6ACa...5F72c617C
0 ETH0.00697481148.9135752
Approve149568262022-06-13 16:01:21926 days ago1655136081IN
0x0b1F6ACa...5F72c617C
0 ETH0.00690276147.33766959

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MPondLogic

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2020-12-17
*/

pragma solidity 0.5.17;
pragma experimental ABIEncoderV2;

/**
 * @title Initializable
 *
 * @dev Helper contract to support initializer functions. To use it, replace
 * the constructor with a function that has the `initializer` modifier.
 * WARNING: Unlike constructors, initializer functions must be manually
 * invoked. This applies both to deploying an Initializable contract, as well
 * as extending an Initializable contract via inheritance.
 * WARNING: When used with inheritance, manual care must be taken to not invoke
 * a parent initializer twice, or ensure that all initializers are idempotent,
 * because this is not dealt with automatically as with constructors.
 */
contract Initializable {

  /**
   * @dev Indicates that the contract has been initialized.
   */
  bool private initialized;

  /**
   * @dev Indicates that the contract is in the process of being initialized.
   */
  bool private initializing;

  /**
   * @dev Modifier to use in the initializer function of a contract.
   */
  modifier initializer() {
    require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized");

    bool isTopLevelCall = !initializing;
    if (isTopLevelCall) {
      initializing = true;
      initialized = true;
    }

    _;

    if (isTopLevelCall) {
      initializing = false;
    }
  }

  /// @dev Returns true if and only if the function is running in the constructor
  function isConstructor() private view returns (bool) {
    // extcodesize checks the size of the code stored in an address, and
    // address returns the current address. Since the code is still not
    // deployed when running a constructor, any checks on its code size will
    // yield zero, making it an effective way to detect if a contract is
    // under construction or not.
    address self = address(this);
    uint256 cs;
    assembly { cs := extcodesize(self) }
    return cs == 0;
  }

  // Reserved storage space to allow for layout changes in the future.
  uint256[50] private ______gap;
}


contract MPondLogic is Initializable {
    /// @notice EIP-20 token name for this token
    string public name;

    /// @notice EIP-20 token symbol for this token
    string public symbol;

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

    /// @notice Total number of tokens in circulation
    uint256 public totalSupply; // 10k MPond
    uint256 public bridgeSupply; // 3k MPond

    address public dropBridge;
    /// @notice Allowance amounts on behalf of others
    mapping(address => mapping(address => uint96)) internal allowances;

    /// @notice Official record of token balances for each account
    mapping(address => uint96) internal balances;

    /// @notice A record of each accounts delegate
    mapping(address => mapping(address => uint96)) 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 DOMAIN_TYPEHASH;

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public DELEGATION_TYPEHASH;

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public UNDELEGATION_TYPEHASH;

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

    /// customized params
    address public admin;
    mapping(address => bool) public isWhiteListed;
    bool public enableAllTranfers;

    /// @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,
        uint256 previousBalance,
        uint256 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 Initializer a new MPond token
     * @param account The initial account to grant all the tokens
     */
    function initialize(
        address account,
        address bridge,
        address dropBridgeAddress
    ) public initializer {
        createConstants();
        require(
            account != bridge,
            "Bridge and account should not be the same address"
        );
        balances[bridge] = uint96(bridgeSupply);
        delegates[bridge][address(0)] = uint96(bridgeSupply);
        isWhiteListed[bridge] = true;
        emit Transfer(address(0), bridge, bridgeSupply);

        uint96 remainingSupply = sub96(
            uint96(totalSupply),
            uint96(bridgeSupply),
            "MPond: Subtraction overflow in the constructor"
        );
        balances[account] = remainingSupply;
        delegates[account][address(0)] = remainingSupply;
        isWhiteListed[account] = true;
        dropBridge = dropBridgeAddress;
        emit Transfer(address(0), account, uint256(remainingSupply));
    }

    function createConstants() internal {
        name = "Marlin";
        symbol = "MPond";
        decimals = 18;
        totalSupply = 10000e18;
        bridgeSupply = 7000e18;
        DOMAIN_TYPEHASH = keccak256(
            "EIP712Domain(string name,uint256 chainId,address verifyingContract)"
        );
        DELEGATION_TYPEHASH = keccak256(
            "Delegation(address delegatee,uint256 nonce,uint256 expiry,uint96 amount)"
        );
        UNDELEGATION_TYPEHASH = keccak256(
            "Unelegation(address delegatee,uint256 nonce,uint256 expiry,uint96 amount)"
        );
        admin = msg.sender;
        // enableAllTranfers = true; //This is only for testing, will be false
    }

    function addWhiteListAddress(address _address)
        external
        onlyAdmin("Only admin can whitelist")
        returns (bool)
    {
        isWhiteListed[_address] = true;
        return true;
    }

    function removeWhiteListAddress(address _address)
        external
        onlyAdmin("Only admin can remove from whitelist")
        returns (bool)
    {
        isWhiteListed[_address] = false;
        return true;
    }

    function enableAllTransfers()
        external
        onlyAdmin("Only admin can enable all transfers")
        returns (bool)
    {
        enableAllTranfers = true;
        return true;
    }

    function disableAllTransfers()
        external
        onlyAdmin("Only admin can disable all transfers")
        returns (bool)
    {
        enableAllTranfers = false;
        return true;
    }

    function changeDropBridge(address _updatedBridge)
        public
        onlyAdmin("Only admin can change drop bridge")
    {
        dropBridge = _updatedBridge;
    }

    function isWhiteListedTransfer(address _address1, address _address2)
        public
        view
        returns (bool)
    {
        if (
            enableAllTranfers ||
            isWhiteListed[_address1] ||
            isWhiteListed[_address2]
        ) {
            return true;
        } else if (_address1 == dropBridge) {
            return true;
        }
        return false;
    }

    /**
     * @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 (uint256)
    {
        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, uint256 rawAmount)
        external
        returns (bool)
    {
        uint96 amount;
        if (rawAmount == uint256(-1)) {
            amount = uint96(-1);
        } else {
            amount = safe96(
                rawAmount,
                "MPond::approve: amount exceeds 96 bits"
            );
        }

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

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

    function increaseAllowance(address spender, uint256 addedAmount)
        external
        returns (bool)
    {
        uint96 amount;
        if (addedAmount == uint256(-1)) {
            amount = uint96(-1);
        } else {
            amount = safe96(
                addedAmount,
                "MPond::approve: addedAmount exceeds 96 bits"
            );
        }

        allowances[msg.sender][spender] = add96(
            allowances[msg.sender][spender],
            amount,
            "MPond: increaseAllowance allowance value overflows"
        );
        emit Approval(msg.sender, spender, allowances[msg.sender][spender]);
        return true;
    }

    function decreaseAllowance(address spender, uint256 removedAmount)
        external
        returns (bool)
    {
        uint96 amount;
        if (removedAmount == uint256(-1)) {
            amount = uint96(-1);
        } else {
            amount = safe96(
                removedAmount,
                "MPond::approve: removedAmount exceeds 96 bits"
            );
        }

        allowances[msg.sender][spender] = sub96(
            allowances[msg.sender][spender],
            amount,
            "MPond: decreaseAllowance allowance value underflows"
        );
        emit Approval(msg.sender, spender, allowances[msg.sender][spender]);
        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 (uint256) {
        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, uint256 rawAmount) external returns (bool) {
        require(
            isWhiteListedTransfer(msg.sender, dst),
            "Atleast one of the address (src or dst) should be whitelisted or all transfers must be enabled via enableAllTransfers()"
        );
        uint96 amount = safe96(
            rawAmount,
            "MPond::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,
        uint256 rawAmount
    ) external returns (bool) {
        require(
            isWhiteListedTransfer(src, dst),
            "Atleast one of the address (src or dst) should be whitelisted or all transfers must be enabled via enableAllTransfers()"
        );
        address spender = msg.sender;
        uint96 spenderAllowance = allowances[src][spender];
        uint96 amount = safe96(
            rawAmount,
            "MPond::approve: amount exceeds 96 bits"
        );

        if (spender != src && spenderAllowance != uint96(-1)) {
            uint96 newAllowance = sub96(
                spenderAllowance,
                amount,
                "MPond::transferFrom: transfer amount exceeds spender allowance"
            );
            allowances[src][spender] = newAllowance;

            emit Approval(src, spender, newAllowance);
        }

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

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

    function undelegate(address delegatee, uint96 amount) public {
        return _undelegate(msg.sender, delegatee, amount);
    }

    /**
     * @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,
        uint256 nonce,
        uint256 expiry,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint96 amount
    ) public {
        bytes32 domainSeparator = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(name)),
                getChainId(),
                address(this)
            )
        );
        bytes32 structHash = keccak256(
            abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry, amount)
        );
        bytes32 digest = keccak256(
            abi.encodePacked("\x19\x01", domainSeparator, structHash)
        );
        address signatory = ecrecover(digest, v, r, s);
        require(
            signatory != address(0),
            "MPond::delegateBySig: invalid signature"
        );
        require(
            nonce == nonces[signatory]++,
            "MPond::delegateBySig: invalid nonce"
        );
        require(now <= expiry, "MPond::delegateBySig: signature expired");
        return _delegate(signatory, delegatee, amount);
    }

    function undelegateBySig(
        address delegatee,
        uint256 nonce,
        uint256 expiry,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint96 amount
    ) public {
        bytes32 domainSeparator = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(name)),
                getChainId(),
                address(this)
            )
        );
        bytes32 structHash = keccak256(
            abi.encode(UNDELEGATION_TYPEHASH, delegatee, nonce, expiry, amount)
        );
        bytes32 digest = keccak256(
            abi.encodePacked("\x19\x01", domainSeparator, structHash)
        );
        address signatory = ecrecover(digest, v, r, s);
        require(
            signatory != address(0),
            "MPond::undelegateBySig: invalid signature"
        );
        require(
            nonce == nonces[signatory]++,
            "MPond::undelegateBySig: invalid nonce"
        );
        require(now <= expiry, "MPond::undelegateBySig: signature expired");
        return _undelegate(signatory, delegatee, amount);
    }

    /**
     * @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, uint256 blockNumber)
        public
        view
        returns (uint96)
    {
        require(
            blockNumber < block.number,
            "MPond::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,
        uint96 amount
    ) internal {
        delegates[delegator][address(0)] = sub96(
            delegates[delegator][address(0)],
            amount,
            "MPond: delegates underflow"
        );
        delegates[delegator][delegatee] = add96(
            delegates[delegator][delegatee],
            amount,
            "MPond: delegates overflow"
        );

        emit DelegateChanged(delegator, address(0), delegatee);

        _moveDelegates(address(0), delegatee, amount);
    }

    function _undelegate(
        address delegator,
        address delegatee,
        uint96 amount
    ) internal {
        delegates[delegator][delegatee] = sub96(
            delegates[delegator][delegatee],
            amount,
            "MPond: undelegates underflow"
        );
        delegates[delegator][address(0)] = add96(
            delegates[delegator][address(0)],
            amount,
            "MPond: delegates underflow"
        );
        emit DelegateChanged(delegator, delegatee, address(0));
        _moveDelegates(delegatee, address(0), amount);
    }

    function _transferTokens(
        address src,
        address dst,
        uint96 amount
    ) internal {
        require(
            src != address(0),
            "MPond::_transferTokens: cannot transfer from the zero address"
        );
        require(
            delegates[src][address(0)] >= amount,
            "MPond: _transferTokens: undelegated amount should be greater than transfer amount"
        );
        require(
            dst != address(0),
            "MPond::_transferTokens: cannot transfer to the zero address"
        );

        balances[src] = sub96(
            balances[src],
            amount,
            "MPond::_transferTokens: transfer amount exceeds balance"
        );
        delegates[src][address(0)] = sub96(
            delegates[src][address(0)],
            amount,
            "MPond: _tranferTokens: undelegate subtraction error"
        );

        balances[dst] = add96(
            balances[dst],
            amount,
            "MPond::_transferTokens: transfer amount overflows"
        );
        delegates[dst][address(0)] = add96(
            delegates[dst][address(0)],
            amount,
            "MPond: _transferTokens: undelegate addition error"
        );
        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,
                    "MPond::_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,
                    "MPond::_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,
            "MPond::_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(uint256 n, string memory errorMessage)
        internal
        pure
        returns (uint32)
    {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    function safe96(uint256 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 pure returns (uint256) {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        return chainId;
    }

    modifier onlyAdmin(string memory _error) {
        require(msg.sender == admin, _error);
        _;
    }
}

Contract Security Audit

Contract ABI

[{"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"},{"constant":true,"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UNDELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addWhiteListAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bridgeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_updatedBridge","type":"address"}],"name":"changeDropBridge","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"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"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"removedAmount","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"delegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"delegateBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"disableAllTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dropBridge","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"enableAllTranfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"enableAllTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedAmount","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"bridge","type":"address"},{"internalType":"address","name":"dropBridgeAddress","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_address1","type":"address"},{"internalType":"address","name":"_address2","type":"address"}],"name":"isWhiteListedTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeWhiteListAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"undelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"undelegateBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50613ec2806100206000396000f3fe608060405234801561001057600080fd5b506004361061025c5760003560e01c806395d89b4111610145578063ce114c25116100bd578063e7a324dc1161008c578063f425859211610071578063f4258592146104c2578063f851a440146104d5578063fd71d86a146104ea5761025c565b8063e7a324dc14610499578063f1127ed8146104a15761025c565b8063ce114c251461044d578063dd62ed3e14610460578063e1032b8314610473578063e5843242146104865761025c565b8063b4b5ea5711610114578063c0c53b8b116100f9578063c0c53b8b1461042a578063c43ff0c81461043d578063c6d6125e146104455761025c565b8063b4b5ea571461040f578063b9371343146104225761025c565b806395d89b41146103ce578063a457c2d7146103d6578063a65835da146103e9578063a9059cbb146103fc5761025c565b806367cb1601116101d857806370a08231116101a75780637ecebe001161018c5780637ecebe00146103955780638164c309146103a85780638b41166c146103bb5761025c565b806370a0823114610362578063782d6fe1146103755761025c565b806367cb1601146103145780636ab5cc381461031c5780636f9170f61461032f5780636fcfff45146103425761025c565b806318160ddd1161022f57806323b872dd1161021457806323b872dd146102d9578063313ce567146102ec57806339509351146103015761025c565b806318160ddd146102c957806320606b70146102d15761025c565b806302cb3a881461026157806306fdde0314610276578063095ea7b31461029457806316aeac20146102b4575b600080fd5b61027461026f366004612e58565b6104f2565b005b61027e610724565b60405161028b91906138db565b60405180910390f35b6102a76102a2366004612e28565b6107d0565b60405161028b9190613800565b6102bc6108f5565b60405161028b919061380e565b6102bc6108fb565b6102bc610901565b6102a76102e7366004612de5565b610907565b6102f4610aeb565b60405161028b91906139e5565b6102a761030f366004612e28565b610af4565b6102a7610c6d565b6102a761032a366004612d5e565b610d12565b6102a761033d366004612d38565b610dbc565b610355610350366004612d38565b610dd1565b60405161028b91906139bc565b6102bc610370366004612d38565b610de9565b610388610383366004612e28565b610e1f565b60405161028b9190613a01565b6102bc6103a3366004612d38565b611101565b6102a76103b6366004612d38565b611113565b6102746103c9366004612f24565b6111f5565b61027e611204565b6102a76103e4366004612e28565b61127d565b6102746103f7366004612e58565b611359565b6102a761040a366004612e28565b611575565b61038861041d366004612d38565b6115f2565b6102bc6116a0565b610274610438366004612d98565b6116a6565b6102a7611a44565b6102a7611a4d565b6102a761045b366004612d38565b611aec565b6102bc61046e366004612d5e565b611bad565b610274610481366004612f24565b611bf3565b610388610494366004612d5e565b611bfe565b6102bc611c29565b6104b46104af366004612ef4565b611c2f565b60405161028b9291906139ca565b6102746104d0366004612d38565b611c6a565b6104dd611d20565b60405161028b91906137f2565b6104dd611d3c565b6000603e5460336040516105069190613794565b6040518091039020610516611d58565b3060405160200161052a9493929190613868565b60405160208183030381529060405280519060200120905060006040548989898660405160200161055f95949392919061381c565b6040516020818303038152906040528051906020012090506000828260405160200161058c9291906137ab565b6040516020818303038152906040528051906020012090506000600182898989604051600081526020016040526040516105c994939291906138a6565b6020604051602081039080840390855afa1580156105eb573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661066c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061391c565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526041602052604090208054600181019091558a146106d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061395c565b8842111561070c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061392c565b610717818c87611d5d565b5050505050505050505050565b6033805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156107c85780601f1061079d576101008083540402835291602001916107c8565b820191906000526020600020905b8154815290600101906020018083116107ab57829003601f168201915b505050505081565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561082257507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610847565b61084483604051806060016040528060268152602001613cbf60269139611f41565b90505b33600081815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff891680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108e19085906139f3565b60405180910390a360019150505b92915050565b60405481565b60365481565b603e5481565b60006109138484610d12565b610949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061390c565b73ffffffffffffffffffffffffffffffffffffffff841660009081526039602090815260408083203380855290835281842054825160608101909352602680845291946bffffffffffffffffffffffff9091169390926109b1928892613cbf90830139611f41565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156109fd57506bffffffffffffffffffffffff82811614155b15610ad1576000610a2783836040518060600160405280603e8152602001613c25603e9139611f93565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152603960209081526040808320948a16808452949091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff86161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ac79085906139f3565b60405180910390a3505b610adc878783611ff6565b600193505050505b9392505050565b60355460ff1681565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831415610b4657507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b6b565b610b68836040518060600160405280602b8152602001613baf602b9139611f41565b90505b33600090815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452825291829020548251606081019093526032808452610bd0936bffffffffffffffffffffffff9092169285929190613d0d908301396123e5565b33600081815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a1680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9586161790819055915190937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925926108e1929116906139f3565b6000604051806060016040528060238152602001613e0b60239139604254819073ffffffffffffffffffffffffffffffffffffffff163314610cdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b50604480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591505b5090565b60445460009060ff1680610d4b575073ffffffffffffffffffffffffffffffffffffffff831660009081526043602052604090205460ff165b80610d7b575073ffffffffffffffffffffffffffffffffffffffff821660009081526043602052604090205460ff165b15610d88575060016108ef565b60385473ffffffffffffffffffffffffffffffffffffffff84811691161415610db3575060016108ef565b50600092915050565b60436020526000908152604090205460ff1681565b603d6020526000908152604090205463ffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff166000908152603a60205260409020546bffffffffffffffffffffffff1690565b6000438210610e5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061396c565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603d602052604090205463ffffffff1680610e955760009150506108ef565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860181168552925290912054168310610f6d5773ffffffffffffffffffffffffffffffffffffffff84166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490940163ffffffff168352929052205464010000000090046bffffffffffffffffffffffff1690506108ef565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c6020908152604080832083805290915290205463ffffffff16831015610fb55760009150506108ef565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8163ffffffff168163ffffffff1611156110a957600282820363ffffffff16048103611005612c5c565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603c6020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff169181019190915290871415611084576020015194506108ef9350505050565b805163ffffffff1687111561109b578193506110a2565b6001820392505b5050610fdb565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603c6020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b60416020526000908152604090205481565b60408051808201909152601881527f4f6e6c792061646d696e2063616e2077686974656c6973740000000000000000602082015260425460009190819073ffffffffffffffffffffffffffffffffffffffff16331461119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b50505073ffffffffffffffffffffffffffffffffffffffff16600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915590565b611200338383612440565b5050565b6034805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156107c85780601f1061079d576101008083540402835291602001916107c8565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156112cf57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6112f4565b6112f1836040518060600160405280602d8152602001613d72602d9139611f41565b90505b33600090815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452825291829020548251606081019093526033808452610bd0936bffffffffffffffffffffffff9092169285929190613d3f90830139611f93565b6000603e54603360405161136d9190613794565b604051809103902061137d611d58565b306040516020016113919493929190613868565b6040516020818303038152906040528051906020012090506000603f54898989866040516020016113c695949392919061381c565b604051602081830303815290604052805190602001209050600082826040516020016113f39291906137ab565b60405160208183030381529060405280519060200120905060006001828989896040516000815260200160405260405161143094939291906138a6565b6020604051602081039080840390855afa158015611452573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061398c565b73ffffffffffffffffffffffffffffffffffffffff811660009081526041602052604090208054600181019091558a14611530576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061393c565b8842111561156a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061399c565b610717818c87612440565b60006115813384610d12565b6115b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061390c565b60006115db83604051806060016040528060278152602001613bfe60279139611f41565b90506115e8338583611ff6565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603d602052604081205463ffffffff168061162a576000610ae4565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff169392505050565b60375481565b600054610100900460ff16806116bf57506116bf61261d565b806116cd575060005460ff16155b611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061394c565b600054610100900460ff1615801561176957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611771612623565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610663906138ec565b6037805473ffffffffffffffffffffffffffffffffffffffff85166000818152603a6020908152604080832080546bffffffffffffffffffffffff9687167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000918216179091558654603b845282852085805284528285208054919097169116179094558282526043905282812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055925491519092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916118c0919061380e565b60405180910390a360006118f16036546037546040518060600160405280602e8152602001613b81602e9139611f93565b73ffffffffffffffffffffffffffffffffffffffff8681166000818152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166bffffffffffffffffffffffff8916908117909255603b84528285208580528452828520805490911682179055848452604390925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055603880547fffffffffffffffffffffffff000000000000000000000000000000000000000016958a16959095179094559251939450909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91611a06919061380e565b60405180910390a3508015611a3e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50505050565b60445460ff1681565b6000604051806060016040528060248152602001613bda60249139604254819073ffffffffffffffffffffffffffffffffffffffff163314611abc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b5050604480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550600190565b6000604051806060016040528060248152602001613b2c60249139604254819073ffffffffffffffffffffffffffffffffffffffff163314611b5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b50505073ffffffffffffffffffffffffffffffffffffffff16600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600190565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526039602090815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b611200338383611d5d565b603b6020908152600092835260408084209091529082529020546bffffffffffffffffffffffff1681565b603f5481565b603c60209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b604051806060016040528060218152602001613e5f60219139604254819073ffffffffffffffffffffffffffffffffffffffff163314611cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b5050603880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60425473ffffffffffffffffffffffffffffffffffffffff1681565b60385473ffffffffffffffffffffffffffffffffffffffff1681565b465b90565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152603b60209081526040808320938616835292815290829020548251808401909352601c83527f4d506f6e643a20756e64656c65676174657320756e646572666c6f770000000091830191909152611de3916bffffffffffffffffffffffff909116908390611f93565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320938716835292815282822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95861617905581805290829020548251808401909352601a83527f4d506f6e643a2064656c65676174657320756e646572666c6f7700000000000091830191909152611e9792169083906123e5565b73ffffffffffffffffffffffffffffffffffffffff8481166000818152603b6020908152604080832083805290915280822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff96909616959095179094559251918516917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f908490a4611f3c82600083612763565b505050565b6000816c010000000000000000000000008410611f8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611fee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8316612043576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610663906139ac565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603b602090815260408083208380529091529020546bffffffffffffffffffffffff808316911610156120be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610663906138fc565b73ffffffffffffffffffffffffffffffffffffffff821661210b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061397c565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603a6020908152604091829020548251606081019093526037808452612168936bffffffffffffffffffffffff9092169285929190613dd490830139611f93565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff958616179055603b82528083208380528252918290205482516060810190935260338084526122009491909116928592909190613c8c90830139611f93565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9687161790559286168252603a81529082902054825160608101909352603180845261229e9491909116928592909190613b50908301396123e5565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff958616179055603b82528083208380528252918290205482516060810190935260318084526123369491909116928592909190613e2e908301396123e5565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152603b602090815260408083208380529091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906123d89085906139f3565b60405180910390a3505050565b6000838301826bffffffffffffffffffffffff8087169083161015612437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b50949350505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603b60209081526040808320838052825291829020548251808401909352601a83527f4d506f6e643a2064656c65676174657320756e646572666c6f77000000000000918301919091526124c2916bffffffffffffffffffffffff909116908390611f93565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251808401909352601983527f4d506f6e643a2064656c656761746573206f766572666c6f77000000000000009183019190915261257592169083906123e5565b73ffffffffffffffffffffffffffffffffffffffff8481166000818152603b602090815260408083209488168084529490915280822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff969096169590951790945592519192917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f908390a4611f3c60008383612763565b303b1590565b6040805180820190915260068082527f4d61726c696e0000000000000000000000000000000000000000000000000000602090920191825261266791603391612c73565b506040805180820190915260058082527f4d506f6e6400000000000000000000000000000000000000000000000000000060209092019182526126ac91603491612c73565b50603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016601217905569021e19e0c9bab240000060365569017b7883c06916600000603755604051612700906137dc565b604051908190038120603e55612715906137e7565b604051908190038120603f5561272a906137a0565b60408051918290039091209055604280547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127ac57506bffffffffffffffffffffffff811615155b15611f3c5773ffffffffffffffffffffffffffffffffffffffff8316156128af5773ffffffffffffffffffffffffffffffffffffffff83166000908152603d602052604081205463ffffffff169081612806576000612876565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9050600061289d8285604051806060016040528060298152602001613c6360299139611f93565b90506128ab868484846129b1565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611f3c5773ffffffffffffffffffffffffffffffffffffffff82166000908152603d602052604081205463ffffffff169081612904576000612974565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9050600061299b8285604051806060016040528060288152602001613ce5602891396123e5565b90506129a9858484846129b1565b505050505050565b60006129d543604051806060016040528060358152602001613d9f60359139612c1a565b905063ffffffff841615801590612a48575073ffffffffffffffffffffffffffffffffffffffff85166000908152603c6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8901811685529252909120548282169116145b15612ae75773ffffffffffffffffffffffffffffffffffffffff85166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880163ffffffff168452909152902080547fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff166401000000006bffffffffffffffffffffffff851602179055612bc3565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000818152603c83528781208c871682528352878120965187549451909516640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9587167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000958616179590951694909417909555938252603d90935292909220805460018801909316929091169190911790555b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612c0b929190613a0f565b60405180910390a25050505050565b6000816401000000008410611f8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b604080518082019091526000808252602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612cb457805160ff1916838001178555612ce1565b82800160010185558215612ce1579182015b82811115612ce1578251825591602001919060010190612cc6565b50610d0e92611d5a9250905b80821115610d0e5760008155600101612ced565b80356108ef81613af0565b80356108ef81613b07565b80356108ef81613b10565b80356108ef81613b19565b80356108ef81613b22565b600060208284031215612d4a57600080fd5b6000612d568484612d01565b949350505050565b60008060408385031215612d7157600080fd5b6000612d7d8585612d01565b9250506020612d8e85828601612d01565b9150509250929050565b600080600060608486031215612dad57600080fd5b6000612db98686612d01565b9350506020612dca86828701612d01565b9250506040612ddb86828701612d01565b9150509250925092565b600080600060608486031215612dfa57600080fd5b6000612e068686612d01565b9350506020612e1786828701612d01565b9250506040612ddb86828701612d0c565b60008060408385031215612e3b57600080fd5b6000612e478585612d01565b9250506020612d8e85828601612d0c565b600080600080600080600060e0888a031215612e7357600080fd5b6000612e7f8a8a612d01565b9750506020612e908a828b01612d0c565b9650506040612ea18a828b01612d0c565b9550506060612eb28a828b01612d22565b9450506080612ec38a828b01612d0c565b93505060a0612ed48a828b01612d0c565b92505060c0612ee58a828b01612d2d565b91505092959891949750929550565b60008060408385031215612f0757600080fd5b6000612f138585612d01565b9250506020612d8e85828601612d17565b60008060408385031215612f3757600080fd5b6000612f438585612d01565b9250506020612d8e85828601612d2d565b612f5d81613a48565b82525050565b612f5d81613a53565b612f5d81611d5a565b612f5d612f8182611d5a565b611d5a565b600081546001811660008114612fa35760018114612fe457613023565b607f6002830416612fb48187613a3a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168152955085019250613023565b60028204612ff28187613a3a565b9550612ffd85613a2a565b60005b8281101561301c57815488820152600190910190602001613000565b5050850192505b505092915050565b600061303682613a36565b6130408185613a3f565b9350613050818560208601613a9c565b61305981613ac8565b9093019392505050565b6000613070604983613a3a565b7f556e656c65676174696f6e28616464726573732064656c6567617465652c756981527f6e74323536206e6f6e63652c75696e74323536206578706972792c75696e743960208201527f3620616d6f756e74290000000000000000000000000000000000000000000000604082015260490192915050565b60006130f5600283613a3a565b7f1901000000000000000000000000000000000000000000000000000000000000815260020192915050565b600061312e603183613a3f565b7f42726964676520616e64206163636f756e742073686f756c64206e6f7420626581527f207468652073616d652061646472657373000000000000000000000000000000602082015260400192915050565b600061318d605183613a3f565b7f4d506f6e643a205f7472616e73666572546f6b656e733a20756e64656c65676181527f74656420616d6f756e742073686f756c6420626520677265617465722074686160208201527f6e207472616e7366657220616d6f756e74000000000000000000000000000000604082015260600192915050565b6000613212607783613a3f565b7f41746c65617374206f6e65206f6620746865206164647265737320287372632081527f6f7220647374292073686f756c642062652077686974656c6973746564206f7260208201527f20616c6c207472616e7366657273206d75737420626520656e61626c6564207660408201527f696120656e61626c65416c6c5472616e73666572732829000000000000000000606082015260800192915050565b60006132bd604383613a3a565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201527f6374290000000000000000000000000000000000000000000000000000000000604082015260430192915050565b6000613342602983613a3f565b7f4d506f6e643a3a756e64656c656761746542795369673a20696e76616c69642081527f7369676e61747572650000000000000000000000000000000000000000000000602082015260400192915050565b60006133a1602983613a3f565b7f4d506f6e643a3a756e64656c656761746542795369673a207369676e6174757281527f6520657870697265640000000000000000000000000000000000000000000000602082015260400192915050565b6000613400602383613a3f565b7f4d506f6e643a3a64656c656761746542795369673a20696e76616c6964206e6f81527f6e63650000000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061345f602e83613a3f565b7f436f6e747261637420696e7374616e63652068617320616c726561647920626581527f656e20696e697469616c697a6564000000000000000000000000000000000000602082015260400192915050565b60006134be602583613a3f565b7f4d506f6e643a3a756e64656c656761746542795369673a20696e76616c69642081527f6e6f6e6365000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061351d602883613a3f565b7f4d506f6e643a3a6765745072696f72566f7465733a206e6f742079657420646581527f7465726d696e6564000000000000000000000000000000000000000000000000602082015260400192915050565b600061357c603b83613a3f565b7f4d506f6e643a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207481527f72616e7366657220746f20746865207a65726f20616464726573730000000000602082015260400192915050565b60006135db602783613a3f565b7f4d506f6e643a3a64656c656761746542795369673a20696e76616c696420736981527f676e617475726500000000000000000000000000000000000000000000000000602082015260400192915050565b600061363a602783613a3f565b7f4d506f6e643a3a64656c656761746542795369673a207369676e61747572652081527f6578706972656400000000000000000000000000000000000000000000000000602082015260400192915050565b6000613699604883613a3a565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206e6f6e63652c75696e74323536206578706972792c75696e74393660208201527f20616d6f756e7429000000000000000000000000000000000000000000000000604082015260480192915050565b600061371e603d83613a3f565b7f4d506f6e643a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207481527f72616e736665722066726f6d20746865207a65726f2061646472657373000000602082015260400192915050565b612f5d81613a71565b612f5d81613a7a565b612f5d81613a91565b612f5d81613a80565b6000610ae48284612f86565b60006108ef82613063565b60006137b6826130e8565b91506137c28285612f75565b6020820191506137d28284612f75565b5060200192915050565b60006108ef826132b0565b60006108ef8261368c565b602081016108ef8284612f54565b602081016108ef8284612f63565b602081016108ef8284612f6c565b60a0810161382a8288612f6c565b6138376020830187612f54565b6138446040830186612f6c565b6138516060830185612f6c565b61385e608083018461378b565b9695505050505050565b608081016138768287612f6c565b6138836020830186612f6c565b6138906040830185612f6c565b61389d6060830184612f54565b95945050505050565b608081016138b48287612f6c565b6138c16020830186613779565b6138ce6040830185612f6c565b61389d6060830184612f6c565b60208082528101610ae4818461302b565b602080825281016108ef81613121565b602080825281016108ef81613180565b602080825281016108ef81613205565b602080825281016108ef81613335565b602080825281016108ef81613394565b602080825281016108ef816133f3565b602080825281016108ef81613452565b602080825281016108ef816134b1565b602080825281016108ef81613510565b602080825281016108ef8161356f565b602080825281016108ef816135ce565b602080825281016108ef8161362d565b602080825281016108ef81613711565b602081016108ef8284613770565b604081016139d88285613770565b610ae4602083018461378b565b602081016108ef8284613779565b602081016108ef8284613782565b602081016108ef828461378b565b60408101613a1d8285613782565b610ae46020830184613782565b60009081526020902090565b5190565b919050565b90815260200190565b60006108ef82613a58565b151590565b73ffffffffffffffffffffffffffffffffffffffff1690565b63ffffffff1690565b60ff1690565b6bffffffffffffffffffffffff1690565b60006108ef82613a80565b60005b83811015613ab7578181015183820152602001613a9f565b83811115611a3e5750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b613af981613a48565b8114613b0457600080fd5b50565b613af981611d5a565b613af981613a71565b613af981613a7a565b613af981613a8056fe4f6e6c792061646d696e2063616e2072656d6f76652066726f6d2077686974656c6973744d506f6e643a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f77734d506f6e643a205375627472616374696f6e206f766572666c6f7720696e2074686520636f6e7374727563746f724d506f6e643a3a617070726f76653a206164646564416d6f756e74206578636565647320393620626974734f6e6c792061646d696e2063616e2064697361626c6520616c6c207472616e73666572734d506f6e643a3a7472616e736665723a20616d6f756e74206578636565647320393620626974734d506f6e643a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e63654d506f6e643a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f77734d506f6e643a205f7472616e666572546f6b656e733a20756e64656c6567617465207375627472616374696f6e206572726f724d506f6e643a3a617070726f76653a20616d6f756e74206578636565647320393620626974734d506f6e643a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f77734d506f6e643a20696e637265617365416c6c6f77616e636520616c6c6f77616e63652076616c7565206f766572666c6f77734d506f6e643a206465637265617365416c6c6f77616e636520616c6c6f77616e63652076616c756520756e646572666c6f77734d506f6e643a3a617070726f76653a2072656d6f766564416d6f756e74206578636565647320393620626974734d506f6e643a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974734d506f6e643a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e63654f6e6c792061646d696e2063616e20656e61626c6520616c6c207472616e73666572734d506f6e643a205f7472616e73666572546f6b656e733a20756e64656c6567617465206164646974696f6e206572726f724f6e6c792061646d696e2063616e206368616e67652064726f7020627269646765a365627a7a72315820599593199e7d3a76e2ec82ded5c7ec0030415564fd289d2b9e8e59c5e9e8bc9b6c6578706572696d656e74616cf564736f6c63430005110040

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061025c5760003560e01c806395d89b4111610145578063ce114c25116100bd578063e7a324dc1161008c578063f425859211610071578063f4258592146104c2578063f851a440146104d5578063fd71d86a146104ea5761025c565b8063e7a324dc14610499578063f1127ed8146104a15761025c565b8063ce114c251461044d578063dd62ed3e14610460578063e1032b8314610473578063e5843242146104865761025c565b8063b4b5ea5711610114578063c0c53b8b116100f9578063c0c53b8b1461042a578063c43ff0c81461043d578063c6d6125e146104455761025c565b8063b4b5ea571461040f578063b9371343146104225761025c565b806395d89b41146103ce578063a457c2d7146103d6578063a65835da146103e9578063a9059cbb146103fc5761025c565b806367cb1601116101d857806370a08231116101a75780637ecebe001161018c5780637ecebe00146103955780638164c309146103a85780638b41166c146103bb5761025c565b806370a0823114610362578063782d6fe1146103755761025c565b806367cb1601146103145780636ab5cc381461031c5780636f9170f61461032f5780636fcfff45146103425761025c565b806318160ddd1161022f57806323b872dd1161021457806323b872dd146102d9578063313ce567146102ec57806339509351146103015761025c565b806318160ddd146102c957806320606b70146102d15761025c565b806302cb3a881461026157806306fdde0314610276578063095ea7b31461029457806316aeac20146102b4575b600080fd5b61027461026f366004612e58565b6104f2565b005b61027e610724565b60405161028b91906138db565b60405180910390f35b6102a76102a2366004612e28565b6107d0565b60405161028b9190613800565b6102bc6108f5565b60405161028b919061380e565b6102bc6108fb565b6102bc610901565b6102a76102e7366004612de5565b610907565b6102f4610aeb565b60405161028b91906139e5565b6102a761030f366004612e28565b610af4565b6102a7610c6d565b6102a761032a366004612d5e565b610d12565b6102a761033d366004612d38565b610dbc565b610355610350366004612d38565b610dd1565b60405161028b91906139bc565b6102bc610370366004612d38565b610de9565b610388610383366004612e28565b610e1f565b60405161028b9190613a01565b6102bc6103a3366004612d38565b611101565b6102a76103b6366004612d38565b611113565b6102746103c9366004612f24565b6111f5565b61027e611204565b6102a76103e4366004612e28565b61127d565b6102746103f7366004612e58565b611359565b6102a761040a366004612e28565b611575565b61038861041d366004612d38565b6115f2565b6102bc6116a0565b610274610438366004612d98565b6116a6565b6102a7611a44565b6102a7611a4d565b6102a761045b366004612d38565b611aec565b6102bc61046e366004612d5e565b611bad565b610274610481366004612f24565b611bf3565b610388610494366004612d5e565b611bfe565b6102bc611c29565b6104b46104af366004612ef4565b611c2f565b60405161028b9291906139ca565b6102746104d0366004612d38565b611c6a565b6104dd611d20565b60405161028b91906137f2565b6104dd611d3c565b6000603e5460336040516105069190613794565b6040518091039020610516611d58565b3060405160200161052a9493929190613868565b60405160208183030381529060405280519060200120905060006040548989898660405160200161055f95949392919061381c565b6040516020818303038152906040528051906020012090506000828260405160200161058c9291906137ab565b6040516020818303038152906040528051906020012090506000600182898989604051600081526020016040526040516105c994939291906138a6565b6020604051602081039080840390855afa1580156105eb573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661066c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061391c565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526041602052604090208054600181019091558a146106d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061395c565b8842111561070c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061392c565b610717818c87611d5d565b5050505050505050505050565b6033805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156107c85780601f1061079d576101008083540402835291602001916107c8565b820191906000526020600020905b8154815290600101906020018083116107ab57829003601f168201915b505050505081565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561082257507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610847565b61084483604051806060016040528060268152602001613cbf60269139611f41565b90505b33600081815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff891680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108e19085906139f3565b60405180910390a360019150505b92915050565b60405481565b60365481565b603e5481565b60006109138484610d12565b610949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061390c565b73ffffffffffffffffffffffffffffffffffffffff841660009081526039602090815260408083203380855290835281842054825160608101909352602680845291946bffffffffffffffffffffffff9091169390926109b1928892613cbf90830139611f41565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156109fd57506bffffffffffffffffffffffff82811614155b15610ad1576000610a2783836040518060600160405280603e8152602001613c25603e9139611f93565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152603960209081526040808320948a16808452949091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff86161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ac79085906139f3565b60405180910390a3505b610adc878783611ff6565b600193505050505b9392505050565b60355460ff1681565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831415610b4657507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b6b565b610b68836040518060600160405280602b8152602001613baf602b9139611f41565b90505b33600090815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452825291829020548251606081019093526032808452610bd0936bffffffffffffffffffffffff9092169285929190613d0d908301396123e5565b33600081815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a1680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9586161790819055915190937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925926108e1929116906139f3565b6000604051806060016040528060238152602001613e0b60239139604254819073ffffffffffffffffffffffffffffffffffffffff163314610cdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b50604480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591505b5090565b60445460009060ff1680610d4b575073ffffffffffffffffffffffffffffffffffffffff831660009081526043602052604090205460ff165b80610d7b575073ffffffffffffffffffffffffffffffffffffffff821660009081526043602052604090205460ff165b15610d88575060016108ef565b60385473ffffffffffffffffffffffffffffffffffffffff84811691161415610db3575060016108ef565b50600092915050565b60436020526000908152604090205460ff1681565b603d6020526000908152604090205463ffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff166000908152603a60205260409020546bffffffffffffffffffffffff1690565b6000438210610e5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061396c565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603d602052604090205463ffffffff1680610e955760009150506108ef565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860181168552925290912054168310610f6d5773ffffffffffffffffffffffffffffffffffffffff84166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490940163ffffffff168352929052205464010000000090046bffffffffffffffffffffffff1690506108ef565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c6020908152604080832083805290915290205463ffffffff16831015610fb55760009150506108ef565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8163ffffffff168163ffffffff1611156110a957600282820363ffffffff16048103611005612c5c565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603c6020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff169181019190915290871415611084576020015194506108ef9350505050565b805163ffffffff1687111561109b578193506110a2565b6001820392505b5050610fdb565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603c6020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b60416020526000908152604090205481565b60408051808201909152601881527f4f6e6c792061646d696e2063616e2077686974656c6973740000000000000000602082015260425460009190819073ffffffffffffffffffffffffffffffffffffffff16331461119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b50505073ffffffffffffffffffffffffffffffffffffffff16600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915590565b611200338383612440565b5050565b6034805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156107c85780601f1061079d576101008083540402835291602001916107c8565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156112cf57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6112f4565b6112f1836040518060600160405280602d8152602001613d72602d9139611f41565b90505b33600090815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452825291829020548251606081019093526033808452610bd0936bffffffffffffffffffffffff9092169285929190613d3f90830139611f93565b6000603e54603360405161136d9190613794565b604051809103902061137d611d58565b306040516020016113919493929190613868565b6040516020818303038152906040528051906020012090506000603f54898989866040516020016113c695949392919061381c565b604051602081830303815290604052805190602001209050600082826040516020016113f39291906137ab565b60405160208183030381529060405280519060200120905060006001828989896040516000815260200160405260405161143094939291906138a6565b6020604051602081039080840390855afa158015611452573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061398c565b73ffffffffffffffffffffffffffffffffffffffff811660009081526041602052604090208054600181019091558a14611530576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061393c565b8842111561156a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061399c565b610717818c87612440565b60006115813384610d12565b6115b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061390c565b60006115db83604051806060016040528060278152602001613bfe60279139611f41565b90506115e8338583611ff6565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603d602052604081205463ffffffff168061162a576000610ae4565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff169392505050565b60375481565b600054610100900460ff16806116bf57506116bf61261d565b806116cd575060005460ff16155b611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061394c565b600054610100900460ff1615801561176957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611771612623565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610663906138ec565b6037805473ffffffffffffffffffffffffffffffffffffffff85166000818152603a6020908152604080832080546bffffffffffffffffffffffff9687167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000918216179091558654603b845282852085805284528285208054919097169116179094558282526043905282812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055925491519092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916118c0919061380e565b60405180910390a360006118f16036546037546040518060600160405280602e8152602001613b81602e9139611f93565b73ffffffffffffffffffffffffffffffffffffffff8681166000818152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166bffffffffffffffffffffffff8916908117909255603b84528285208580528452828520805490911682179055848452604390925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055603880547fffffffffffffffffffffffff000000000000000000000000000000000000000016958a16959095179094559251939450909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91611a06919061380e565b60405180910390a3508015611a3e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50505050565b60445460ff1681565b6000604051806060016040528060248152602001613bda60249139604254819073ffffffffffffffffffffffffffffffffffffffff163314611abc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b5050604480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550600190565b6000604051806060016040528060248152602001613b2c60249139604254819073ffffffffffffffffffffffffffffffffffffffff163314611b5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b50505073ffffffffffffffffffffffffffffffffffffffff16600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600190565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526039602090815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b611200338383611d5d565b603b6020908152600092835260408084209091529082529020546bffffffffffffffffffffffff1681565b603f5481565b603c60209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b604051806060016040528060218152602001613e5f60219139604254819073ffffffffffffffffffffffffffffffffffffffff163314611cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b5050603880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60425473ffffffffffffffffffffffffffffffffffffffff1681565b60385473ffffffffffffffffffffffffffffffffffffffff1681565b465b90565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152603b60209081526040808320938616835292815290829020548251808401909352601c83527f4d506f6e643a20756e64656c65676174657320756e646572666c6f770000000091830191909152611de3916bffffffffffffffffffffffff909116908390611f93565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320938716835292815282822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95861617905581805290829020548251808401909352601a83527f4d506f6e643a2064656c65676174657320756e646572666c6f7700000000000091830191909152611e9792169083906123e5565b73ffffffffffffffffffffffffffffffffffffffff8481166000818152603b6020908152604080832083805290915280822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff96909616959095179094559251918516917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f908490a4611f3c82600083612763565b505050565b6000816c010000000000000000000000008410611f8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611fee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8316612043576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610663906139ac565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603b602090815260408083208380529091529020546bffffffffffffffffffffffff808316911610156120be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610663906138fc565b73ffffffffffffffffffffffffffffffffffffffff821661210b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061397c565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603a6020908152604091829020548251606081019093526037808452612168936bffffffffffffffffffffffff9092169285929190613dd490830139611f93565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff958616179055603b82528083208380528252918290205482516060810190935260338084526122009491909116928592909190613c8c90830139611f93565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9687161790559286168252603a81529082902054825160608101909352603180845261229e9491909116928592909190613b50908301396123e5565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff958616179055603b82528083208380528252918290205482516060810190935260318084526123369491909116928592909190613e2e908301396123e5565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152603b602090815260408083208380529091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906123d89085906139f3565b60405180910390a3505050565b6000838301826bffffffffffffffffffffffff8087169083161015612437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b50949350505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603b60209081526040808320838052825291829020548251808401909352601a83527f4d506f6e643a2064656c65676174657320756e646572666c6f77000000000000918301919091526124c2916bffffffffffffffffffffffff909116908390611f93565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251808401909352601983527f4d506f6e643a2064656c656761746573206f766572666c6f77000000000000009183019190915261257592169083906123e5565b73ffffffffffffffffffffffffffffffffffffffff8481166000818152603b602090815260408083209488168084529490915280822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff969096169590951790945592519192917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f908390a4611f3c60008383612763565b303b1590565b6040805180820190915260068082527f4d61726c696e0000000000000000000000000000000000000000000000000000602090920191825261266791603391612c73565b506040805180820190915260058082527f4d506f6e6400000000000000000000000000000000000000000000000000000060209092019182526126ac91603491612c73565b50603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016601217905569021e19e0c9bab240000060365569017b7883c06916600000603755604051612700906137dc565b604051908190038120603e55612715906137e7565b604051908190038120603f5561272a906137a0565b60408051918290039091209055604280547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127ac57506bffffffffffffffffffffffff811615155b15611f3c5773ffffffffffffffffffffffffffffffffffffffff8316156128af5773ffffffffffffffffffffffffffffffffffffffff83166000908152603d602052604081205463ffffffff169081612806576000612876565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9050600061289d8285604051806060016040528060298152602001613c6360299139611f93565b90506128ab868484846129b1565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611f3c5773ffffffffffffffffffffffffffffffffffffffff82166000908152603d602052604081205463ffffffff169081612904576000612974565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9050600061299b8285604051806060016040528060288152602001613ce5602891396123e5565b90506129a9858484846129b1565b505050505050565b60006129d543604051806060016040528060358152602001613d9f60359139612c1a565b905063ffffffff841615801590612a48575073ffffffffffffffffffffffffffffffffffffffff85166000908152603c6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8901811685529252909120548282169116145b15612ae75773ffffffffffffffffffffffffffffffffffffffff85166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880163ffffffff168452909152902080547fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff166401000000006bffffffffffffffffffffffff851602179055612bc3565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000818152603c83528781208c871682528352878120965187549451909516640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9587167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000958616179590951694909417909555938252603d90935292909220805460018801909316929091169190911790555b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612c0b929190613a0f565b60405180910390a25050505050565b6000816401000000008410611f8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b604080518082019091526000808252602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612cb457805160ff1916838001178555612ce1565b82800160010185558215612ce1579182015b82811115612ce1578251825591602001919060010190612cc6565b50610d0e92611d5a9250905b80821115610d0e5760008155600101612ced565b80356108ef81613af0565b80356108ef81613b07565b80356108ef81613b10565b80356108ef81613b19565b80356108ef81613b22565b600060208284031215612d4a57600080fd5b6000612d568484612d01565b949350505050565b60008060408385031215612d7157600080fd5b6000612d7d8585612d01565b9250506020612d8e85828601612d01565b9150509250929050565b600080600060608486031215612dad57600080fd5b6000612db98686612d01565b9350506020612dca86828701612d01565b9250506040612ddb86828701612d01565b9150509250925092565b600080600060608486031215612dfa57600080fd5b6000612e068686612d01565b9350506020612e1786828701612d01565b9250506040612ddb86828701612d0c565b60008060408385031215612e3b57600080fd5b6000612e478585612d01565b9250506020612d8e85828601612d0c565b600080600080600080600060e0888a031215612e7357600080fd5b6000612e7f8a8a612d01565b9750506020612e908a828b01612d0c565b9650506040612ea18a828b01612d0c565b9550506060612eb28a828b01612d22565b9450506080612ec38a828b01612d0c565b93505060a0612ed48a828b01612d0c565b92505060c0612ee58a828b01612d2d565b91505092959891949750929550565b60008060408385031215612f0757600080fd5b6000612f138585612d01565b9250506020612d8e85828601612d17565b60008060408385031215612f3757600080fd5b6000612f438585612d01565b9250506020612d8e85828601612d2d565b612f5d81613a48565b82525050565b612f5d81613a53565b612f5d81611d5a565b612f5d612f8182611d5a565b611d5a565b600081546001811660008114612fa35760018114612fe457613023565b607f6002830416612fb48187613a3a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168152955085019250613023565b60028204612ff28187613a3a565b9550612ffd85613a2a565b60005b8281101561301c57815488820152600190910190602001613000565b5050850192505b505092915050565b600061303682613a36565b6130408185613a3f565b9350613050818560208601613a9c565b61305981613ac8565b9093019392505050565b6000613070604983613a3a565b7f556e656c65676174696f6e28616464726573732064656c6567617465652c756981527f6e74323536206e6f6e63652c75696e74323536206578706972792c75696e743960208201527f3620616d6f756e74290000000000000000000000000000000000000000000000604082015260490192915050565b60006130f5600283613a3a565b7f1901000000000000000000000000000000000000000000000000000000000000815260020192915050565b600061312e603183613a3f565b7f42726964676520616e64206163636f756e742073686f756c64206e6f7420626581527f207468652073616d652061646472657373000000000000000000000000000000602082015260400192915050565b600061318d605183613a3f565b7f4d506f6e643a205f7472616e73666572546f6b656e733a20756e64656c65676181527f74656420616d6f756e742073686f756c6420626520677265617465722074686160208201527f6e207472616e7366657220616d6f756e74000000000000000000000000000000604082015260600192915050565b6000613212607783613a3f565b7f41746c65617374206f6e65206f6620746865206164647265737320287372632081527f6f7220647374292073686f756c642062652077686974656c6973746564206f7260208201527f20616c6c207472616e7366657273206d75737420626520656e61626c6564207660408201527f696120656e61626c65416c6c5472616e73666572732829000000000000000000606082015260800192915050565b60006132bd604383613a3a565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201527f6374290000000000000000000000000000000000000000000000000000000000604082015260430192915050565b6000613342602983613a3f565b7f4d506f6e643a3a756e64656c656761746542795369673a20696e76616c69642081527f7369676e61747572650000000000000000000000000000000000000000000000602082015260400192915050565b60006133a1602983613a3f565b7f4d506f6e643a3a756e64656c656761746542795369673a207369676e6174757281527f6520657870697265640000000000000000000000000000000000000000000000602082015260400192915050565b6000613400602383613a3f565b7f4d506f6e643a3a64656c656761746542795369673a20696e76616c6964206e6f81527f6e63650000000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061345f602e83613a3f565b7f436f6e747261637420696e7374616e63652068617320616c726561647920626581527f656e20696e697469616c697a6564000000000000000000000000000000000000602082015260400192915050565b60006134be602583613a3f565b7f4d506f6e643a3a756e64656c656761746542795369673a20696e76616c69642081527f6e6f6e6365000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061351d602883613a3f565b7f4d506f6e643a3a6765745072696f72566f7465733a206e6f742079657420646581527f7465726d696e6564000000000000000000000000000000000000000000000000602082015260400192915050565b600061357c603b83613a3f565b7f4d506f6e643a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207481527f72616e7366657220746f20746865207a65726f20616464726573730000000000602082015260400192915050565b60006135db602783613a3f565b7f4d506f6e643a3a64656c656761746542795369673a20696e76616c696420736981527f676e617475726500000000000000000000000000000000000000000000000000602082015260400192915050565b600061363a602783613a3f565b7f4d506f6e643a3a64656c656761746542795369673a207369676e61747572652081527f6578706972656400000000000000000000000000000000000000000000000000602082015260400192915050565b6000613699604883613a3a565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206e6f6e63652c75696e74323536206578706972792c75696e74393660208201527f20616d6f756e7429000000000000000000000000000000000000000000000000604082015260480192915050565b600061371e603d83613a3f565b7f4d506f6e643a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207481527f72616e736665722066726f6d20746865207a65726f2061646472657373000000602082015260400192915050565b612f5d81613a71565b612f5d81613a7a565b612f5d81613a91565b612f5d81613a80565b6000610ae48284612f86565b60006108ef82613063565b60006137b6826130e8565b91506137c28285612f75565b6020820191506137d28284612f75565b5060200192915050565b60006108ef826132b0565b60006108ef8261368c565b602081016108ef8284612f54565b602081016108ef8284612f63565b602081016108ef8284612f6c565b60a0810161382a8288612f6c565b6138376020830187612f54565b6138446040830186612f6c565b6138516060830185612f6c565b61385e608083018461378b565b9695505050505050565b608081016138768287612f6c565b6138836020830186612f6c565b6138906040830185612f6c565b61389d6060830184612f54565b95945050505050565b608081016138b48287612f6c565b6138c16020830186613779565b6138ce6040830185612f6c565b61389d6060830184612f6c565b60208082528101610ae4818461302b565b602080825281016108ef81613121565b602080825281016108ef81613180565b602080825281016108ef81613205565b602080825281016108ef81613335565b602080825281016108ef81613394565b602080825281016108ef816133f3565b602080825281016108ef81613452565b602080825281016108ef816134b1565b602080825281016108ef81613510565b602080825281016108ef8161356f565b602080825281016108ef816135ce565b602080825281016108ef8161362d565b602080825281016108ef81613711565b602081016108ef8284613770565b604081016139d88285613770565b610ae4602083018461378b565b602081016108ef8284613779565b602081016108ef8284613782565b602081016108ef828461378b565b60408101613a1d8285613782565b610ae46020830184613782565b60009081526020902090565b5190565b919050565b90815260200190565b60006108ef82613a58565b151590565b73ffffffffffffffffffffffffffffffffffffffff1690565b63ffffffff1690565b60ff1690565b6bffffffffffffffffffffffff1690565b60006108ef82613a80565b60005b83811015613ab7578181015183820152602001613a9f565b83811115611a3e5750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b613af981613a48565b8114613b0457600080fd5b50565b613af981611d5a565b613af981613a71565b613af981613a7a565b613af981613a8056fe4f6e6c792061646d696e2063616e2072656d6f76652066726f6d2077686974656c6973744d506f6e643a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f77734d506f6e643a205375627472616374696f6e206f766572666c6f7720696e2074686520636f6e7374727563746f724d506f6e643a3a617070726f76653a206164646564416d6f756e74206578636565647320393620626974734f6e6c792061646d696e2063616e2064697361626c6520616c6c207472616e73666572734d506f6e643a3a7472616e736665723a20616d6f756e74206578636565647320393620626974734d506f6e643a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e63654d506f6e643a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f77734d506f6e643a205f7472616e666572546f6b656e733a20756e64656c6567617465207375627472616374696f6e206572726f724d506f6e643a3a617070726f76653a20616d6f756e74206578636565647320393620626974734d506f6e643a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f77734d506f6e643a20696e637265617365416c6c6f77616e636520616c6c6f77616e63652076616c7565206f766572666c6f77734d506f6e643a206465637265617365416c6c6f77616e636520616c6c6f77616e63652076616c756520756e646572666c6f77734d506f6e643a3a617070726f76653a2072656d6f766564416d6f756e74206578636565647320393620626974734d506f6e643a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974734d506f6e643a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e63654f6e6c792061646d696e2063616e20656e61626c6520616c6c207472616e73666572734d506f6e643a205f7472616e73666572546f6b656e733a20756e64656c6567617465206164646974696f6e206572726f724f6e6c792061646d696e2063616e206368616e67652064726f7020627269646765a365627a7a72315820599593199e7d3a76e2ec82ded5c7ec0030415564fd289d2b9e8e59c5e9e8bc9b6c6578706572696d656e74616cf564736f6c63430005110040

Deployed Bytecode Sourcemap

2105:22296:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2105:22296:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15277:1140;;;;;;;;;:::i;:::-;;2199:18;;;:::i;:::-;;;;;;;;;;;;;;;;8992:498;;;;;;;;;:::i;:::-;;;;;;;;3692:36;;;:::i;:::-;;;;;;;;2446:26;;;:::i;3440:30::-;;;:::i;12272:1025::-;;;;;;;;;:::i;2361:21::-;;;:::i;:::-;;;;;;;;9498:686;;;;;;;;;:::i;7030:200::-;;;:::i;7630:409::-;;;;;;;;;:::i;3913:45::-;;;;;;;;;:::i;3319:48::-;;;;;;;;;:::i;:::-;;;;;;;;11090:111;;;;;;;;;:::i;17319:1291::-;;;;;;;;;:::i;:::-;;;;;;;;3809:41;;;;;;;;;:::i;6574:212::-;;;;;;;;;:::i;13445:125::-;;;;;;;;;:::i;2278:20::-;;;:::i;10192:695::-;;;;;;;;;:::i;14141:1128::-;;;;;;;;;:::i;11465:497::-;;;;;;;;;:::i;16618:270::-;;;;;;;;;:::i;2492:27::-;;;:::i;4893:949::-;;;;;;;;;:::i;3965:29::-;;;:::i;7238:203::-;;;:::i;6794:228::-;;;;;;;;;:::i;8343:171::-;;;;;;;;;:::i;13578:129::-;;;;;;;;;:::i;2875:63::-;;;;;;;;;:::i;3564:34::-;;;:::i;3182:68::-;;;;;;;;;:::i;:::-;;;;;;;;;7449:173;;;;;;;;;:::i;3886:20::-;;;:::i;:::-;;;;;;;;2540:25;;;:::i;15277:1140::-;15486:23;15565:15;;15615:4;15599:22;;;;;;;;;;;;;;;15640:12;:10;:12::i;:::-;15679:4;15536:163;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15536:163:0;;;15512:198;;;;;;15486:224;;15721:18;15777:21;;15800:9;15811:5;15818:6;15826;15766:67;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15766:67:0;;;15742:102;;;;;;15721:123;;15855:14;15925:15;15942:10;15896:57;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15896:57:0;;;15872:92;;;;;;15855:109;;15975:17;15995:26;16005:6;16013:1;16016;16019;15995:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;15995:26:0;;;;;;-1:-1:-1;;16054:23:0;;;16032:114;;;;;;;;;;;;;;;;;;;;;;16188:17;;;;;;;:6;:17;;;;;:19;;;;;;;;16179:28;;16157:115;;;;;;;;;;;;;;16298:6;16291:3;:13;;16283:67;;;;;;;;;;;;;;16368:41;16380:9;16391;16402:6;16368:11;:41::i;:::-;16361:48;;;;15277:1140;;;;;;;:::o;2199:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8992:498::-;9081:4;9103:13;9152:2;9131:9;:24;9127:226;;;-1:-1:-1;9188:2:0;9127:226;;;9233:108;9258:9;9233:108;;;;;;;;;;;;;;;;;:6;:108::i;:::-;9224:117;;9127:226;9376:10;9365:22;;;;:10;:22;;;;;;;;;:31;;;;;;;;;;;:40;;;;;;;;;;9423:37;;9365:31;;9376:10;9423:37;;;;9365:40;;9423:37;;;;;;;;;;9478:4;9471:11;;;8992:498;;;;;:::o;3692:36::-;;;;:::o;2446:26::-;;;;:::o;3440:30::-;;;;:::o;12272:1025::-;12391:4;12430:31;12452:3;12457;12430:21;:31::i;:::-;12408:200;;;;;;;;;;;;;;12684:15;;;12619;12684;;;:10;:15;;;;;;;;12637:10;12684:24;;;;;;;;;;12735:96;;;;;;;;;;;;12637:10;;12684:24;;;;;12619:15;;12735:96;;12756:9;;12735:96;;;;;:6;:96::i;:::-;12719:112;;12859:3;12848:14;;:7;:14;;;;:48;;;;-1:-1:-1;12866:30:0;;;;;;12848:48;12844:378;;;12913:19;12935:163;12959:16;12994:6;12935:163;;;;;;;;;;;;;;;;;:5;:163::i;:::-;13113:15;;;;;;;;:10;:15;;;;;;;;:24;;;;;;;;;;;;;;:39;;;;;;;;;;13174:36;13113:39;;-1:-1:-1;13113:24:0;;13174:36;;;;13113:39;;13174:36;;;;;;;;;;12844:378;;13234:33;13250:3;13255;13260:6;13234:15;:33::i;:::-;13285:4;13278:11;;;;;12272:1025;;;;;;:::o;2361:21::-;;;;;;:::o;9498:686::-;9599:4;9621:13;9672:2;9649:11;:26;9645:235;;;-1:-1:-1;9708:2:0;9645:235;;;9753:115;9778:11;9753:115;;;;;;;;;;;;;;;;;:6;:115::i;:::-;9744:124;;9645:235;9957:10;9946:22;;;;:10;:22;;;;;;;;;:31;;;;;;;;;;;9926:150;;;;;;;;;;;;;;9946:31;;;;;9992:6;;9926:150;;;;;;;:5;:150::i;:::-;9903:10;9892:22;;;;:10;:22;;;;;;;;;:31;;;;;;;;;;;:184;;;;;;;;;;;;;10092:62;;9892:31;;10092:62;;;;10122:31;;;10092:62;;7030:200;7154:4;24290:108;;;;;;;;;;;;;;;;;24364:5;;24371:6;;24364:5;;24350:10;:19;24342:36;;;;;;;;;;;;;;;-1:-1:-1;7176:17:0;:24;;;;7196:4;7176:24;;;;;;7196:4;-1:-1:-1;24389:1:0;7030:200;;:::o;7630:409::-;7787:17;;7747:4;;7787:17;;;:58;;-1:-1:-1;7821:24:0;;;;;;;:13;:24;;;;;;;;7787:58;:99;;;-1:-1:-1;7862:24:0;;;;;;;:13;:24;;;;;;;;7787:99;7769:240;;;-1:-1:-1;7920:4:0;7913:11;;7769:240;7959:10;;;7946:23;;;7959:10;;7946:23;7942:67;;;-1:-1:-1;7993:4:0;7986:11;;7942:67;-1:-1:-1;8026:5:0;7630:409;;;;:::o;3913:45::-;;;;;;;;;;;;;;;:::o;3319:48::-;;;;;;;;;;;;;;;:::o;11090:111::-;11176:17;;11149:7;11176:17;;;:8;:17;;;;;;;;;11090:111::o;17319:1291::-;17428:6;17488:12;17474:11;:26;17452:116;;;;;;;;;;;;;;17603:23;;;17581:19;17603:23;;;:14;:23;;;;;;;;17641:17;17637:58;;17682:1;17675:8;;;;;17637:58;17755:20;;;;;;;:11;:20;;;;;;;;:38;17776:16;;;17755:38;;;;;;;;;:48;;:63;-1:-1:-1;17751:147:0;;17842:20;;;;;;;:11;:20;;;;;;;;17863:16;;;;;17842:38;;;;;;;;:44;;;;;;;-1:-1:-1;17835:51:0;;17751:147;17959:20;;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;17955:88:0;;;18030:1;18023:8;;;;;17955:88;18055:12;18097:16;;;18124:428;18139:5;18131:13;;:5;:13;;;18124:428;;;18203:1;18186:13;;;18185:19;;;18177:27;;18246:20;;:::i;:::-;-1:-1:-1;18269:20:0;;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;18246:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18316:27;;18312:229;;;18371:8;;;;-1:-1:-1;18364:15:0;;-1:-1:-1;;;;18364:15:0;18312:229;18405:12;;:26;;;-1:-1:-1;18401:140:0;;;18460:6;18452:14;;18401:140;;;18524:1;18515:6;:10;18507:18;;18401:140;18124:428;;;;;-1:-1:-1;18569:20:0;;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;;;;;-1:-1:-1;;17319:1291:0;;;;:::o;3809:41::-;;;;;;;;;;;;;:::o;6574:212::-;24290:108;;;;;;;;;;;;;;;;;24364:5;;-1:-1:-1;;24290:108:0;;;24364:5;;24350:10;:19;24342:36;;;;;;;;;;;;;;;-1:-1:-1;;;6726:23:0;;;;;;:13;:23;;;;;:30;;;;6752:4;6726:30;;;;;;6752:4;6574:212::o;13445:125::-;13522:40;13532:10;13544:9;13555:6;13522:9;:40::i;:::-;13445:125;;:::o;2278:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10192:695;10295:4;10317:13;10370:2;10345:13;:28;10341:241;;;-1:-1:-1;10406:2:0;10341:241;;;10451:119;10476:13;10451:119;;;;;;;;;;;;;;;;;:6;:119::i;:::-;10442:128;;10341:241;10659:10;10648:22;;;;:10;:22;;;;;;;;;:31;;;;;;;;;;;10628:151;;;;;;;;;;;;;;10648:31;;;;;10694:6;;10628:151;;;;;;;:5;:151::i;14141:1128::-;14348:23;14427:15;;14477:4;14461:22;;;;;;;;;;;;;;;14502:12;:10;:12::i;:::-;14541:4;14398:163;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14398:163:0;;;14374:198;;;;;;14348:224;;14583:18;14639:19;;14660:9;14671:5;14678:6;14686;14628:65;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14628:65:0;;;14604:100;;;;;;14583:121;;14715:14;14785:15;14802:10;14756:57;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14756:57:0;;;14732:92;;;;;;14715:109;;14835:17;14855:26;14865:6;14873:1;14876;14879;14855:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;14855:26:0;;;;;;-1:-1:-1;;14914:23:0;;;14892:112;;;;;;;;;;;;;;15046:17;;;;;;;:6;:17;;;;;:19;;;;;;;;15037:28;;15015:113;;;;;;;;;;;;;;15154:6;15147:3;:13;;15139:65;;;;;;;;;;;;;;15222:39;15232:9;15243;15254:6;15222:9;:39::i;11465:497::-;11533:4;11572:38;11594:10;11606:3;11572:21;:38::i;:::-;11550:207;;;;;;;;;;;;;;11768:13;11784:97;11805:9;11784:97;;;;;;;;;;;;;;;;;:6;:97::i;:::-;11768:113;;11892:40;11908:10;11920:3;11925:6;11892:15;:40::i;:::-;-1:-1:-1;11950:4:0;;11465:497;-1:-1:-1;;;11465:497:0:o;16618:270::-;16724:23;;;16683:6;16724:23;;;:14;:23;;;;;;;;16778:17;:102;;16879:1;16778:102;;;16815:20;;;;;;;:11;:20;;;;;;;;16836:16;;;16815:38;;;;;;;;;:44;;;;;;16758:122;16618:270;-1:-1:-1;;;16618:270:0:o;2492:27::-;;;;:::o;4893:949::-;1079:12;;;;;;;;:31;;;1095:15;:13;:15::i;:::-;1079:47;;;-1:-1:-1;1115:11:0;;;;1114:12;1079:47;1071:106;;;;;;;;;;;;;;1186:19;1209:12;;;;;;1208:13;1228:83;;;;1257:12;:19;;1285:18;1257:19;;;;;;1285:18;1272:4;1285:18;;;1228:83;5037:17;:15;:17::i;:::-;5098:6;5087:17;;:7;:17;;;;5065:116;;;;;;;;;;;;;;5218:12;;;5192:16;;;;;;;:8;:16;;;;;;;;:39;;;;;;;;;;;;;;5281:12;;5242:9;:17;;;;;:29;;;;;;;;:52;;;;;;;;;;;;5305:21;;;:13;:21;;;;;:28;;;;5192:39;5305:28;;;5378:12;;5349:42;;5192:16;;;5349:42;;;;5378:12;5349:42;;;;;;;;;;5404:22;5429:148;5456:11;;5490:12;;5429:148;;;;;;;;;;;;;;;;;:5;:148::i;:::-;5588:17;;;;;;;;:8;:17;;;;;;;;:35;;;;;;;;;;;;;;;5634:9;:18;;;;;:30;;;;;;;;:48;;;;;;;;;5693:22;;;:13;:22;;;;;;:29;;;;-1:-1:-1;5693:29:0;;;5733:10;:30;;;;;;;;;;;;;;5779:55;;5588:35;;-1:-1:-1;5588:17:0;;;;5779:55;;;;5588:35;5779:55;;;;;;;;;;1319:1;1333:14;1329:57;;;1373:5;1358:20;;;;;;1329:57;4893:949;;;;:::o;3965:29::-;;;;;;:::o;7238:203::-;7364:4;24290:108;;;;;;;;;;;;;;;;;24364:5;;24371:6;;24364:5;;24350:10;:19;24342:36;;;;;;;;;;;;;;;-1:-1:-1;;7386:17:0;:25;;;;;;-1:-1:-1;;;7238:203:0:o;6794:228::-;6939:4;24290:108;;;;;;;;;;;;;;;;;24364:5;;24371:6;;24364:5;;24350:10;:19;24342:36;;;;;;;;;;;;;;;-1:-1:-1;;;6961:23:0;;6987:5;6961:23;;;:13;:23;;;;;:31;;;;;;-1:-1:-1;;6794:228:0:o;8343:171::-;8478:19;;;;8446:7;8478:19;;;:10;:19;;;;;;;;:28;;;;;;;;;;;;;;;8343:171::o;13578:129::-;13657:42;13669:10;13681:9;13692:6;13657:11;:42::i;2875:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3564:34::-;;;;:::o;3182:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7449:173::-;24290:108;;;;;;;;;;;;;;;;;24364:5;;24371:6;;24364:5;;24350:10;:19;24342:36;;;;;;;;;;;;;;;-1:-1:-1;;7587:10:0;:27;;;;;;;;;;;;;;;7449:173::o;3886:20::-;;;;;;:::o;2540:25::-;;;;;;:::o;24104:178::-;24230:9;24104:178;;:::o;19217:592::-;19399:20;;;;;;;;:9;:20;;;;;;;;:31;;;;;;;;;;;;;19379:128;;;;;;;;;;;;;;;;;;;;;19399:31;;;;;19445:6;;19379:5;:128::i;:::-;19345:20;;;;;;;;:9;:20;;;;;;;;:31;;;;;;;;;;;:162;;;;;;;;;;;19573:32;;;;;;;;19553:127;;;;;;;;;;;;;;;;;;;;;19573:32;;19620:6;;19553:5;:127::i;:::-;19518:20;;;;;;;;:9;:20;;;;;;;;:32;;;;;;;;;:162;;;;;;;;;;;;;;;;19696:49;;;;;;;;19518:20;;19696:49;19756:45;19771:9;19790:1;19794:6;19756:14;:45::i;:::-;19217:592;;;:::o;23463:196::-;23568:6;23611:12;23604:5;23600:9;;23592:32;;;;;;;;;;;;;;;-1:-1:-1;23649:1:0;;23463:196;-1:-1:-1;;23463:196:0:o;23897:199::-;24017:6;24049:1;24044:6;;:1;:6;;;;24052:12;24036:29;;;;;;;;;;;;;;;;-1:-1:-1;;;24083:5:0;;;23897:199::o;19817:1379::-;19959:17;;;19937:128;;;;;;;;;;;;;;20098:14;;;;;;;:9;:14;;;;;;;;:26;;;;;;;;;:36;;;;:26;;:36;;20076:167;;;;;;;;;;;;;;20276:17;;;20254:126;;;;;;;;;;;;;;20429:13;;;;;;;:8;:13;;;;;;;;;;20409:137;;;;;;;;;;;;;;20429:13;;;;;20457:6;;20409:137;;;;;;;:5;:137::i;:::-;20393:13;;;;;;;:8;:13;;;;;;;;:153;;;;;;;;;;;20606:9;:14;;;;;:26;;;;;;;;;;20586:146;;;;;;;;;;;;;;20606:26;;;;;20647:6;;20586:146;;;;;;;;:5;:146::i;:::-;20557:14;;;;;;;;:9;:14;;;;;;;;:26;;;;;;;;:175;;;;;;;;;;;20781:13;;;;;:8;:13;;;;;;;20761:131;;;;;;;;;;;;;;20781:13;;;;;20809:6;;20761:131;;;;;;;;:5;:131::i;:::-;20745:13;;;;;;;:8;:13;;;;;;;;:147;;;;;;;;;;;20952:9;:14;;;;;:26;;;;;;;;;;20932:144;;;;;;;;;;;;;;20952:26;;;;;20993:6;;20932:144;;;;;;;;:5;:144::i;:::-;20903:14;;;;;;;;:9;:14;;;;;;;;:26;;;;;;;;;;:173;;;;;;;;;;;;;;;;21092:26;;;;;;;;;;21111:6;;21092:26;;;;;;;;;;19817:1379;;;:::o;23667:222::-;23787:6;23817:5;;;23849:12;23841:6;;;;;;;;;23833:29;;;;;;;;;;;;;;;-1:-1:-1;23880:1:0;23667:222;-1:-1:-1;;;;23667:222:0:o;18618:591::-;18799:20;;;;;;;:9;:20;;;;;;;;:32;;;;;;;;;;18779:127;;;;;;;;;;;;;;;;;;;;;18799:32;;;;;18846:6;;18779:5;:127::i;:::-;18744:20;;;;;;;;:9;:20;;;;;;;;:32;;;;;;;;:162;;;;;;;;;;;18971:31;;;;;;;;;;18951:125;;;;;;;;;;;;;;;;;;;;;18971:31;;19017:6;;18951:5;:125::i;:::-;18917:20;;;;;;;;:9;:20;;;;;;;;:31;;;;;;;;;;;;;:159;;;;;;;;;;;;;;;;19094:49;;18917:31;;:20;19094:49;;18917:20;;19094:49;19156:45;19179:1;19183:9;19194:6;19156:14;:45::i;1480:508::-;1897:4;1943:17;1975:7;1480:508;:::o;5850:716::-;5897:15;;;;;;;;;;;;;;;;;;;;;;;:4;;:15;:::i;:::-;-1:-1:-1;5923:16:0;;;;;;;;;;;;;;;;;;;;;;;:6;;:16;:::i;:::-;-1:-1:-1;5950:8:0;:13;;;;5961:2;5950:13;;;5988:8;5974:11;:22;6022:7;6007:12;:22;6058:104;;;;;;;;;;;;;;;6040:15;:122;6195:109;;;;;;;;;;;;;6173:19;:131;6339:110;;;;;;;;;;;;;;;6315:134;;6460:5;:18;;;;6468:10;6460:18;;;5850:716::o;21204:1226::-;21343:6;21333:16;;:6;:16;;;;:31;;;;-1:-1:-1;21353:11:0;;;;;21333:31;21329:1094;;;21385:20;;;;21381:508;;21445:22;;;21426:16;21445:22;;;:14;:22;;;;;;;;;21505:14;:103;;21607:1;21505:103;;;21543:19;;;;;;;:11;:19;;;;;;;;21563:13;;;21543:34;;;;;;;;;:40;;;;;;21505:103;21486:122;;21627:16;21646:151;21674:9;21706:6;21646:151;;;;;;;;;;;;;;;;;:5;:151::i;:::-;21627:170;;21816:57;21833:6;21841:9;21852;21863;21816:16;:57::i;:::-;21381:508;;;;21909:20;;;;21905:507;;21969:22;;;21950:16;21969:22;;;:14;:22;;;;;;;;;22029:14;:103;;22131:1;22029:103;;;22067:19;;;;;;;:11;:19;;;;;;;;22087:13;;;22067:34;;;;;;;;;:40;;;;;;22029:103;22010:122;;22151:16;22170:150;22198:9;22230:6;22170:150;;;;;;;;;;;;;;;;;:5;:150::i;:::-;22151:169;;22339:57;22356:6;22364:9;22375;22386;22339:16;:57::i;:::-;21905:507;;;21204:1226;;;:::o;22438:813::-;22601:18;22622:114;22643:12;22622:114;;;;;;;;;;;;;;;;;:6;:114::i;:::-;22601:135;-1:-1:-1;22767:17:0;;;;;;;:99;;-1:-1:-1;22801:22:0;;;;;;;:11;:22;;;;;;;;:65;22824:16;;;22801:40;;;;;;;;;:50;:65;;;:50;;:65;22767:99;22749:426;;;22893:22;;;;;;;:11;:22;;;;;;;;22916:16;;;22893:40;;;;;;;;;:57;;;;;;;;;;;;22749:426;;;23022:82;;;;;;;;;;;;;;;;;;;;;;;;;22983:22;;;-1:-1:-1;22983:22:0;;;:11;:22;;;;;:36;;;;;;;;;;:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23119:25;;;:14;:25;;;;;;;:44;;22983:121;23147:16;;23119:44;;;;;;;;;;;;;22749:426;23213:9;23192:51;;;23224:8;23234;23192:51;;;;;;;;;;;;;;;;22438:813;;;;;:::o;23259:196::-;23364:6;23407:12;23400:5;23396:9;;23388:32;;;;;;;;;;;;;;2105:22296;;;;;;;;;;-1:-1:-1;2105:22296:0;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2105:22296:0;;;;-1:-1:-1;2105:22296:0;;;;;;;;;;;;;;;5:130:-1;72:20;;97:33;72:20;97:33;;142:130;209:20;;234:33;209:20;234:33;;416:128;482:20;;507:32;482:20;507:32;;551:126;616:20;;641:31;616:20;641:31;;684:128;750:20;;775:32;750:20;775:32;;819:241;;923:2;911:9;902:7;898:23;894:32;891:2;;;939:1;936;929:12;891:2;974:1;991:53;1036:7;1016:9;991:53;;;981:63;885:175;-1:-1;;;;885:175;1067:366;;;1188:2;1176:9;1167:7;1163:23;1159:32;1156:2;;;1204:1;1201;1194:12;1156:2;1239:1;1256:53;1301:7;1281:9;1256:53;;;1246:63;;1218:97;1346:2;1364:53;1409:7;1400:6;1389:9;1385:22;1364:53;;;1354:63;;1325:98;1150:283;;;;;;1440:491;;;;1578:2;1566:9;1557:7;1553:23;1549:32;1546:2;;;1594:1;1591;1584:12;1546:2;1629:1;1646:53;1691:7;1671:9;1646:53;;;1636:63;;1608:97;1736:2;1754:53;1799:7;1790:6;1779:9;1775:22;1754:53;;;1744:63;;1715:98;1844:2;1862:53;1907:7;1898:6;1887:9;1883:22;1862:53;;;1852:63;;1823:98;1540:391;;;;;;1938:491;;;;2076:2;2064:9;2055:7;2051:23;2047:32;2044:2;;;2092:1;2089;2082:12;2044:2;2127:1;2144:53;2189:7;2169:9;2144:53;;;2134:63;;2106:97;2234:2;2252:53;2297:7;2288:6;2277:9;2273:22;2252:53;;;2242:63;;2213:98;2342:2;2360:53;2405:7;2396:6;2385:9;2381:22;2360:53;;2436:366;;;2557:2;2545:9;2536:7;2532:23;2528:32;2525:2;;;2573:1;2570;2563:12;2525:2;2608:1;2625:53;2670:7;2650:9;2625:53;;;2615:63;;2587:97;2715:2;2733:53;2778:7;2769:6;2758:9;2754:22;2733:53;;2809:989;;;;;;;;3012:3;3000:9;2991:7;2987:23;2983:33;2980:2;;;3029:1;3026;3019:12;2980:2;3064:1;3081:53;3126:7;3106:9;3081:53;;;3071:63;;3043:97;3171:2;3189:53;3234:7;3225:6;3214:9;3210:22;3189:53;;;3179:63;;3150:98;3279:2;3297:53;3342:7;3333:6;3322:9;3318:22;3297:53;;;3287:63;;3258:98;3387:2;3405:51;3448:7;3439:6;3428:9;3424:22;3405:51;;;3395:61;;3366:96;3493:3;3512:53;3557:7;3548:6;3537:9;3533:22;3512:53;;;3502:63;;3472:99;3602:3;3621:53;3666:7;3657:6;3646:9;3642:22;3621:53;;;3611:63;;3581:99;3711:3;3730:52;3774:7;3765:6;3754:9;3750:22;3730:52;;;3720:62;;3690:98;2974:824;;;;;;;;;;;3805:364;;;3925:2;3913:9;3904:7;3900:23;3896:32;3893:2;;;3941:1;3938;3931:12;3893:2;3976:1;3993:53;4038:7;4018:9;3993:53;;;3983:63;;3955:97;4083:2;4101:52;4145:7;4136:6;4125:9;4121:22;4101:52;;4176:364;;;4296:2;4284:9;4275:7;4271:23;4267:32;4264:2;;;4312:1;4309;4302:12;4264:2;4347:1;4364:53;4409:7;4389:9;4364:53;;;4354:63;;4326:97;4454:2;4472:52;4516:7;4507:6;4496:9;4492:22;4472:52;;4547:113;4630:24;4648:5;4630:24;;;4625:3;4618:37;4612:48;;;4667:104;4744:21;4759:5;4744:21;;4778:113;4861:24;4879:5;4861:24;;4898:152;4999:45;5019:24;5037:5;5019:24;;;4999:45;;5080:887;;5219:5;5213:12;5253:1;5242:9;5238:17;5266:1;5261:267;;;;5539:1;5534:427;;;;5231:730;;5261:267;5339:4;5335:1;5324:9;5320:17;5316:28;5358:88;5439:6;5434:3;5358:88;;;5480:9;5465:25;;5453:38;;5351:95;-1:-1;5505:16;;;-1:-1;5261:267;;5534:427;5603:1;5592:9;5588:17;5619:88;5700:6;5695:3;5619:88;;;5612:95;;5729:41;5764:5;5729:41;;;5786:1;5794:130;5808:6;5805:1;5802:13;5794:130;;;5867:14;;5854:11;;;5847:35;5914:1;5901:15;;;;5830:4;5823:12;5794:130;;;-1:-1;;5938:16;;;-1:-1;5231:730;;5189:778;;;;;;5975:347;;6087:39;6120:5;6087:39;;;6138:71;6202:6;6197:3;6138:71;;;6131:78;;6214:52;6259:6;6254:3;6247:4;6240:5;6236:16;6214:52;;;6287:29;6309:6;6287:29;;;6278:39;;;;6067:255;-1:-1;;;6067:255;6676:483;;6854:85;6936:2;6931:3;6854:85;;;6972:34;6952:55;;7041:34;7036:2;7027:12;;7020:56;7110:11;7105:2;7096:12;;7089:33;7150:2;7141:12;;6840:319;-1:-1;;6840:319;7168:398;;7346:84;7428:1;7423:3;7346:84;;;7463:66;7443:87;;7558:1;7549:11;;7332:234;-1:-1;;7332:234;7575:386;;7735:67;7799:2;7794:3;7735:67;;;7835:34;7815:55;;7904:19;7899:2;7890:12;;7883:41;7952:2;7943:12;;7721:240;-1:-1;;7721:240;7970:455;;8130:67;8194:2;8189:3;8130:67;;;8230:34;8210:55;;8299:34;8294:2;8285:12;;8278:56;8368:19;8363:2;8354:12;;8347:41;8416:2;8407:12;;8116:309;-1:-1;;8116:309;8434:532;;8594:68;8658:3;8653;8594:68;;;8695:34;8675:55;;8764:34;8759:2;8750:12;;8743:56;8833:34;8828:2;8819:12;;8812:56;8902:25;8897:2;8888:12;;8881:47;8956:3;8947:13;;8580:386;-1:-1;;8580:386;8975:477;;9153:85;9235:2;9230:3;9153:85;;;9271:34;9251:55;;9340:34;9335:2;9326:12;;9319:56;9409:5;9404:2;9395:12;;9388:27;9443:2;9434:12;;9139:313;-1:-1;;9139:313;9461:378;;9621:67;9685:2;9680:3;9621:67;;;9721:34;9701:55;;9790:11;9785:2;9776:12;;9769:33;9830:2;9821:12;;9607:232;-1:-1;;9607:232;9848:378;;10008:67;10072:2;10067:3;10008:67;;;10108:34;10088:55;;10177:11;10172:2;10163:12;;10156:33;10217:2;10208:12;;9994:232;-1:-1;;9994:232;10235:372;;10395:67;10459:2;10454:3;10395:67;;;10495:34;10475:55;;10564:5;10559:2;10550:12;;10543:27;10598:2;10589:12;;10381:226;-1:-1;;10381:226;10616:383;;10776:67;10840:2;10835:3;10776:67;;;10876:34;10856:55;;10945:16;10940:2;10931:12;;10924:38;10990:2;10981:12;;10762:237;-1:-1;;10762:237;11008:374;;11168:67;11232:2;11227:3;11168:67;;;11268:34;11248:55;;11337:7;11332:2;11323:12;;11316:29;11373:2;11364:12;;11154:228;-1:-1;;11154:228;11391:377;;11551:67;11615:2;11610:3;11551:67;;;11651:34;11631:55;;11720:10;11715:2;11706:12;;11699:32;11759:2;11750:12;;11537:231;-1:-1;;11537:231;11777:396;;11937:67;12001:2;11996:3;11937:67;;;12037:34;12017:55;;12106:29;12101:2;12092:12;;12085:51;12164:2;12155:12;;11923:250;-1:-1;;11923:250;12182:376;;12342:67;12406:2;12401:3;12342:67;;;12442:34;12422:55;;12511:9;12506:2;12497:12;;12490:31;12549:2;12540:12;;12328:230;-1:-1;;12328:230;12567:376;;12727:67;12791:2;12786:3;12727:67;;;12827:34;12807:55;;12896:9;12891:2;12882:12;;12875:31;12934:2;12925:12;;12713:230;-1:-1;;12713:230;12952:482;;13130:85;13212:2;13207:3;13130:85;;;13248:34;13228:55;;13317:34;13312:2;13303:12;;13296:56;13386:10;13381:2;13372:12;;13365:32;13425:2;13416:12;;13116:318;-1:-1;;13116:318;13443:398;;13603:67;13667:2;13662:3;13603:67;;;13703:34;13683:55;;13772:31;13767:2;13758:12;;13751:53;13832:2;13823:12;;13589:252;-1:-1;;13589:252;13969:110;14050:23;14067:5;14050:23;;14086:107;14165:22;14181:5;14165:22;;14200:124;14282:36;14312:5;14282:36;;14331:110;14412:23;14429:5;14412:23;;14448:264;;14593:94;14683:3;14674:6;14593:94;;14719:372;;14918:148;15062:3;14918:148;;15098:650;;15353:148;15497:3;15353:148;;;15346:155;;15512:75;15583:3;15574:6;15512:75;;;15609:2;15604:3;15600:12;15593:19;;15623:75;15694:3;15685:6;15623:75;;;-1:-1;15720:2;15711:12;;15334:414;-1:-1;;15334:414;15755:372;;15954:148;16098:3;15954:148;;16134:372;;16333:148;16477:3;16333:148;;16513:213;16631:2;16616:18;;16645:71;16620:9;16689:6;16645:71;;16733:201;16845:2;16830:18;;16859:65;16834:9;16897:6;16859:65;;16941:213;17059:2;17044:18;;17073:71;17048:9;17117:6;17073:71;;17161:655;17389:3;17374:19;;17404:71;17378:9;17448:6;17404:71;;;17486:72;17554:2;17543:9;17539:18;17530:6;17486:72;;;17569;17637:2;17626:9;17622:18;17613:6;17569:72;;;17652;17720:2;17709:9;17705:18;17696:6;17652:72;;;17735:71;17801:3;17790:9;17786:19;17777:6;17735:71;;;17360:456;;;;;;;;;17823:547;18025:3;18010:19;;18040:71;18014:9;18084:6;18040:71;;;18122:72;18190:2;18179:9;18175:18;18166:6;18122:72;;;18205;18273:2;18262:9;18258:18;18249:6;18205:72;;;18288;18356:2;18345:9;18341:18;18332:6;18288:72;;;17996:374;;;;;;;;18377:539;18575:3;18560:19;;18590:71;18564:9;18634:6;18590:71;;;18672:68;18736:2;18725:9;18721:18;18712:6;18672:68;;;18751:72;18819:2;18808:9;18804:18;18795:6;18751:72;;;18834;18902:2;18891:9;18887:18;18878:6;18834:72;;18923:293;19057:2;19071:47;;;19042:18;;19132:74;19042:18;19192:6;19132:74;;19531:407;19722:2;19736:47;;;19707:18;;19797:131;19707:18;19797:131;;19945:407;20136:2;20150:47;;;20121:18;;20211:131;20121:18;20211:131;;20359:407;20550:2;20564:47;;;20535:18;;20625:131;20535:18;20625:131;;20773:407;20964:2;20978:47;;;20949:18;;21039:131;20949:18;21039:131;;21187:407;21378:2;21392:47;;;21363:18;;21453:131;21363:18;21453:131;;21601:407;21792:2;21806:47;;;21777:18;;21867:131;21777:18;21867:131;;22015:407;22206:2;22220:47;;;22191:18;;22281:131;22191:18;22281:131;;22429:407;22620:2;22634:47;;;22605:18;;22695:131;22605:18;22695:131;;22843:407;23034:2;23048:47;;;23019:18;;23109:131;23019:18;23109:131;;23257:407;23448:2;23462:47;;;23433:18;;23523:131;23433:18;23523:131;;23671:407;23862:2;23876:47;;;23847:18;;23937:131;23847:18;23937:131;;24085:407;24276:2;24290:47;;;24261:18;;24351:131;24261:18;24351:131;;24499:407;24690:2;24704:47;;;24675:18;;24765:131;24675:18;24765:131;;25133:209;25249:2;25234:18;;25263:69;25238:9;25305:6;25263:69;;25349:316;25491:2;25476:18;;25505:69;25480:9;25547:6;25505:69;;;25585:70;25651:2;25640:9;25636:18;25627:6;25585:70;;25672:205;25786:2;25771:18;;25800:67;25775:9;25840:6;25800:67;;25884:211;26001:2;25986:18;;26015:70;25990:9;26058:6;26015:70;;26102:209;26218:2;26203:18;;26232:69;26207:9;26274:6;26232:69;;26318:320;26462:2;26447:18;;26476:70;26451:9;26519:6;26476:70;;;26557:71;26624:2;26613:9;26609:18;26600:6;26557:71;;26645:161;;26743:14;;;26785:4;26772:18;;;26702:104;26813:118;26897:12;;26868:63;27068:144;27203:3;27181:31;-1:-1;27181:31;27221:163;27324:19;;;27373:4;27364:14;;27317:67;27546:91;;27608:24;27626:5;27608:24;;27644:85;27710:13;27703:21;;27686:43;27815:121;27888:42;27877:54;;27860:76;28022:88;28094:10;28083:22;;28066:44;28117:81;28188:4;28177:16;;28160:38;28205:104;28277:26;28266:38;;28249:60;28316:106;;28394:23;28411:5;28394:23;;28430:268;28495:1;28502:101;28516:6;28513:1;28510:13;28502:101;;;28583:11;;;28577:18;28564:11;;;28557:39;28538:2;28531:10;28502:101;;;28618:6;28615:1;28612:13;28609:2;;;-1:-1;;28683:1;28665:16;;28658:27;28479:219;28787:97;28875:2;28855:14;28871:7;28851:28;;28835:49;28892:117;28961:24;28979:5;28961:24;;;28954:5;28951:35;28941:2;;29000:1;28997;28990:12;28941:2;28935:74;;29016:117;29085:24;29103:5;29085:24;;29264:115;29332:23;29349:5;29332:23;;29386:113;29453:22;29469:5;29453:22;;29506:115;29574:23;29591:5;29574:23;

Swarm Source

bzzr://599593199e7d3a76e2ec82ded5c7ec0030415564fd289d2b9e8e59c5e9e8bc9b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.