Contract 0x029eea6328086744e6cee640977a2084a5426407

Contract Overview

Balance:
0 BNB

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd2f81d863d9d90e3e41e79829b27375921306de791fb4906d7d10de5a012baafEmergency Reward...98596112021-06-19 4:16:1392 days 9 hrs ago0x32d1f9b3f7b3b9aad443d7d9a3178cb42da70455 IN  0x029eea6328086744e6cee640977a2084a54264070 BNB0.00044964
0x1099a6296d1d2baf5d4d20e213ae71ddb64c3aa8fb42ee7cb52328e75bdb78fcDeposit98423132021-06-18 13:51:1993 days 7 mins ago0x501da412381668e3084678bdae4a8032d4a7d20c IN  0x029eea6328086744e6cee640977a2084a54264070 BNB0.00041753
0x7b1f0fbe469966565f5814868a35b6d95c4058b984efc51a2402d4caf9f7eac5Add98422772021-06-18 13:49:3193 days 9 mins ago0x32d1f9b3f7b3b9aad443d7d9a3178cb42da70455 IN  0x029eea6328086744e6cee640977a2084a54264070 BNB0.0013102
0xf7e3358f70a3b614b7ae9ee70aed6c36f0f1ce982bede71825b93ce89da07575Add98422722021-06-18 13:49:1693 days 9 mins ago0x32d1f9b3f7b3b9aad443d7d9a3178cb42da70455 IN  0x029eea6328086744e6cee640977a2084a54264070 BNB0.0015041
0x9e6e0adad5692e105b1d20417d0ab7e7940dd65065cebf2ab2f5f2d830899b350x6080604098422432021-06-18 13:47:4993 days 11 mins ago0x32d1f9b3f7b3b9aad443d7d9a3178cb42da70455 IN  Contract Creation0 BNB0.02571429
[ Download CSV Export 
Latest 4 internal transactions
Parent Txn Hash Block From To Value
0xd2f81d863d9d90e3e41e79829b27375921306de791fb4906d7d10de5a012baaf98596112021-06-19 4:16:1392 days 9 hrs ago 0x029eea6328086744e6cee640977a2084a5426407 0xae13d989dac2f0debff460ac112a837c89baa7cd0 BNB
0xd2f81d863d9d90e3e41e79829b27375921306de791fb4906d7d10de5a012baaf98596112021-06-19 4:16:1392 days 9 hrs ago 0x029eea6328086744e6cee640977a2084a5426407 0xae13d989dac2f0debff460ac112a837c89baa7cd0 BNB
0x1099a6296d1d2baf5d4d20e213ae71ddb64c3aa8fb42ee7cb52328e75bdb78fc98423132021-06-18 13:51:1993 days 7 mins ago 0x029eea6328086744e6cee640977a2084a5426407 0x337610d27c682e347c9cd60bd4b3b107c9d34ddd0 BNB
0x7b1f0fbe469966565f5814868a35b6d95c4058b984efc51a2402d4caf9f7eac598422772021-06-18 13:49:3193 days 9 mins ago 0x029eea6328086744e6cee640977a2084a5426407 0x337610d27c682e347c9cd60bd4b3b107c9d34ddd0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PearlTreasury

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-06-18
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.12;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () public {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
 
// File: @openzeppelin/contracts/utils/ReentrancyGuard.sol

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
 
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () internal {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

/**
 * @title SafeBEP20
 * @dev Wrappers around BEP20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeBEP20 for IBEP20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeBEP20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IBEP20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IBEP20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IBEP20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IBEP20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            'SafeBEP20: approve from non-zero to non-zero allowance'
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IBEP20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IBEP20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, 'SafeBEP20: decreased allowance below zero');
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IBEP20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, 'SafeBEP20: low-level call failed');
        if (returndata.length > 0) {// Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), 'SafeBEP20: BEP20 operation did not succeed');
        }
    }
}

interface IBEP20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external view returns (address);

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

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

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

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

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

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

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly {size := extcodesize(account)}
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success,) = recipient.call{value : amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value : value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


contract PearlTreasury is Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    using SafeBEP20 for IBEP20;

    // Info of each user.
    struct UserInfo {
        uint256 amount;     // How many LP tokens the user has provided.
        uint256 rewardDebt; // Reward debt. See explanation below.
    }

    // Info of each pool.
    struct PoolInfo {
        IBEP20 lpToken;           // Address of LP token contract.
        uint256 allocPoint;       // How many allocation points assigned to this pool. Rewards to distribute per block.
        uint256 lastRewardBlock;  // Last block number that Reward Token distribution occurs.
        uint256 accRewardPerShare; // Accumulated Reward tokens per share, times 1e12. See below.
    }

    IBEP20 public rewardToken;

    // Reward tokens distributed per block.
    uint256 public rewardPerBlock;

    // Info of each pool.
    PoolInfo[] public poolInfo;
    // Info of each user that stakes LP tokens.
    mapping (uint256 => mapping (address => UserInfo)) public userInfo;
    // Total allocation point. Must be the sum of all allocation points in all pools.
    uint256 private totalAllocPoint = 0;
    // The block number when Reward mining starts.
    uint256 public startBlock;

    event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
    event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);
    event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount);


    IBEP20 stakeToken;

    constructor(
        IBEP20 _rewardToken,
        uint256 _rewardPerBlock,
        uint256 _startBlock
    ) public {
        rewardToken = _rewardToken;
        rewardPerBlock = _rewardPerBlock;
        startBlock = _startBlock;
    }

    function poolLength() external view returns (uint256) {
        return poolInfo.length;
    }

    mapping(IBEP20 => bool) public poolExistence;

    modifier nonDuplicated(IBEP20 _lpToken) {
        require(poolExistence[_lpToken] == false, "nonDuplicated: duplicated");
        _;
    }

    function updateStartBlock() public onlyOwner {
        startBlock = block.number;
    }

	// Add a new lp to the pool. Can only be called by the owner.
    function add(uint256 _allocPoint, IBEP20 _lpToken, bool _withUpdate) public onlyOwner nonDuplicated(_lpToken) {
        if (_withUpdate) {
            massUpdatePools();
        }
        uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock;
        totalAllocPoint = totalAllocPoint.add(_allocPoint);
        poolExistence[_lpToken] = true;
        poolInfo.push(PoolInfo({
	        lpToken : _lpToken,
	        allocPoint : _allocPoint,
	        lastRewardBlock : lastRewardBlock,
	        accRewardPerShare : 0
	    }));
    }

    // Update the given pool's Reward Token allocation point and deposit fee. Can only be called by the owner.
    function set(uint256 _pid, uint256 _allocPoint, bool _withUpdate) public onlyOwner {
        if (_withUpdate) {
            massUpdatePools();
        }
        totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);
        poolInfo[_pid].allocPoint = _allocPoint;
    }


    // Return reward multiplier over the given _from to _to block.
    function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) {
        return _to.sub(_from);
        }

    // View function to see pending Reward on frontend.
    function pendingReward(uint256 _pid, address _user) external view returns (uint256) {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];
        uint256 accRewardPerShare = pool.accRewardPerShare;
        uint256 lpSupply = pool.lpToken.balanceOf(address(this));
        if (block.number > pool.lastRewardBlock && lpSupply != 0) {
            uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number);
            uint256 tokenReward = multiplier.mul(rewardPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
            accRewardPerShare = accRewardPerShare.add(tokenReward.mul(1e12).div(lpSupply));
        }
        return user.amount.mul(accRewardPerShare).div(1e12).sub(user.rewardDebt);
    }

    // Update reward variables of the given pool to be up-to-date.
    function updatePool(uint256 _pid) public {
        PoolInfo storage pool = poolInfo[_pid];
        if (block.number <= pool.lastRewardBlock) {
            return;
        }
        uint256 lpSupply = pool.lpToken.balanceOf(address(this));
        if (lpSupply == 0 || pool.allocPoint == 0) {
            pool.lastRewardBlock = block.number;
            return;
        }
        uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number);
        pool.lastRewardBlock = block.number;
        if (multiplier == 0) {
            return;
        }
        uint256 tokenReward = multiplier.mul(rewardPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
        pool.accRewardPerShare = pool.accRewardPerShare.add(tokenReward.mul(1e12).div(lpSupply));
        pool.lastRewardBlock = block.number;
    }

    // Update reward variables for all pools. Be careful of gas spending!
    function massUpdatePools() public {
        uint256 length = poolInfo.length;
        for (uint256 pid = 0; pid < length; ++pid) {
            updatePool(pid);
        }
    }

    // Stake PEARL LP tokens to SmartChef
    function deposit(uint256 _pid, uint256 _amount) public nonReentrant {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        updatePool(_pid);
	        if (user.amount > 0) {
	            uint256 pending = user.amount.mul(pool.accRewardPerShare).div(1e12).sub(user.rewardDebt);
	            if (pending > 0) {
	                rewardToken.safeTransfer(address(msg.sender), pending);
	            }
	        }
	        if (_amount > 0) {
	            _amount = deflationaryDeposit(stakeToken, _amount);

	            user.amount = user.amount.add(_amount);

	        } else {
                user.amount = user.amount.add(_amount);
            }

        user.rewardDebt = user.amount.mul(pool.accRewardPerShare).div(1e12);

        emit Deposit(msg.sender, _pid, _amount);
    }

    function deflationaryDeposit(IBEP20 token, uint256 _amount) internal returns (uint256) {
        uint256 balanceBeforeDeposit = token.balanceOf(address(this));

        token.safeTransferFrom(address(msg.sender), address(this), _amount);

        uint256 balanceAfterDeposit = token.balanceOf(address(this));
        _amount = balanceAfterDeposit.sub(balanceBeforeDeposit);

        return _amount;
    }

    // Withdraw tokens from STAKING.
    function withdraw(uint256 _pid, uint256 _amount) public nonReentrant{
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];

        require(user.amount >= _amount, "PearlTreasury:: Withdraw not good");

        updatePool(_pid);

        uint256 pending = user.amount.mul(pool.accRewardPerShare).div(1e12).sub(user.rewardDebt);

        if (pending > 0) {
            rewardToken.safeTransfer(address(msg.sender), pending);
        }

        if (_amount > 0) {
            user.amount = user.amount.sub(_amount);

            pool.lpToken.safeTransfer(address(msg.sender), _amount);
        }

        user.rewardDebt = user.amount.mul(pool.accRewardPerShare).div(1e12);

        emit Withdraw(msg.sender, _pid, _amount);
    }

    // Withdraw without caring about rewards. EMERGENCY ONLY.
    function emergencyWithdraw(uint256 _pid) public nonReentrant {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];

        uint256 _amount = user.amount;

        pool.lpToken.safeTransfer(address(msg.sender), _amount);
        user.amount = 0;
        user.rewardDebt = 0;

        emit EmergencyWithdraw(msg.sender, _pid, _amount);
    }

    // Withdraw reward. EMERGENCY ONLY.
    function emergencyRewardWithdraw(uint256 _amount) public onlyOwner {
        require(_amount < rewardToken.balanceOf(address(this)), 'PearlTreasury:: Not enough token');

        rewardToken.safeTransfer(address(msg.sender), _amount);
    }

    // Check if reward validation is required
    function updateRewardPerBlock(uint256 _rewardPerBlock) public onlyOwner {
        massUpdatePools();

        rewardPerBlock = _rewardPerBlock;
    }

    function updateTotalAllocPoint(uint256 _pid, uint256 _allocPoint, bool _withUpdate) public onlyOwner {
        require(rewardToken.balanceOf(address(this)) >= _allocPoint, 'PearlTreasury:: Not enough token owned');
		if (_withUpdate) {
            massUpdatePools();
        }
        totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);
        poolInfo[_pid].allocPoint = _allocPoint;
    }
}

Contract ABI

[{"inputs":[{"internalType":"contract IBEP20","name":"_rewardToken","type":"address"},{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IBEP20","name":"_lpToken","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyRewardWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"name":"poolExistence","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IBEP20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accRewardPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"}],"name":"updateRewardPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateStartBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"updateTotalAllocPoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006006553480156200001657600080fd5b5060405162002d3b38038062002d3b833981810160405260608110156200003c57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050506000620000736200017060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001808190555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816003819055508060078190555050505062000178565b600033905090565b612bb380620001886000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806364482f79116100c357806393f1a40b1161007c57806393f1a40b1461048957806398969e82146104f2578063cbd258b514610554578063e2bbb158146105ae578063f2fde38b146105e6578063f7c618c11461062a5761014d565b806364482f7914610359578063715018a61461039d57806388e114dc146103a75780638ae39cac146103eb5780638da5cb5b146104095780638dbb1e3a1461043d5761014d565b80633279beab116101155780633279beab1461026f578063441a3e701461029d57806348cd4cb1146102d557806351eb05a6146102f35780635312ea8e14610321578063630b5ba11461034f5761014d565b806301f8a97614610152578063081e3eda146101805780631526fe271461019e5780631eaaa0451461020b5780632880269814610265575b600080fd5b61017e6004803603602081101561016857600080fd5b810190808035906020019092919050505061065e565b005b61018861071f565b6040518082815260200191505060405180910390f35b6101ca600480360360208110156101b457600080fd5b810190808035906020019092919050505061072c565b604051808573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390f35b6102636004803603606081101561022157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050610789565b005b61026d610a69565b005b61029b6004803603602081101561028557600080fd5b8101908080359060200190929190505050610b21565b005b6102d3600480360360408110156102b357600080fd5b810190808035906020019092919080359060200190929190505050610d58565b005b6102dd611064565b6040518082815260200191505060405180910390f35b61031f6004803603602081101561030957600080fd5b810190808035906020019092919050505061106a565b005b61034d6004803603602081101561033757600080fd5b8101908080359060200190929190505050611254565b005b610357611410565b005b61039b6004803603606081101561036f57600080fd5b81019080803590602001909291908035906020019092919080351515906020019092919050505061143d565b005b6103a561156e565b005b6103e9600480360360608110156103bd57600080fd5b8101908080359060200190929190803590602001909291908035151590602001909291905050506116db565b005b6103f3611928565b6040518082815260200191505060405180910390f35b61041161192e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104736004803603604081101561045357600080fd5b810190808035906020019092919080359060200190929190505050611957565b6040518082815260200191505060405180910390f35b6104d56004803603604081101561049f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611974565b604051808381526020018281526020019250505060405180910390f35b61053e6004803603604081101561050857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a5565b6040518082815260200191505060405180910390f35b6105966004803603602081101561056a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611beb565b60405180821515815260200191505060405180910390f35b6105e4600480360360408110156105c457600080fd5b810190808035906020019092919080359060200190929190505050611c0b565b005b610628600480360360208110156105fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ecb565b005b6106326120bd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106666120e3565b73ffffffffffffffffffffffffffffffffffffffff1661068461192e565b73ffffffffffffffffffffffffffffffffffffffff161461070d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610715611410565b8060038190555050565b6000600480549050905090565b6004818154811061073957fe5b90600052602060002090600402016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154905084565b6107916120e3565b73ffffffffffffffffffffffffffffffffffffffff166107af61192e565b73ffffffffffffffffffffffffffffffffffffffff1614610838576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8160001515600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146108ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f6e4475706c6963617465643a206475706c6963617465640000000000000081525060200191505060405180910390fd5b811561090e5761090d611410565b5b6000600754431161092157600754610923565b435b905061093a856006546120eb90919063ffffffff16565b6006819055506001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600460405180608001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018381526020016000815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015550505050505050565b610a716120e3565b73ffffffffffffffffffffffffffffffffffffffff16610a8f61192e565b73ffffffffffffffffffffffffffffffffffffffff1614610b18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b43600781905550565b610b296120e3565b73ffffffffffffffffffffffffffffffffffffffff16610b4761192e565b73ffffffffffffffffffffffffffffffffffffffff1614610bd0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610c5957600080fd5b505afa158015610c6d573d6000803e3d6000fd5b505050506040513d6020811015610c8357600080fd5b81019080805190602001909291905050508110610d08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f506561726c54726561737572793a3a204e6f7420656e6f75676820746f6b656e81525060200191505060405180910390fd5b610d553382600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166121739092919063ffffffff16565b50565b60026001541415610dd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600060048381548110610de857fe5b9060005260206000209060040201905060006005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508281600001541015610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612b5d6021913960400191505060405180910390fd5b610eb28461106a565b6000610efc8260010154610eee64e8d4a51000610ee08760030154876000015461221590919063ffffffff16565b61229b90919063ffffffff16565b6122e590919063ffffffff16565b90506000811115610f5557610f543382600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166121739092919063ffffffff16565b5b6000841115610fcd57610f758483600001546122e590919063ffffffff16565b8260000181905550610fcc33858560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166121739092919063ffffffff16565b5b610fff64e8d4a51000610ff18560030154856000015461221590919063ffffffff16565b61229b90919063ffffffff16565b8260010181905550843373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568866040518082815260200191505060405180910390a3505050600180819055505050565b60075481565b60006004828154811061107957fe5b906000526020600020906004020190508060020154431161109a5750611251565b60008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561112757600080fd5b505afa15801561113b573d6000803e3d6000fd5b505050506040513d602081101561115157600080fd5b810190808051906020019092919050505090506000811480611177575060008260010154145b1561118c574382600201819055505050611251565b600061119c836002015443611957565b905043836002018190555060008114156111b857505050611251565b60006111f96006546111eb86600101546111dd6003548761221590919063ffffffff16565b61221590919063ffffffff16565b61229b90919063ffffffff16565b905061123b6112288461121a64e8d4a510008561221590919063ffffffff16565b61229b90919063ffffffff16565b85600301546120eb90919063ffffffff16565b8460030181905550438460020181905550505050505b50565b600260015414156112cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000600482815481106112e457fe5b9060005260206000209060040201905060006005600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015490506113a033828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166121739092919063ffffffff16565b6000826000018190555060008260010181905550833373ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae0595836040518082815260200191505060405180910390a35050506001808190555050565b6000600480549050905060005b818110156114395761142e8161106a565b80600101905061141d565b5050565b6114456120e3565b73ffffffffffffffffffffffffffffffffffffffff1661146361192e565b73ffffffffffffffffffffffffffffffffffffffff16146114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80156114fb576114fa611410565b5b611540826115326004868154811061150f57fe5b9060005260206000209060040201600101546006546122e590919063ffffffff16565b6120eb90919063ffffffff16565b600681905550816004848154811061155457fe5b906000526020600020906004020160010181905550505050565b6115766120e3565b73ffffffffffffffffffffffffffffffffffffffff1661159461192e565b73ffffffffffffffffffffffffffffffffffffffff161461161d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6116e36120e3565b73ffffffffffffffffffffffffffffffffffffffff1661170161192e565b73ffffffffffffffffffffffffffffffffffffffff161461178a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561181457600080fd5b505afa158015611828573d6000803e3d6000fd5b505050506040513d602081101561183e57600080fd5b810190808051906020019092919050505010156118a6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612aa06026913960400191505060405180910390fd5b80156118b5576118b4611410565b5b6118fa826118ec600486815481106118c957fe5b9060005260206000209060040201600101546006546122e590919063ffffffff16565b6120eb90919063ffffffff16565b600681905550816004848154811061190e57fe5b906000526020600020906004020160010181905550505050565b60035481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061196c83836122e590919063ffffffff16565b905092915050565b6005602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b600080600484815481106119b557fe5b9060005260206000209060040201905060006005600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260030154905060008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611aaf57600080fd5b505afa158015611ac3573d6000803e3d6000fd5b505050506040513d6020811015611ad957600080fd5b81019080805190602001909291905050509050836002015443118015611b00575060008114155b15611b9b576000611b15856002015443611957565b90506000611b58600654611b4a8860010154611b3c6003548761221590919063ffffffff16565b61221590919063ffffffff16565b61229b90919063ffffffff16565b9050611b96611b8784611b7964e8d4a510008561221590919063ffffffff16565b61229b90919063ffffffff16565b856120eb90919063ffffffff16565b935050505b611bdf8360010154611bd164e8d4a51000611bc386886000015461221590919063ffffffff16565b61229b90919063ffffffff16565b6122e590919063ffffffff16565b94505050505092915050565b60096020528060005260406000206000915054906101000a900460ff1681565b60026001541415611c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600060048381548110611c9b57fe5b9060005260206000209060040201905060006005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611d088461106a565b600081600001541115611dba576000611d5f8260010154611d5164e8d4a51000611d438760030154876000015461221590919063ffffffff16565b61229b90919063ffffffff16565b6122e590919063ffffffff16565b90506000811115611db857611db73382600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166121739092919063ffffffff16565b5b505b6000831115611e1557611def600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461232f565b9250611e088382600001546120eb90919063ffffffff16565b8160000181905550611e35565b611e2c8382600001546120eb90919063ffffffff16565b81600001819055505b611e6764e8d4a51000611e598460030154846000015461221590919063ffffffff16565b61229b90919063ffffffff16565b8160010181905550833373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15856040518082815260200191505060405180910390a35050600180819055505050565b611ed36120e3565b73ffffffffffffffffffffffffffffffffffffffff16611ef161192e565b73ffffffffffffffffffffffffffffffffffffffff1614611f7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612af06026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600080828401905083811015612169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6122108363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506124c9565b505050565b6000808314156122285760009050612295565b600082840290508284828161223957fe5b0414612290576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612b3c6021913960400191505060405180910390fd5b809150505b92915050565b60006122dd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125b8565b905092915050565b600061232783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061267e565b905092915050565b6000808373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561239957600080fd5b505afa1580156123ad573d6000803e3d6000fd5b505050506040513d60208110156123c357600080fd5b810190808051906020019092919050505090506124033330858773ffffffffffffffffffffffffffffffffffffffff1661273e909392919063ffffffff16565b60008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561246c57600080fd5b505afa158015612480573d6000803e3d6000fd5b505050506040513d602081101561249657600080fd5b810190808051906020019092919050505090506124bc82826122e590919063ffffffff16565b9350839250505092915050565b606061252b826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166127ff9092919063ffffffff16565b90506000815111156125b35780806020019051602081101561254c57600080fd5b81019080805190602001909291905050506125b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612ac6602a913960400191505060405180910390fd5b5b505050565b60008083118290612664576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561262957808201518184015260208101905061260e565b50505050905090810190601f1680156126565780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161267057fe5b049050809150509392505050565b600083831115829061272b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156126f05780820151818401526020810190506126d5565b50505050905090810190601f16801561271d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6127f9846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506124c9565b50505050565b606061280e8484600085612817565b90509392505050565b606082471015612872576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612b166026913960400191505060405180910390fd5b61287b856129c0565b6128ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061293d578051825260208201915060208101905060208303925061291a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461299f576040519150601f19603f3d011682016040523d82523d6000602084013e6129a4565b606091505b50915091506129b48282866129d3565b92505050949350505050565b600080823b905060008111915050919050565b606083156129e357829050612a98565b6000835111156129f65782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a5d578082015181840152602081019050612a42565b50505050905090810190601f168015612a8a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe506561726c54726561737572793a3a204e6f7420656e6f75676820746f6b656e206f776e65645361666542455032303a204245503230206f7065726174696f6e20646964206e6f7420737563636565644f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77506561726c54726561737572793a3a205769746864726177206e6f7420676f6f64a2646970667358221220bdccf42168cc7f6962e3850c5d6c743e1aae0bd45ce7344b263ee4ecee3a6e0464736f6c634300060c0033000000000000000000000000ae13d989dac2f0debff460ac112a837c89baa7cd000000000000000000000000000000000000000000000000000009184e72a0000000000000000000000000000000000000000000000000000000000000962c83

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000ae13d989dac2f0debff460ac112a837c89baa7cd000000000000000000000000000000000000000000000000000009184e72a0000000000000000000000000000000000000000000000000000000000000962c83
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000ae13d989dac2f0debff460ac112a837c89baa7cd
Arg [1] : 000000000000000000000000000000000000000000000000000009184e72a000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000962c83


Deployed ByteCode Sourcemap

25325:9084:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33816:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27137:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26238:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27603:569;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27442:89;;;:::i;:::-;;33517:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32184:806;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26574:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29715:827;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33061:407;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30625:180;;;:::i;:::-;;28292:304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1717:148;;;:::i;:::-;;33977:429;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26173:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1066:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28674:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26320:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;28864:775;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27240:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30856:861;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2020:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26094:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33816:153;1297:12;:10;:12::i;:::-;1286:23;;:7;:5;:7::i;:::-;:23;;;1278:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33899:17:::1;:15;:17::i;:::-;33946:15;33929:14;:32;;;;33816:153:::0;:::o;27137:95::-;27182:7;27209:8;:15;;;;27202:22;;27137:95;:::o;26238:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27603:569::-;1297:12;:10;:12::i;:::-;1286:23;;:7;:5;:7::i;:::-;:23;;;1278:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27703:8:::1;27379:5;27352:32;;:13;:23;27366:8;27352:23;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;27344:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27728:11:::2;27724:61;;;27756:17;:15;:17::i;:::-;27724:61;27795:23;27836:10;;27821:12;:25;:53;;27864:10;;27821:53;;;27849:12;27821:53;27795:79;;27903:32;27923:11;27903:15;;:19;;:32;;;;:::i;:::-;27885:15;:50;;;;27972:4;27946:13;:23;27960:8;27946:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;27987:8;28001:162;;;;;;;;28032:8;28001:162;;;;;;28065:11;28001:162;;;;28106:15;28001:162;;;;28153:1;28001:162;;::::0;27987:177:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27425:1;1357::::1;27603:569:::0;;;:::o;27442:89::-;1297:12;:10;:12::i;:::-;1286:23;;:7;:5;:7::i;:::-;:23;;;1278:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27511:12:::1;27498:10;:25;;;;27442:89::o:0;33517:244::-;1297:12;:10;:12::i;:::-;1286:23;;:7;:5;:7::i;:::-;:23;;;1278:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33613:11:::1;;;;;;;;;;;:21;;;33643:4;33613:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;33603:7;:46;33595:91;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33699:54;33732:10;33745:7;33699:11;;;;;;;;;;;:24;;;;:54;;;;;:::i;:::-;33517:244:::0;:::o;32184:806::-;4960:1;5566:7;;:19;;5558:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4960:1;5699:7;:18;;;;32263:21:::1;32287:8;32296:4;32287:14;;;;;;;;;;;;;;;;;;32263:38;;32312:21;32336:8;:14;32345:4;32336:14;;;;;;;;;;;:26;32351:10;32336:26;;;;;;;;;;;;;;;32312:50;;32398:7;32383:4;:11;;;:22;;32375:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32456:16;32467:4;32456:10;:16::i;:::-;32485:15;32503:70;32557:4;:15;;;32503:49;32547:4;32503:39;32519:4;:22;;;32503:4;:11;;;:15;;:39;;;;:::i;:::-;:43;;:49;;;;:::i;:::-;:53;;:70;;;;:::i;:::-;32485:88;;32600:1;32590:7;:11;32586:98;;;32618:54;32651:10;32664:7;32618:11;;;;;;;;;;;:24;;;;:54;;;;;:::i;:::-;32586:98;32710:1;32700:7;:11;32696:154;;;32742:24;32758:7;32742:4;:11;;;:15;;:24;;;;:::i;:::-;32728:4;:11;;:38;;;;32783:55;32817:10;32830:7;32783:4;:12;;;;;;;;;;;;:25;;;;:55;;;;;:::i;:::-;32696:154;32880:49;32924:4;32880:39;32896:4;:22;;;32880:4;:11;;;:15;;:39;;;;:::i;:::-;:43;;:49;;;;:::i;:::-;32862:4;:15;;:67;;;;32968:4;32956:10;32947:35;;;32974:7;32947:35;;;;;;;;;;;;;;;;;;5730:1;;;4916::::0;5878:7;:22;;;;32184:806;;:::o;26574:25::-;;;;:::o;29715:827::-;29767:21;29791:8;29800:4;29791:14;;;;;;;;;;;;;;;;;;29767:38;;29836:4;:20;;;29820:12;:36;29816:75;;29873:7;;;29816:75;29901:16;29920:4;:12;;;;;;;;;;;;:22;;;29951:4;29920:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29901:56;;29984:1;29972:8;:13;:37;;;;30008:1;29989:4;:15;;;:20;29972:37;29968:126;;;30049:12;30026:4;:20;;:35;;;;30076:7;;;;29968:126;30104:18;30125:49;30139:4;:20;;;30161:12;30125:13;:49::i;:::-;30104:70;;30208:12;30185:4;:20;;:35;;;;30249:1;30235:10;:15;30231:54;;;30267:7;;;;;30231:54;30295:19;30317:72;30373:15;;30317:51;30352:4;:15;;;30317:30;30332:14;;30317:10;:14;;:30;;;;:::i;:::-;:34;;:51;;;;:::i;:::-;:55;;:72;;;;:::i;:::-;30295:94;;30425:63;30452:35;30478:8;30452:21;30468:4;30452:11;:15;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;30425:4;:22;;;:26;;:63;;;;:::i;:::-;30400:4;:22;;:88;;;;30522:12;30499:4;:20;;:35;;;;29715:827;;;;;;:::o;33061:407::-;4960:1;5566:7;;:19;;5558:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4960:1;5699:7;:18;;;;33133:21:::1;33157:8;33166:4;33157:14;;;;;;;;;;;;;;;;;;33133:38;;33182:21;33206:8;:14;33215:4;33206:14;;;;;;;;;;;:26;33221:10;33206:26;;;;;;;;;;;;;;;33182:50;;33245:15;33263:4;:11;;;33245:29;;33287:55;33321:10;33334:7;33287:4;:12;;;;;;;;;;;;:25;;;;:55;;;;;:::i;:::-;33367:1;33353:4;:11;;:15;;;;33397:1;33379:4;:15;;:19;;;;33446:4;33434:10;33416:44;;;33452:7;33416:44;;;;;;;;;;;;;;;;;;5730:1;;;4916::::0;5878:7;:22;;;;33061:407;:::o;30625:180::-;30670:14;30687:8;:15;;;;30670:32;;30718:11;30713:85;30741:6;30735:3;:12;30713:85;;;30771:15;30782:3;30771:10;:15::i;:::-;30749:5;;;;;30713:85;;;;30625:180;:::o;28292:304::-;1297:12;:10;:12::i;:::-;1286:23;;:7;:5;:7::i;:::-;:23;;;1278:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28390:11:::1;28386:61;;;28418:17;:15;:17::i;:::-;28386:61;28475:63;28526:11;28475:46;28495:8;28504:4;28495:14;;;;;;;;;;;;;;;;;;:25;;;28475:15;;:19;;:46;;;;:::i;:::-;:50;;:63;;;;:::i;:::-;28457:15;:81;;;;28577:11;28549:8;28558:4;28549:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;28292:304:::0;;;:::o;1717:148::-;1297:12;:10;:12::i;:::-;1286:23;;:7;:5;:7::i;:::-;:23;;;1278:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1824:1:::1;1787:40;;1808:6;::::0;::::1;;;;;;;;1787:40;;;;;;;;;;;;1855:1;1838:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1717:148::o:0;33977:429::-;1297:12;:10;:12::i;:::-;1286:23;;:7;:5;:7::i;:::-;:23;;;1278:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34137:11:::1;34097;;;;;;;;;;;:21;;;34127:4;34097:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:51;;34089:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34200:11;34196:61;;;34228:17;:15;:17::i;:::-;34196:61;34285:63;34336:11;34285:46;34305:8;34314:4;34305:14;;;;;;;;;;;;;;;;;;:25;;;34285:15;;:19;;:46;;;;:::i;:::-;:50;;:63;;;;:::i;:::-;34267:15;:81;;;;34387:11;34359:8;34368:4;34359:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;33977:429:::0;;;:::o;26173:29::-;;;;:::o;1066:87::-;1112:7;1139:6;;;;;;;;;;;1132:13;;1066:87;:::o;28674:125::-;28746:7;28773:14;28781:5;28773:3;:7;;:14;;;;:::i;:::-;28766:21;;28674:125;;;;:::o;26320:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28864:775::-;28939:7;28959:21;28983:8;28992:4;28983:14;;;;;;;;;;;;;;;;;;28959:38;;29008:21;29032:8;:14;29041:4;29032:14;;;;;;;;;;;:21;29047:5;29032:21;;;;;;;;;;;;;;;29008:45;;29064:25;29092:4;:22;;;29064:50;;29125:16;29144:4;:12;;;;;;;;;;;;:22;;;29175:4;29144:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29125:56;;29211:4;:20;;;29196:12;:35;:52;;;;;29247:1;29235:8;:13;;29196:52;29192:357;;;29265:18;29286:49;29300:4;:20;;;29322:12;29286:13;:49::i;:::-;29265:70;;29350:19;29372:72;29428:15;;29372:51;29407:4;:15;;;29372:30;29387:14;;29372:10;:14;;:30;;;;:::i;:::-;:34;;:51;;;;:::i;:::-;:55;;:72;;;;:::i;:::-;29350:94;;29479:58;29501:35;29527:8;29501:21;29517:4;29501:11;:15;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;29479:17;:21;;:58;;;;:::i;:::-;29459:78;;29192:357;;;29566:65;29615:4;:15;;;29566:44;29605:4;29566:34;29582:17;29566:4;:11;;;:15;;:34;;;;:::i;:::-;:38;;:44;;;;:::i;:::-;:48;;:65;;;;:::i;:::-;29559:72;;;;;;28864:775;;;;:::o;27240:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;30856:861::-;4960:1;5566:7;;:19;;5558:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4960:1;5699:7;:18;;;;30935:21:::1;30959:8;30968:4;30959:14;;;;;;;;;;;;;;;;;;30935:38;;30984:21;31008:8;:14;31017:4;31008:14;;;;;;;;;;;:26;31023:10;31008:26;;;;;;;;;;;;;;;30984:50;;31045:16;31056:4;31045:10;:16::i;:::-;31091:1;31077:4;:11;;;:15;31073:261;;;31110:15;31128:70;31182:4;:15;;;31128:49;31172:4;31128:39;31144:4;:22;;;31128:4;:11;;;:15;;:39;;;;:::i;:::-;:43;;:49;;;;:::i;:::-;:53;;:70;;;;:::i;:::-;31110:88;;31228:1;31218:7;:11;31214:108;;;31251:54;31284:10;31297:7;31251:11;;;;;;;;;;;:24;;;;:54;;;;;:::i;:::-;31214:108;31073:261;;31359:1;31349:7;:11;31345:233;;;31388:40;31408:10;;;;;;;;;;;31420:7;31388:19;:40::i;:::-;31378:50;;31460:24;31476:7;31460:4;:11;;;:15;;:24;;;;:::i;:::-;31446:4;:11;;:38;;;;31345:233;;;31538:24;31554:7;31538:4;:11;;;:15;;:24;;;;:::i;:::-;31524:4;:11;;:38;;;;31345:233;31608:49;31652:4;31608:39;31624:4;:22;;;31608:4;:11;;;:15;;:39;;;;:::i;:::-;:43;;:49;;;;:::i;:::-;31590:4;:15;;:67;;;;31695:4;31683:10;31675:34;;;31701:7;31675:34;;;;;;;;;;;;;;;;;;5730:1;;4916::::0;5878:7;:22;;;;30856:861;;:::o;2020:244::-;1297:12;:10;:12::i;:::-;1286:23;;:7;:5;:7::i;:::-;:23;;;1278:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2129:1:::1;2109:22;;:8;:22;;;;2101:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2219:8;2190:38;;2211:6;::::0;::::1;;;;;;;;2190:38;;;;;;;;;;;;2248:8;2239:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;2020:244:::0;:::o;26094:25::-;;;;;;;;;;;;;:::o;2272:98::-;2325:7;2352:10;2345:17;;2272:98;:::o;6179:181::-;6237:7;6257:9;6273:1;6269;:5;6257:17;;6298:1;6293;:6;;6285:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6351:1;6344:8;;;6179:181;;;;:::o;11198:177::-;11281:86;11301:5;11331:23;;;11356:2;11360:5;11308:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11281:19;:86::i;:::-;11198:177;;;:::o;7533:471::-;7591:7;7841:1;7836;:6;7832:47;;;7866:1;7859:8;;;;7832:47;7891:9;7907:1;7903;:5;7891:17;;7936:1;7931;7927;:5;;;;;;:10;7919:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7995:1;7988:8;;;7533:471;;;;;:::o;8480:132::-;8538:7;8565:39;8569:1;8572;8565:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8558:46;;8480:132;;;;:::o;6643:136::-;6701:7;6728:43;6732:1;6735;6728:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6721:50;;6643:136;;;;:::o;31725:413::-;31803:7;31823:28;31854:5;:15;;;31878:4;31854:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31823:61;;31897:67;31928:10;31949:4;31956:7;31897:5;:22;;;;:67;;;;;;:::i;:::-;31977:27;32007:5;:15;;;32031:4;32007:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31977:60;;32058:45;32082:20;32058:19;:23;;:45;;;;:::i;:::-;32048:55;;32123:7;32116:14;;;;31725:413;;;;:::o;13503:760::-;13927:23;13953:69;13981:4;13953:69;;;;;;;;;;;;;;;;;13961:5;13953:27;;;;:69;;;;;:::i;:::-;13927:95;;14057:1;14037:10;:17;:21;14033:223;;;14178:10;14167:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14159:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14033:223;13503:760;;;:::o;9108:278::-;9194:7;9226:1;9222;:5;9229:12;9214:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9253:9;9269:1;9265;:5;;;;;;9253:17;;9377:1;9370:8;;;9108:278;;;;;:::o;7082:192::-;7168:7;7201:1;7196;:6;;7204:12;7188:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7228:9;7244:1;7240;:5;7228:17;;7265:1;7258:8;;;7082:192;;;;;:::o;11383:205::-;11484:96;11504:5;11534:27;;;11563:4;11569:2;11573:5;11511:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11484:19;:96::i;:::-;11383:205;;;;:::o;20982:195::-;21085:12;21117:52;21139:6;21147:4;21153:1;21156:12;21117:21;:52::i;:::-;21110:59;;20982:195;;;;;:::o;22034:529::-;22161:12;22219:5;22194:21;:30;;22186:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22286:18;22297:6;22286:10;:18::i;:::-;22278:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22412:12;22426:23;22453:6;:11;;22473:5;22480:4;22453:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22411:74;;;;22503:52;22521:7;22530:10;22542:12;22503:17;:52::i;:::-;22496:59;;;;22034:529;;;;;;:::o;18066:420::-;18126:4;18334:12;18444:7;18432:20;18424:28;;18477:1;18470:4;:8;18463:15;;;18066:420;;;:::o;24573:743::-;24689:12;24718:7;24714:595;;;24749:10;24742:17;;;;24714:595;24883:1;24863:10;:17;:21;24859:439;;;25126:10;25120:17;25187:15;25174:10;25170:2;25166:19;25159:44;25074:148;25269:12;25262:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24573:743;;;;;;:::o

Swarm Source

ipfs://bdccf42168cc7f6962e3850c5d6c743e1aae0bd45ce7344b263ee4ecee3a6e04
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading