ETH Price: $2,055.46 (+7.37%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Modify Offering ...234273342025-09-23 17:50:11160 days ago1758649811IN
0x25862c4f...6fA08dE78
0 ETH0.000217351.84242002
Cancel Offering234273042025-09-23 17:44:11160 days ago1758649451IN
0x25862c4f...6fA08dE78
0 ETH0.0000991.68448303
Collect Investme...228376432025-07-03 8:55:23242 days ago1751532923IN
0x25862c4f...6fA08dE78
0 ETH0.000325682.83019204
Modify Offering ...228174502025-06-30 13:11:59245 days ago1751289119IN
0x25862c4f...6fA08dE78
0 ETH0.000513644.25378368
Return Investmen...228174152025-06-30 13:04:59245 days ago1751288699IN
0x25862c4f...6fA08dE78
0 ETH0.000568394.25019543
Invest227590032025-06-22 9:11:11253 days ago1750583471IN
0x25862c4f...6fA08dE78
0 ETH0.000290721.17471854
Invest227461892025-06-20 14:08:59255 days ago1750428539IN
0x25862c4f...6fA08dE78
0 ETH0.001857616.59471741
Modify Offering ...227363352025-06-19 5:07:35256 days ago1750309655IN
0x25862c4f...6fA08dE78
0 ETH0.000349890.95744937
Invest227160902025-06-16 9:08:23259 days ago1750064903IN
0x25862c4f...6fA08dE78
0 ETH0.000362891.28830316
Invest226732932025-06-10 9:33:35265 days ago1749548015IN
0x25862c4f...6fA08dE78
0 ETH0.000376722.39964271
Modify Offering ...226457682025-06-06 13:12:35269 days ago1749215555IN
0x25862c4f...6fA08dE78
0 ETH0.000231561.84772086
Modify Offering ...226153842025-06-02 7:02:47273 days ago1748847767IN
0x25862c4f...6fA08dE78
0 ETH0.00019811.67958518
Cancel Offering225731942025-05-27 9:21:23279 days ago1748337683IN
0x25862c4f...6fA08dE78
0 ETH0.000133992.27987776
Modify Offering ...225292502025-05-21 5:41:59285 days ago1747806119IN
0x25862c4f...6fA08dE78
0 ETH0.000439081.2016093
Modify Offering ...224337072025-05-07 19:07:23299 days ago1746644843IN
0x25862c4f...6fA08dE78
0 ETH0.000551061.59555046
Invest221283202025-03-26 3:14:23341 days ago1742958863IN
0x25862c4f...6fA08dE78
0 ETH0.000259650.92171994
Modify Offering ...218947832025-02-21 12:42:23374 days ago1740141743IN
0x25862c4f...6fA08dE78
0 ETH0.000158261.21790693
Cancel Offering218947492025-02-21 12:35:35374 days ago1740141335IN
0x25862c4f...6fA08dE78
0 ETH0.000073761.25503419
Modify Offering ...217842502025-02-06 1:42:35389 days ago1738806155IN
0x25862c4f...6fA08dE78
0 ETH0.000564371.46466823
Modify Offering ...217801302025-02-05 11:55:35390 days ago1738756535IN
0x25862c4f...6fA08dE78
0 ETH0.000204481.76847367
Collect Investme...217794692025-02-05 9:42:23390 days ago1738748543IN
0x25862c4f...6fA08dE78
0 ETH0.000183741.99564043
Invest217354192025-01-30 5:59:47396 days ago1738216787IN
0x25862c4f...6fA08dE78
0 ETH0.000459241.86326807
Invest217253412025-01-28 20:14:23397 days ago1738095263IN
0x25862c4f...6fA08dE78
0 ETH0.001417055.83857399
Collect Investme...216722052025-01-21 10:15:47405 days ago1737454547IN
0x25862c4f...6fA08dE78
0 ETH0.0014055714.34642182
Invest216668652025-01-20 16:21:35406 days ago1737390095IN
0x25862c4f...6fA08dE78
0 ETH0.0109299242.07149194
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FixedPriceInitialOffering

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 4: FixedPriceInitialOffering.sol
/*
* SPDX-License-Identifier: UNLICENSED
* Copyright © 2021 Blocksquare d.o.o.
*/

pragma solidity ^0.6.12;
pragma experimental ABIEncoderV2;

import "./Ownable.sol";
import "./SafeMath.sol";


interface FixedPriceInitialOfferingHelpers {
    function mint(address[] memory accounts, uint256[] memory amounts) external returns (bool);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    function transfer(address sender, uint256 amount) external returns (bool);

    function totalSupply() external view returns (uint256);

    function canEditProperty(address wallet, address property) external view returns (bool);

    function contractBurn(address user, uint256 amount) external returns (bool);

    function cap() external view returns (uint256);

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

    function hasSystemAdminRights(address sender) external view returns (bool);

    function isCPAdminOfProperty(address admin, address property) external view returns (bool);

    function getUserBytesFromWallet(address wallet) external view returns (bytes32);
}

/// @title Fixed Price Initial Offering
contract FixedPriceInitialOffering is Ownable {
    using SafeMath for uint256;

    struct Offering {
        uint256 presaleStart;
        uint256 presaleEnd;
        uint256 saleStart;
        uint256 saleEnd;
        uint256 price;
        uint256 amountCollected;
        uint256 presaleCollected;
        uint256 presaleMaxInvestment;
        uint256 presaleMinInvestment;
        uint256 maxInvestment;
        uint256 minInvestment;
        uint256 softCap;
        address investmentToken;
        address collector;
        address feeCollector;
        uint256 fee;
        bool investmentCollected;
    }

    struct NewOffering {
        uint256 presaleStart;
        uint256 presaleEnd;
        uint256 saleEnd;
        uint256 price;
        uint256 presaleMaxInvestment;
        uint256 presaleMinInvestment;
        uint256 maxInvestment;
        uint256 minInvestment;
        uint256 softCap;
        address investmentToken;
        address collector;
        address feeCollector;
        uint256 fee;
    }

    mapping(address => mapping(address => mapping(uint16 => uint256))) private _userInvestment;
    mapping(address => mapping(bytes32 => mapping(uint16 => uint256))) private _userTotalInvestment;
    mapping(address => mapping(address => mapping(uint16 => uint256))) private _userTokens;
    mapping(address => mapping(address => mapping(uint16 => uint256))) private _userTokensPresale;
    mapping(address => Offering) private _offerings;
    mapping(address => uint16) private _numOfSuccessfulOfferings;

    address private _dataProxy;
    address private _users;

    modifier onlyCPOrAdmin(address admin, address property) {
        require(FixedPriceInitialOfferingHelpers(_dataProxy).canEditProperty(admin, property), "Initial investment: You need to be able to edit property");
        _;
    }

    event Invested(address indexed property, address indexed wallet, address investmentToken, uint256 amountInvested, uint256 amountReceived);
    event InitialOffer(address indexed property, uint256 pricePerToken, uint256 presaleMaxInvestment, uint256 presaleMinInvestment, uint256 maxInvestment, uint256 minInvestment, uint256 softCap, uint256 presaleStart, uint256 presaleEnd, uint256 saleStart, uint256 saleEnd, address investmentCurrency, address collector, address feeCollector, uint256 fee);
    event ClaimInvestment(address indexed property, uint256 amount, uint256 feeAmount);
    event ReturnedInvestment(address indexed proeprty, address wallet, uint256 amount);
    event ReturnedPresaleInvestment(address indexed proeprty, address wallet, uint256 amount);
    event InitialOfferingCanceled(address indexed property);

    constructor(address dataProxy, address users) public {
        _dataProxy = dataProxy;
        _users = users;
    }

    function changeDataProxy(address dataProxy) public onlyOwner {
        _dataProxy = dataProxy;
    }

    function changeUsers(address users) public onlyOwner {
        _users = users;
    }

    /// @notice create or update offering information
    /// @param newOffering Offering information (price and fee support up to 2 decimals for 5% fee enter 500)
    function modifyOfferingInfo(address property, NewOffering memory newOffering) public onlyCPOrAdmin(_msgSender(), property) {
        require(newOffering.softCap.mul(10 ** 9).div(newOffering.price).div(10 ** 7) <= hardCap(property).sub(currentSupply(property)), "InitialInvestment: Soft cap set too high");
        require(newOffering.presaleStart >= block.timestamp, "InitialInvestment: Investment must start in the future");
        require(newOffering.presaleStart <= newOffering.presaleEnd && (newOffering.presaleEnd + 3 days) <= newOffering.saleEnd, "InitialInvestment: Start time must be before end time");
        Offering memory offering = _offerings[property];
        require(offering.presaleStart == 0 || offering.presaleStart > block.timestamp || offering.saleEnd < block.timestamp || offering.investmentCollected, "Initial investment: Offering already set and it started");
        require((offering.amountCollected == 0 && offering.presaleCollected == 0) || offering.investmentCollected, "InitialInvestment: You need to collect investments first");
        offering = Offering(newOffering.presaleStart, newOffering.presaleEnd, newOffering.presaleEnd + 3 days, newOffering.saleEnd, newOffering.price, 0, 0, newOffering.presaleMaxInvestment, newOffering.presaleMinInvestment, newOffering.maxInvestment, newOffering.minInvestment, newOffering.softCap, newOffering.investmentToken, newOffering.collector, newOffering.feeCollector, newOffering.fee, false);
        _offerings[property] = offering;
        emit InitialOffer(property, offering.price, offering.presaleMaxInvestment, offering.presaleMinInvestment, offering.maxInvestment, offering.minInvestment, offering.softCap, offering.presaleStart, offering.presaleEnd, offering.presaleStart + 3 days, offering.saleEnd, offering.investmentToken, offering.collector, offering.feeCollector, offering.fee);
    }

    /// @notice invest ERC-20 token (DAI for example) to receive property token
    /// @param property Property contract address
    /// @param amount Amount of specified token to invest
    function invest(address property, uint256 amount) public {
        Offering memory offering = _offerings[property];
        bytes32 user = FixedPriceInitialOfferingHelpers(_users).getUserBytesFromWallet(_msgSender());
        require(offering.saleStart <= block.timestamp && offering.saleEnd >= block.timestamp, "InitialInvestment: Offering is not active");
        require(amount >= offering.minInvestment, "InitialInvestment: You need to invest more");
        require(_userTotalInvestment[property][user][_numOfSuccessfulOfferings[property]].add(amount) <= offering.maxInvestment, "InitialInvestment: You need to invest less");
        uint256 cap = FixedPriceInitialOfferingHelpers(property).cap();
        uint256 mintAmount = amount.mul(10 ** 9).div(offering.price).div(10 ** 7);
        uint256 currentSupply = FixedPriceInitialOfferingHelpers(property).totalSupply();

        require(currentSupply.add(mintAmount) <= cap, "InitialInvestment: Too many tokens would be minted");
        _offerings[property].amountCollected = offering.amountCollected.add(amount);

        require(FixedPriceInitialOfferingHelpers(offering.investmentToken).transferFrom(_msgSender(), address(this), amount));

        uint256[] memory mAmount = new uint256[](1);
        mAmount[0] = mintAmount;
        address[] memory receiver = new address[](1);
        receiver[0] = _msgSender();
        require(FixedPriceInitialOfferingHelpers(property).mint(receiver, mAmount));
        _userInvestment[property][_msgSender()][_numOfSuccessfulOfferings[property]] = _userInvestment[property][_msgSender()][_numOfSuccessfulOfferings[property]].add(amount);
        _userTokens[property][_msgSender()][_numOfSuccessfulOfferings[property]] = _userTokens[property][_msgSender()][_numOfSuccessfulOfferings[property]].add(mintAmount);
        _userTotalInvestment[property][user][_numOfSuccessfulOfferings[property]] = _userTotalInvestment[property][user][_numOfSuccessfulOfferings[property]].add(amount);
        emit Invested(property, _msgSender(), offering.investmentToken, amount, mintAmount);
    }

    /// @notice collect investment (only if soft cap was reached and the offering closed)
    /// @param property Property contract address
    function collectInvestments(address property) public {
        Offering storage offering = _offerings[property];
        require(offering.softCap <= offering.amountCollected.add(offering.presaleCollected), "InitialInvestment: Soft cap not reached");
        require(offering.saleEnd < block.timestamp || currentSupply(property) == hardCap(property), "InitialInvestment: You need to wait for initial investment to finish");
        uint256 collected = offering.amountCollected;
        offering.amountCollected = 0;
        offering.investmentCollected = true;
        uint256 fee = collected.mul(offering.fee).div(10000);
        collected = collected.sub(fee);
        _numOfSuccessfulOfferings[property] = _numOfSuccessfulOfferings[property] + 1;
        require(FixedPriceInitialOfferingHelpers(_offerings[property].investmentToken).transfer(offering.collector, collected));
        if (fee > 0) {
            require(FixedPriceInitialOfferingHelpers(_offerings[property].investmentToken).transfer(offering.feeCollector, fee));
        }
        emit ClaimInvestment(property, collected, fee);
    }

    /// @notice mint property tokens for presale (done offchain)
    /// @param property Property contract address
    /// @param wallets Array of wallets to which tokens should be minted
    /// @param amounts Array of amounts of how much tokens should be minted
    function mintPresale(address property, address[] memory wallets, uint256[] memory amounts) public {
        require(FixedPriceInitialOfferingHelpers(_dataProxy).isCPAdminOfProperty(_msgSender(), property), "InitialInvestment: You need to be admin");
        Offering storage offering = _offerings[property];
        require(offering.presaleStart <= block.timestamp && block.timestamp <= offering.saleEnd, "InitialInvestment: Can only mint during sale");
        require(FixedPriceInitialOfferingHelpers(property).mint(wallets, amounts));
        for (uint256 i = 0; i < wallets.length; i++) {
            address wallet = wallets[i];
            _userTokensPresale[property][wallet][_numOfSuccessfulOfferings[property]] = _userTokensPresale[property][wallet][_numOfSuccessfulOfferings[property]].add(amounts[i]);
            uint256 investment = amounts[i].mul(offering.price).div(100);
            _offerings[property].presaleCollected = offering.presaleCollected.add(investment);
        }
    }

    /// @notice burn presale minted tokens in case soft cap was not reached
    /// @param property Property contract address
    /// @param wallets Array of wallets for which to burn the property tokens
    function returnPresaleInvestment(address property, address[] memory wallets) public onlyCPOrAdmin(msg.sender, property) {
        Offering storage offering = _offerings[property];
        require(offering.saleEnd <= block.timestamp && offering.softCap > offering.amountCollected.add(offering.presaleCollected), "InitialInvestment: Soft cap must not be reached");
        for (uint i = 0; i < wallets.length; i++) {
            address wallet = wallets[i];
            uint256 userBalance = _userTokensPresale[property][wallet][_numOfSuccessfulOfferings[property]];
            uint256 userInvestment = userBalance.mul(offering.price).div(100);
            _userTokensPresale[property][wallet][_numOfSuccessfulOfferings[property]] = 0;

            require(FixedPriceInitialOfferingHelpers(property).contractBurn(wallet, userBalance));

            _offerings[property].presaleCollected = _offerings[property].presaleCollected.sub(userInvestment);
            emit ReturnedPresaleInvestment(property, wallet, userInvestment);
        }
    }

    function _returnInvestment(address property, address wallet) private {
        bytes32 user = FixedPriceInitialOfferingHelpers(_users).getUserBytesFromWallet(wallet);
        uint256 userBalance = _userTokens[property][wallet][_numOfSuccessfulOfferings[property]];
        uint256 userInvestment = _userInvestment[property][wallet][_numOfSuccessfulOfferings[property]];
        _userInvestment[property][wallet][_numOfSuccessfulOfferings[property]] = 0;
        _userTokens[property][wallet][_numOfSuccessfulOfferings[property]] = 0;
        _userTotalInvestment[property][user][_numOfSuccessfulOfferings[property]] = _userTotalInvestment[property][user][_numOfSuccessfulOfferings[property]].sub(userInvestment);

        require(FixedPriceInitialOfferingHelpers(property).contractBurn(wallet, userBalance));
        require(FixedPriceInitialOfferingHelpers(_offerings[property].investmentToken).transfer(wallet, userInvestment));

        _offerings[property].amountCollected = _offerings[property].amountCollected.sub(userInvestment);
        emit ReturnedInvestment(property, wallet, userInvestment);
    }

    /// @notice return investment in case soft cap was not reached
    /// @param property Property contract address
    /// @param wallets Array of wallets for which to return the investment
    function returnInvestment(address property, address[] memory wallets) public onlyCPOrAdmin(msg.sender, property) {
        Offering storage offering = _offerings[property];
        require(offering.saleEnd <= block.timestamp && offering.softCap > offering.amountCollected.add(offering.presaleCollected), "InitialInvestment: Soft cap must not be reached");
        for (uint i = 0; i < wallets.length; i++) {
            address wallet = wallets[i];
            _returnInvestment(property, wallet);
        }
    }


    /// @notice get back investment and burn property token
    /// @param property Property contract address
    function getInvestmentBack(address property) public {
        Offering storage offering = _offerings[property];
        require(offering.saleEnd < block.timestamp && offering.softCap > offering.amountCollected.add(offering.presaleCollected), "InitialInvestment: Soft cap must not be reached");
        _returnInvestment(property, _msgSender());
    }

    /// @notice cancel current initial investment for property
    /// @param property Property contract address
    function cancelOffering(address property) public {
        require(FixedPriceInitialOfferingHelpers(_dataProxy).hasSystemAdminRights(msg.sender), "InitialInvestment: You need to have system admin rights");
        _offerings[property].presaleStart = block.timestamp;
        _offerings[property].presaleEnd = block.timestamp;
        _offerings[property].saleStart = block.timestamp;
        _offerings[property].saleEnd = block.timestamp;
        emit InitialOfferingCanceled(property);
    }

    /// @notice transfer DAI from this contract to another wallet in case something goes wrong
    /// @param property Property contract address
    /// @param wallet Wallet address
    function recoverDAI(address property, address wallet) public {
        require(FixedPriceInitialOfferingHelpers(_dataProxy).hasSystemAdminRights(msg.sender), "InitialInvestment: You need to have system admin rights");
        Offering storage offering = _offerings[property];
        require(offering.saleEnd <= block.timestamp && offering.softCap > offering.amountCollected.add(offering.presaleCollected), "InitialInvestment: Soft cap must not be reached");
        require(FixedPriceInitialOfferingHelpers(_offerings[property].investmentToken).transfer(wallet, offering.amountCollected));
        _offerings[property].amountCollected = 0;
        _offerings[property].presaleCollected = 0;
        _numOfSuccessfulOfferings[property] = _numOfSuccessfulOfferings[property] + 1;
    }

    /// @notice retrieves total supply of property token
    /// @param property Property contract address
    function currentSupply(address property) public view returns (uint256) {
        return FixedPriceInitialOfferingHelpers(property).totalSupply();
    }

    /// @notice retrieves cap of property token
    /// @param property Property contract address
    function hardCap(address property) public view returns (uint256) {
        return FixedPriceInitialOfferingHelpers(property).cap();
    }

    /// @notice retrieves initial offering information for property
    /// @param property Property contract address
    function offeringInfo(address property) public view returns (Offering memory) {
        return _offerings[property];
    }

    /// @notice retrieves current offering token invested in sale (returns zero if investment was collected) for wallet
    /// @param property Property contract address
    /// @param wallet Investor wallet
    function currentInvestmentByWallet(address property, address wallet) public view returns (uint256) {
        return _userInvestment[property][wallet][_numOfSuccessfulOfferings[property]];
    }

    /// @notice retrieves current total offering token invested in sale by user (returns zero if investment was collected)
    /// @param property Property contract address
    /// @param wallet Investor wallet
    function currentInvestmentByUser(address property, address wallet) public view returns (uint256) {
        bytes32 user = FixedPriceInitialOfferingHelpers(_users).getUserBytesFromWallet(wallet);
        return _userTotalInvestment[property][user][_numOfSuccessfulOfferings[property]];
    }

    /// @notice retrieves current offering token invested in presale (returns zero if investment was collected)
    /// @param property Property contract address
    /// @param wallet Investor wallet
    function currentUserPresaleInvestment(address property, address wallet) public view returns (uint256) {
        return _userTokensPresale[property][wallet][_numOfSuccessfulOfferings[property]].mul(_offerings[property].price).div(100);
    }
}


File 2 of 4: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

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


File 3 of 4: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

import "./Context.sol";
/**
 * @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.
 */
contract Ownable is Context {
    address private _owner;

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

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

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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;
    }
}


File 4 of 4: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @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.
 */
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;
    }
}


Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"dataProxy","type":"address"},{"internalType":"address","name":"users","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"property","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"ClaimInvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"property","type":"address"},{"indexed":false,"internalType":"uint256","name":"pricePerToken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"presaleMaxInvestment","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"presaleMinInvestment","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxInvestment","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minInvestment","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"softCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"presaleStart","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"presaleEnd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"saleStart","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"saleEnd","type":"uint256"},{"indexed":false,"internalType":"address","name":"investmentCurrency","type":"address"},{"indexed":false,"internalType":"address","name":"collector","type":"address"},{"indexed":false,"internalType":"address","name":"feeCollector","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"InitialOffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"property","type":"address"}],"name":"InitialOfferingCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"property","type":"address"},{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"address","name":"investmentToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountInvested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountReceived","type":"uint256"}],"name":"Invested","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":"proeprty","type":"address"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReturnedInvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proeprty","type":"address"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReturnedPresaleInvestment","type":"event"},{"inputs":[{"internalType":"address","name":"property","type":"address"}],"name":"cancelOffering","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dataProxy","type":"address"}],"name":"changeDataProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"users","type":"address"}],"name":"changeUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"}],"name":"collectInvestments","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"internalType":"address","name":"wallet","type":"address"}],"name":"currentInvestmentByUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"internalType":"address","name":"wallet","type":"address"}],"name":"currentInvestmentByWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"}],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"internalType":"address","name":"wallet","type":"address"}],"name":"currentUserPresaleInvestment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"}],"name":"getInvestmentBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"}],"name":"hardCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"invest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"components":[{"internalType":"uint256","name":"presaleStart","type":"uint256"},{"internalType":"uint256","name":"presaleEnd","type":"uint256"},{"internalType":"uint256","name":"saleEnd","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"presaleMaxInvestment","type":"uint256"},{"internalType":"uint256","name":"presaleMinInvestment","type":"uint256"},{"internalType":"uint256","name":"maxInvestment","type":"uint256"},{"internalType":"uint256","name":"minInvestment","type":"uint256"},{"internalType":"uint256","name":"softCap","type":"uint256"},{"internalType":"address","name":"investmentToken","type":"address"},{"internalType":"address","name":"collector","type":"address"},{"internalType":"address","name":"feeCollector","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"}],"internalType":"struct FixedPriceInitialOffering.NewOffering","name":"newOffering","type":"tuple"}],"name":"modifyOfferingInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"}],"name":"offeringInfo","outputs":[{"components":[{"internalType":"uint256","name":"presaleStart","type":"uint256"},{"internalType":"uint256","name":"presaleEnd","type":"uint256"},{"internalType":"uint256","name":"saleStart","type":"uint256"},{"internalType":"uint256","name":"saleEnd","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"amountCollected","type":"uint256"},{"internalType":"uint256","name":"presaleCollected","type":"uint256"},{"internalType":"uint256","name":"presaleMaxInvestment","type":"uint256"},{"internalType":"uint256","name":"presaleMinInvestment","type":"uint256"},{"internalType":"uint256","name":"maxInvestment","type":"uint256"},{"internalType":"uint256","name":"minInvestment","type":"uint256"},{"internalType":"uint256","name":"softCap","type":"uint256"},{"internalType":"address","name":"investmentToken","type":"address"},{"internalType":"address","name":"collector","type":"address"},{"internalType":"address","name":"feeCollector","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"bool","name":"investmentCollected","type":"bool"}],"internalType":"struct FixedPriceInitialOffering.Offering","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"internalType":"address","name":"wallet","type":"address"}],"name":"recoverDAI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"returnInvestment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"property","type":"address"},{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"returnPresaleInvestment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162003437380380620034378339810160408190526200003491620000c0565b600062000040620000bc565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600780546001600160a01b039384166001600160a01b0319918216179091556008805492909316911617905562000117565b3390565b60008060408385031215620000d3578182fd5b8251620000e081620000fe565b6020840151909250620000f381620000fe565b809150509250929050565b6001600160a01b03811681146200011457600080fd5b50565b61331080620001276000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063825e2645116100ad578063adc6816411610071578063adc681641461026a578063b9b8c2461461027d578063ca783e6514610290578063e22cdcdc146102a3578063f2fde38b146102b65761012c565b8063825e2645146102095780638da5cb5b1461021c57806396d01885146102315780639deb1d3a14610244578063a77fac44146102575761012c565b80634781f4f6116100f45780634781f4f6146101a8578063715018a6146101bb578063735f9f01146101c35780637e4387f6146101e357806381624cac146101f65761012c565b806305c873bd1461013157806314215dd1146101465780631f375b1e1461016f578063380c1a971461018257806342cc653214610195575b600080fd5b61014461013f3660046126d2565b6102c9565b005b6101596101543660046126b7565b6104b6565b60405161016691906131f2565b60405180910390f35b61014461017d3660046126b7565b61052f565b610144610190366004612753565b6107c3565b6101596101a33660046126d2565b610a6e565b6101596101b63660046126b7565b610b37565b610144610b72565b6101d66101d13660046126b7565b610bf1565b604051610166919061310a565b6101446101f13660046126b7565b610cde565b610144610204366004612706565b610dd3565b61014461021736600461281d565b610f11565b6102246114bc565b6040516101669190612981565b61014461023f3660046126b7565b6114cb565b6101446102523660046126b7565b611522565b6101596102653660046126d2565b611579565b610144610278366004612706565b6115b9565b61014461028b366004612904565b611882565b61015961029e3660046126d2565b611fbb565b6101446102b13660046126b7565b612020565b6101446102c43660046126b7565b612091565b60075460405163524ecd7960e11b81526001600160a01b039091169063a49d9af2906102f9903390600401612981565b60206040518083038186803b15801561031157600080fd5b505afa158015610325573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610349919061292e565b61036e5760405162461bcd60e51b815260040161036590612dbf565b60405180910390fd5b6001600160a01b0382166000908152600560205260409020600381015442108015906103af5750600681015460058201546103a891612147565b81600b0154115b6103cb5760405162461bcd60e51b815260040161036590612c0c565b6001600160a01b03808416600090815260056020819052604091829020600c015490840154915163a9059cbb60e01b815292169163a9059cbb91610414918691906004016129d3565b602060405180830381600087803b15801561042e57600080fd5b505af1158015610442573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610466919061292e565b61046f57600080fd5b50506001600160a01b0316600090815260056020818152604080842092830184905560069283018490559190529020805461ffff8082166001011661ffff19909116179055565b6000816001600160a01b031663355274ea6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104f157600080fd5b505afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610529919061294e565b92915050565b6001600160a01b0381166000908152600560208190526040909120600681015491810154909161055f9190612147565b81600b015411156105825760405162461bcd60e51b815260040161036590612eba565b42816003015410806105a35750610598826104b6565b6105a183610b37565b145b6105bf5760405162461bcd60e51b815260040161036590612cb1565b60058101805460009182905560108301805460ff19166001179055600f8301549091906105fb90612710906105f590859061216c565b906121a6565b905061060782826121e8565b6001600160a01b038086166000908152600660209081526040808320805461ffff8082166001011661ffff19909116179055600590915290819020600c0154600d870154915163a9059cbb60e01b815293955082169263a9059cbb9261067392169086906004016129d3565b602060405180830381600087803b15801561068d57600080fd5b505af11580156106a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c5919061292e565b6106ce57600080fd5b801561077a576001600160a01b0380851660009081526005602052604090819020600c0154600e860154915163a9059cbb60e01b81529083169263a9059cbb9261071f9291169085906004016129d3565b602060405180830381600087803b15801561073957600080fd5b505af115801561074d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610771919061292e565b61077a57600080fd5b836001600160a01b03167f067118898b981e1259ac5a633ef5423387a2ebae70ac4bfc051b50ba982b7bf183836040516107b59291906131fb565b60405180910390a250505050565b6007546001600160a01b0316639af235536107dc61222a565b856040518363ffffffff1660e01b81526004016107fa929190612995565b60206040518083038186803b15801561081257600080fd5b505afa158015610826573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084a919061292e565b6108665760405162461bcd60e51b815260040161036590612d1b565b6001600160a01b038316600090815260056020526040902080544210801590610893575080600301544211155b6108af5760405162461bcd60e51b815260040161036590612b43565b6040516307233fbf60e51b81526001600160a01b0385169063e467f7e0906108dd9086908690600401612a0d565b602060405180830381600087803b1580156108f757600080fd5b505af115801561090b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092f919061292e565b61093857600080fd5b60005b8351811015610a6757600084828151811061095257fe5b602002602001015190506109b884838151811061096b57fe5b6020908102919091018101516001600160a01b03808a1660008181526004855260408082209388168252928552828120918152600685528281205461ffff16815293529091205490612147565b6001600160a01b0380881660008181526004602081815260408084209588168452948152848320938352600681528483205461ffff1683529290925291822092909255908401548551610a2f916064916105f59190899088908110610a1957fe5b602002602001015161216c90919063ffffffff16565b6006850154909150610a419082612147565b6001600160a01b038816600090815260056020526040902060060155505060010161093b565b5050505050565b600854604051631648d99360e31b815260009182916001600160a01b039091169063b246cc9890610aa3908690600401612981565b60206040518083038186803b158015610abb57600080fd5b505afa158015610acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af3919061294e565b6001600160a01b0385166000818152600260209081526040808320948352938152838220928252600681528382205461ffff16825291909152205491505092915050565b6000816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104f157600080fd5b610b7a61222a565b6000546001600160a01b03908116911614610ba75760405162461bcd60e51b815260040161036590612f01565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610bf9612589565b506001600160a01b039081166000908152600560208181526040928390208351610220810185528154815260018201549281019290925260028101549382019390935260038301546060820152600483015460808201529082015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c8201548316610180820152600d82015483166101a0820152600e8201549092166101c0830152600f8101546101e08301526010015460ff16151561020082015290565b60075460405163524ecd7960e11b81526001600160a01b039091169063a49d9af290610d0e903390600401612981565b60206040518083038186803b158015610d2657600080fd5b505afa158015610d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5e919061292e565b610d7a5760405162461bcd60e51b815260040161036590612dbf565b6001600160a01b038116600081815260056020526040808220428082556001820181905560028201819055600390910155517f9b2754f8e10a23215a3fcc82107d046c5566aaa83664bef1dbc044ef112a7c769190a250565b6007546040516329fd1a4160e21b8152339184916001600160a01b039091169063a7f4690490610e099085908590600401612995565b60206040518083038186803b158015610e2157600080fd5b505afa158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e59919061292e565b610e755760405162461bcd60e51b815260040161036590613064565b6001600160a01b038416600090815260056020526040902060038101544210801590610eb6575060068101546005820154610eaf91612147565b81600b0154115b610ed25760405162461bcd60e51b815260040161036590612c0c565b60005b8451811015610f09576000858281518110610eec57fe5b60200260200101519050610f00878261222e565b50600101610ed5565b505050505050565b610f1961222a565b6007546040516329fd1a4160e21b815284916001600160a01b03169063a7f4690490610f4b9085908590600401612995565b60206040518083038186803b158015610f6357600080fd5b505afa158015610f77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9b919061292e565b610fb75760405162461bcd60e51b815260040161036590613064565b610fd2610fc385610b37565b610fcc866104b6565b906121e8565b610ffd629896806105f586606001516105f5633b9aca0089610100015161216c90919063ffffffff16565b111561101b5760405162461bcd60e51b815260040161036590612f80565b825142111561103c5760405162461bcd60e51b815260040161036590612c5b565b602083015183511180159061105e5750826040015183602001516203f4800111155b61107a5760405162461bcd60e51b815260040161036590612aee565b611082612589565b506001600160a01b03808516600090815260056020818152604092839020835161022081018552815480825260018301549382019390935260028201549481019490945260038101546060850152600481015460808501529182015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a820154610140840152600b820154610160840152600c8201548416610180840152600d82015484166101a0840152600e8201549093166101c0830152600f8101546101e08301526010015460ff1615156102008201529015806111725750805142105b806111805750428160600151105b8061118d57508061020001515b6111a95760405162461bcd60e51b815260040161036590612d62565b60a08101511580156111bd575060c0810151155b806111ca57508061020001515b6111e65760405162461bcd60e51b815260040161036590612e1c565b604051806102200160405280856000015181526020018560200151815260200185602001516203f48001815260200185604001518152602001856060015181526020016000815260200160008152602001856080015181526020018560a0015181526020018560c0015181526020018560e00151815260200185610100015181526020018561012001516001600160a01b031681526020018561014001516001600160a01b031681526020018561016001516001600160a01b0316815260200185610180015181526020016000151581525090508060056000876001600160a01b03166001600160a01b03168152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101a082015181600d0160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101c082015181600e0160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101e082015181600f01556102008201518160100160006101000a81548160ff021916908315150217905550905050846001600160a01b03167f43d458af73054152f59e8170fb773bc9f9477d35ff08a648edc71abff5ac1f0882608001518360e00151846101000151856101200151866101400151876101600151886000015189602001518a600001516203f480018b606001518c61018001518d6101a001518e6101c001518f6101e001516040516114ad9e9d9c9b9a99989796959493929190613209565b60405180910390a25050505050565b6000546001600160a01b031690565b6114d361222a565b6000546001600160a01b039081169116146115005760405162461bcd60e51b815260040161036590612f01565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61152a61222a565b6000546001600160a01b039081169116146115575760405162461bcd60e51b815260040161036590612f01565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b039182166000818152600160209081526040808320949095168252928352838120918152600683528381205461ffff1681529152205490565b6007546040516329fd1a4160e21b8152339184916001600160a01b039091169063a7f46904906115ef9085908590600401612995565b60206040518083038186803b15801561160757600080fd5b505afa15801561161b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163f919061292e565b61165b5760405162461bcd60e51b815260040161036590613064565b6001600160a01b03841660009081526005602052604090206003810154421080159061169c57506006810154600582015461169591612147565b81600b0154115b6116b85760405162461bcd60e51b815260040161036590612c0c565b60005b8451811015610f095760008582815181106116d257fe5b6020908102919091018101516001600160a01b03808a166000818152600480865260408083209486168352938652838220928252600686528382205461ffff1682529190945290832054908601549193509190611737906064906105f590859061216c565b6001600160a01b03808b166000818152600460208181526040808420958a168452948152848320848452600682528584205461ffff16845290528382209190915591516301cd910960e51b8152929350916339b221209161179c9187918791016129d3565b602060405180830381600087803b1580156117b657600080fd5b505af11580156117ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ee919061292e565b6117f757600080fd5b6001600160a01b03891660009081526005602052604090206006015461181d90826121e8565b6001600160a01b038a16600081815260056020526040908190206006019290925590517fb953fce83a28d4617eacb6af781c4df0f51088186cc78d2fffa773f1cd92c9029061186f90869085906129d3565b60405180910390a25050506001016116bb565b61188a612589565b506001600160a01b0380831660009081526005602081815260408084208151610220810183528154815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301529182015460a0820152600682015460c0820152600782015460e08201526008808301546101008301526009830154610120830152600a830154610140830152600b830154610160830152600c8301548516610180830152600d83015485166101a0830152600e83015485166101c0830152600f8301546101e083015260109092015460ff161515610200820152905490921663b246cc9861197f61222a565b6040518263ffffffff1660e01b815260040161199b9190612981565b60206040518083038186803b1580156119b357600080fd5b505afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061294e565b905042826040015111158015611a05575042826060015110155b611a215760405162461bcd60e51b8152600401610365906130c1565b816101400151831015611a465760405162461bcd60e51b81526004016103659061301a565b6101208201516001600160a01b03851660008181526002602090815260408083208684528252808320938352600682528083205461ffff1683529290522054611a8f9085612147565b1115611aad5760405162461bcd60e51b815260040161036590612f36565b6000846001600160a01b031663355274ea6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ae857600080fd5b505afa158015611afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b20919061294e565b90506000611b4a629896806105f586608001516105f5633b9aca008a61216c90919063ffffffff16565b90506000866001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b8757600080fd5b505afa158015611b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbf919061294e565b905082611bcc8284612147565b1115611bea5760405162461bcd60e51b815260040161036590612fc8565b60a0850151611bf99087612147565b6001600160a01b0380891660009081526005602081905260409091200191909155610180860151166323b872dd611c2e61222a565b30896040518463ffffffff1660e01b8152600401611c4e939291906129af565b602060405180830381600087803b158015611c6857600080fd5b505af1158015611c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca0919061292e565b611ca957600080fd5b604080516001808252818301909252606091602080830190803683370190505090508281600081518110611cd957fe5b6020908102919091010152604080516001808252818301909252606091816020016020820280368337019050509050611d1061222a565b81600081518110611d1d57fe5b6001600160a01b0392831660209182029290920101526040516307233fbf60e51b8152908a169063e467f7e090611d5a9084908690600401612a0d565b602060405180830381600087803b158015611d7457600080fd5b505af1158015611d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dac919061292e565b611db557600080fd5b6001600160a01b0389166000908152600160205260408120611e1a918a9190611ddc61222a565b6001600160a01b03908116825260208083019390935260409182016000908120918f168152600684528281205461ffff168152925290205490612147565b6001600160a01b038a16600090815260016020526040812090611e3b61222a565b6001600160a01b03908116825260208083019390935260409182016000908120918e16808252600685528382205461ffff16825291845282812094909455835260039091528120611e9191869190611ddc61222a565b6001600160a01b038a16600090815260036020526040812090611eb261222a565b6001600160a01b03908116825260208083019390935260409182016000908120918e1680825260068552838220805461ffff9081168452938652848320969096558152600284528281208b825284528281209454909116815292909152902054611f1c9089612147565b6001600160a01b038a1660008181526002602090815260408083208b84528252808320938352600682528083205461ffff1683529290522055611f5d61222a565b6001600160a01b0316896001600160a01b03167f214399217b44b0f0f93b5ba58868c778310925962e91255cf7312f52e39f8e1c8961018001518b88604051611fa8939291906129ec565b60405180910390a3505050505050505050565b6001600160a01b0380831660008181526005602090815260408083206004908101549083528184209587168452948252808320938352600682528083205461ffff168352929052908120549091612019916064916105f5919061216c565b9392505050565b6001600160a01b038116600090815260056020526040902060038101544211801561206057506006810154600582015461205991612147565b81600b0154115b61207c5760405162461bcd60e51b815260040161036590612c0c565b61208d8261208861222a565b61222e565b5050565b61209961222a565b6000546001600160a01b039081169116146120c65760405162461bcd60e51b815260040161036590612f01565b6001600160a01b0381166120ec5760405162461bcd60e51b815260040161036590612b8f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828201838110156120195760405162461bcd60e51b815260040161036590612bd5565b60008261217b57506000610529565b8282028284828161218857fe5b04146120195760405162461bcd60e51b815260040161036590612e79565b600061201983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612526565b600061201983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061255d565b3390565b600854604051631648d99360e31b81526000916001600160a01b03169063b246cc989061225f908590600401612981565b60206040518083038186803b15801561227757600080fd5b505afa15801561228b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122af919061294e565b6001600160a01b03808516600081815260036020908152604080832094881680845294825280832084845260068352818420805461ffff908116808752838652848720548888526001875285882099885298865284872090875285528386208054908790558254821687529285528386208690559585526002845282852088865284528285209054909516845293909152902054929350909161235290826121e8565b6001600160a01b03861660008181526002602090815260408083208884528252808320848452600683528184205461ffff168452909152908190209290925590516301cd910960e51b81526339b22120906123b390879086906004016129d3565b602060405180830381600087803b1580156123cd57600080fd5b505af11580156123e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612405919061292e565b61240e57600080fd5b6001600160a01b0380861660009081526005602052604090819020600c0154905163a9059cbb60e01b815291169063a9059cbb9061245290879085906004016129d3565b602060405180830381600087803b15801561246c57600080fd5b505af1158015612480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a4919061292e565b6124ad57600080fd5b6001600160a01b038516600090815260056020819052604090912001546124d490826121e8565b6001600160a01b038616600081815260056020819052604091829020019290925590517fbfed30d9eb2d70c87ac13dffb355266c8508938ab8c9492dbd984b148ccfe8a3906114ad90879085906129d3565b600081836125475760405162461bcd60e51b81526004016103659190612a9b565b50600083858161255357fe5b0495945050505050565b600081848411156125815760405162461bcd60e51b81526004016103659190612a9b565b505050900390565b60405180610220016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000151581525090565b80356001600160a01b038116811461052957600080fd5b600082601f830112612651578081fd5b813561266461265f826132a2565b61327b565b81815291506020808301908481018184028601820187101561268557600080fd5b60005b848110156126ac5761269a888361262a565b84529282019290820190600101612688565b505050505092915050565b6000602082840312156126c8578081fd5b612019838361262a565b600080604083850312156126e4578081fd5b6126ee848461262a565b91506126fd846020850161262a565b90509250929050565b60008060408385031215612718578182fd5b612722848461262a565b9150602083013567ffffffffffffffff81111561273d578182fd5b61274985828601612641565b9150509250929050565b600080600060608486031215612767578081fd5b8335612772816132c2565b925060208481013567ffffffffffffffff8082111561278f578384fd5b61279b88838901612641565b945060408701359150808211156127b0578384fd5b508501601f810187136127c1578283fd5b80356127cf61265f826132a2565b81815283810190838501858402850186018b10156127eb578687fd5b8694505b8385101561280d5780358352600194909401939185019185016127ef565b5080955050505050509250925092565b6000808284036101c0811215612831578283fd5b833561283c816132c2565b92506101a0601f198201811315612851578283fd5b61285a8161327b565b91506020850135825260408501356020830152606085013560408301526080850135606083015260a0850135608083015260c085013560a083015260e085013560c08301526101008086013560e0840152610120808701358285015261014091506128c78883890161262a565b908401526101606128da8888830161262a565b8285015261018091506128ef8883890161262a565b90840152940135938101939093525092909150565b60008060408385031215612916578182fd5b612920848461262a565b946020939093013593505050565b60006020828403121561293f578081fd5b81518015158114612019578182fd5b60006020828403121561295f578081fd5b5051919050565b815260200190565b6001600160a01b03169052565b15159052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b604080825283519082018190526000906020906060840190828701845b82811015612a4d57612a3d84835161296e565b9284019290840190600101612a2a565b50505083810382850152808551612a6481846131f2565b91508387019250845b81811015612a8e57612a80838551612966565b938501939250600101612a6d565b5090979650505050505050565b6000602080835283518082850152825b81811015612ac757858101830151858201604001528201612aab565b81811115612ad85783604083870101525b50601f01601f1916929092016040019392505050565b60208082526035908201527f496e697469616c496e766573746d656e743a2053746172742074696d65206d756040820152747374206265206265666f726520656e642074696d6560581b606082015260800190565b6020808252602c908201527f496e697469616c496e766573746d656e743a2043616e206f6e6c79206d696e7460408201526b20647572696e672073616c6560a01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252602f908201527f496e697469616c496e766573746d656e743a20536f667420636170206d75737460408201526e081b9bdd081899481c995858da1959608a1b606082015260800190565b60208082526036908201527f496e697469616c496e766573746d656e743a20496e766573746d656e74206d75604082015275737420737461727420696e207468652066757475726560501b606082015260800190565b60208082526044908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f207760408201527f61697420666f7220696e697469616c20696e766573746d656e7420746f2066696060820152630dcd2e6d60e31b608082015260a00190565b60208082526027908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f2062604082015266329030b236b4b760c91b606082015260800190565b60208082526037908201527f496e697469616c20696e766573746d656e743a204f66666572696e6720616c7260408201527f656164792073657420616e642069742073746172746564000000000000000000606082015260800190565b60208082526037908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f206860408201527f6176652073797374656d2061646d696e20726967687473000000000000000000606082015260800190565b60208082526038908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f206360408201527f6f6c6c65637420696e766573746d656e74732066697273740000000000000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526027908201527f496e697469616c496e766573746d656e743a20536f667420636170206e6f74206040820152661c995858da195960ca1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602a908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f20696040820152696e76657374206c65737360b01b606082015260800190565b60208082526028908201527f496e697469616c496e766573746d656e743a20536f66742063617020736574206040820152670e8dede40d0d2ced60c31b606082015260800190565b60208082526032908201527f496e697469616c496e766573746d656e743a20546f6f206d616e7920746f6b656040820152711b9cc81ddbdd5b19081899481b5a5b9d195960721b606082015260800190565b6020808252602a908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f20696040820152696e76657374206d6f726560b01b606082015260800190565b60208082526038908201527f496e697469616c20696e766573746d656e743a20596f75206e65656420746f2060408201527f62652061626c6520746f20656469742070726f70657274790000000000000000606082015260800190565b60208082526029908201527f496e697469616c496e766573746d656e743a204f66666572696e67206973206e6040820152686f742061637469766560b81b606082015260800190565b600061022082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401518184015250610120808401518184015250610140808401518184015250610160808401518184015250610180808401516131a08285018261296e565b50506101a0808401516131b58285018261296e565b50506101c0808401516131ca8285018261296e565b50506101e08381015190830152610200808401516131ea8285018261297b565b505092915050565b90815260200190565b918252602082015260400190565b9d8e5260208e019c909c5260408d019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e08801526101008701526101208601526001600160a01b03908116610140860152908116610160850152166101808301526101a08201526101c00190565b60405181810167ffffffffffffffff8111828210171561329a57600080fd5b604052919050565b600067ffffffffffffffff8211156132b8578081fd5b5060209081020190565b6001600160a01b03811681146132d757600080fd5b5056fea26469706673582212208d3b192464f063698685395204ebd4fb425f5005036ccbe7a9334501f67a25d064736f6c634300060c00330000000000000000000000008c2a858fe7b2bf155247c7f528c6ca7b186197b500000000000000000000000013344d0cb96b17df81c4171ce47e14ff6c1975f7

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063825e2645116100ad578063adc6816411610071578063adc681641461026a578063b9b8c2461461027d578063ca783e6514610290578063e22cdcdc146102a3578063f2fde38b146102b65761012c565b8063825e2645146102095780638da5cb5b1461021c57806396d01885146102315780639deb1d3a14610244578063a77fac44146102575761012c565b80634781f4f6116100f45780634781f4f6146101a8578063715018a6146101bb578063735f9f01146101c35780637e4387f6146101e357806381624cac146101f65761012c565b806305c873bd1461013157806314215dd1146101465780631f375b1e1461016f578063380c1a971461018257806342cc653214610195575b600080fd5b61014461013f3660046126d2565b6102c9565b005b6101596101543660046126b7565b6104b6565b60405161016691906131f2565b60405180910390f35b61014461017d3660046126b7565b61052f565b610144610190366004612753565b6107c3565b6101596101a33660046126d2565b610a6e565b6101596101b63660046126b7565b610b37565b610144610b72565b6101d66101d13660046126b7565b610bf1565b604051610166919061310a565b6101446101f13660046126b7565b610cde565b610144610204366004612706565b610dd3565b61014461021736600461281d565b610f11565b6102246114bc565b6040516101669190612981565b61014461023f3660046126b7565b6114cb565b6101446102523660046126b7565b611522565b6101596102653660046126d2565b611579565b610144610278366004612706565b6115b9565b61014461028b366004612904565b611882565b61015961029e3660046126d2565b611fbb565b6101446102b13660046126b7565b612020565b6101446102c43660046126b7565b612091565b60075460405163524ecd7960e11b81526001600160a01b039091169063a49d9af2906102f9903390600401612981565b60206040518083038186803b15801561031157600080fd5b505afa158015610325573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610349919061292e565b61036e5760405162461bcd60e51b815260040161036590612dbf565b60405180910390fd5b6001600160a01b0382166000908152600560205260409020600381015442108015906103af5750600681015460058201546103a891612147565b81600b0154115b6103cb5760405162461bcd60e51b815260040161036590612c0c565b6001600160a01b03808416600090815260056020819052604091829020600c015490840154915163a9059cbb60e01b815292169163a9059cbb91610414918691906004016129d3565b602060405180830381600087803b15801561042e57600080fd5b505af1158015610442573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610466919061292e565b61046f57600080fd5b50506001600160a01b0316600090815260056020818152604080842092830184905560069283018490559190529020805461ffff8082166001011661ffff19909116179055565b6000816001600160a01b031663355274ea6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104f157600080fd5b505afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610529919061294e565b92915050565b6001600160a01b0381166000908152600560208190526040909120600681015491810154909161055f9190612147565b81600b015411156105825760405162461bcd60e51b815260040161036590612eba565b42816003015410806105a35750610598826104b6565b6105a183610b37565b145b6105bf5760405162461bcd60e51b815260040161036590612cb1565b60058101805460009182905560108301805460ff19166001179055600f8301549091906105fb90612710906105f590859061216c565b906121a6565b905061060782826121e8565b6001600160a01b038086166000908152600660209081526040808320805461ffff8082166001011661ffff19909116179055600590915290819020600c0154600d870154915163a9059cbb60e01b815293955082169263a9059cbb9261067392169086906004016129d3565b602060405180830381600087803b15801561068d57600080fd5b505af11580156106a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c5919061292e565b6106ce57600080fd5b801561077a576001600160a01b0380851660009081526005602052604090819020600c0154600e860154915163a9059cbb60e01b81529083169263a9059cbb9261071f9291169085906004016129d3565b602060405180830381600087803b15801561073957600080fd5b505af115801561074d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610771919061292e565b61077a57600080fd5b836001600160a01b03167f067118898b981e1259ac5a633ef5423387a2ebae70ac4bfc051b50ba982b7bf183836040516107b59291906131fb565b60405180910390a250505050565b6007546001600160a01b0316639af235536107dc61222a565b856040518363ffffffff1660e01b81526004016107fa929190612995565b60206040518083038186803b15801561081257600080fd5b505afa158015610826573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084a919061292e565b6108665760405162461bcd60e51b815260040161036590612d1b565b6001600160a01b038316600090815260056020526040902080544210801590610893575080600301544211155b6108af5760405162461bcd60e51b815260040161036590612b43565b6040516307233fbf60e51b81526001600160a01b0385169063e467f7e0906108dd9086908690600401612a0d565b602060405180830381600087803b1580156108f757600080fd5b505af115801561090b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092f919061292e565b61093857600080fd5b60005b8351811015610a6757600084828151811061095257fe5b602002602001015190506109b884838151811061096b57fe5b6020908102919091018101516001600160a01b03808a1660008181526004855260408082209388168252928552828120918152600685528281205461ffff16815293529091205490612147565b6001600160a01b0380881660008181526004602081815260408084209588168452948152848320938352600681528483205461ffff1683529290925291822092909255908401548551610a2f916064916105f59190899088908110610a1957fe5b602002602001015161216c90919063ffffffff16565b6006850154909150610a419082612147565b6001600160a01b038816600090815260056020526040902060060155505060010161093b565b5050505050565b600854604051631648d99360e31b815260009182916001600160a01b039091169063b246cc9890610aa3908690600401612981565b60206040518083038186803b158015610abb57600080fd5b505afa158015610acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af3919061294e565b6001600160a01b0385166000818152600260209081526040808320948352938152838220928252600681528382205461ffff16825291909152205491505092915050565b6000816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104f157600080fd5b610b7a61222a565b6000546001600160a01b03908116911614610ba75760405162461bcd60e51b815260040161036590612f01565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610bf9612589565b506001600160a01b039081166000908152600560208181526040928390208351610220810185528154815260018201549281019290925260028101549382019390935260038301546060820152600483015460808201529082015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c8201548316610180820152600d82015483166101a0820152600e8201549092166101c0830152600f8101546101e08301526010015460ff16151561020082015290565b60075460405163524ecd7960e11b81526001600160a01b039091169063a49d9af290610d0e903390600401612981565b60206040518083038186803b158015610d2657600080fd5b505afa158015610d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5e919061292e565b610d7a5760405162461bcd60e51b815260040161036590612dbf565b6001600160a01b038116600081815260056020526040808220428082556001820181905560028201819055600390910155517f9b2754f8e10a23215a3fcc82107d046c5566aaa83664bef1dbc044ef112a7c769190a250565b6007546040516329fd1a4160e21b8152339184916001600160a01b039091169063a7f4690490610e099085908590600401612995565b60206040518083038186803b158015610e2157600080fd5b505afa158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e59919061292e565b610e755760405162461bcd60e51b815260040161036590613064565b6001600160a01b038416600090815260056020526040902060038101544210801590610eb6575060068101546005820154610eaf91612147565b81600b0154115b610ed25760405162461bcd60e51b815260040161036590612c0c565b60005b8451811015610f09576000858281518110610eec57fe5b60200260200101519050610f00878261222e565b50600101610ed5565b505050505050565b610f1961222a565b6007546040516329fd1a4160e21b815284916001600160a01b03169063a7f4690490610f4b9085908590600401612995565b60206040518083038186803b158015610f6357600080fd5b505afa158015610f77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9b919061292e565b610fb75760405162461bcd60e51b815260040161036590613064565b610fd2610fc385610b37565b610fcc866104b6565b906121e8565b610ffd629896806105f586606001516105f5633b9aca0089610100015161216c90919063ffffffff16565b111561101b5760405162461bcd60e51b815260040161036590612f80565b825142111561103c5760405162461bcd60e51b815260040161036590612c5b565b602083015183511180159061105e5750826040015183602001516203f4800111155b61107a5760405162461bcd60e51b815260040161036590612aee565b611082612589565b506001600160a01b03808516600090815260056020818152604092839020835161022081018552815480825260018301549382019390935260028201549481019490945260038101546060850152600481015460808501529182015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a820154610140840152600b820154610160840152600c8201548416610180840152600d82015484166101a0840152600e8201549093166101c0830152600f8101546101e08301526010015460ff1615156102008201529015806111725750805142105b806111805750428160600151105b8061118d57508061020001515b6111a95760405162461bcd60e51b815260040161036590612d62565b60a08101511580156111bd575060c0810151155b806111ca57508061020001515b6111e65760405162461bcd60e51b815260040161036590612e1c565b604051806102200160405280856000015181526020018560200151815260200185602001516203f48001815260200185604001518152602001856060015181526020016000815260200160008152602001856080015181526020018560a0015181526020018560c0015181526020018560e00151815260200185610100015181526020018561012001516001600160a01b031681526020018561014001516001600160a01b031681526020018561016001516001600160a01b0316815260200185610180015181526020016000151581525090508060056000876001600160a01b03166001600160a01b03168152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101a082015181600d0160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101c082015181600e0160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101e082015181600f01556102008201518160100160006101000a81548160ff021916908315150217905550905050846001600160a01b03167f43d458af73054152f59e8170fb773bc9f9477d35ff08a648edc71abff5ac1f0882608001518360e00151846101000151856101200151866101400151876101600151886000015189602001518a600001516203f480018b606001518c61018001518d6101a001518e6101c001518f6101e001516040516114ad9e9d9c9b9a99989796959493929190613209565b60405180910390a25050505050565b6000546001600160a01b031690565b6114d361222a565b6000546001600160a01b039081169116146115005760405162461bcd60e51b815260040161036590612f01565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61152a61222a565b6000546001600160a01b039081169116146115575760405162461bcd60e51b815260040161036590612f01565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b039182166000818152600160209081526040808320949095168252928352838120918152600683528381205461ffff1681529152205490565b6007546040516329fd1a4160e21b8152339184916001600160a01b039091169063a7f46904906115ef9085908590600401612995565b60206040518083038186803b15801561160757600080fd5b505afa15801561161b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163f919061292e565b61165b5760405162461bcd60e51b815260040161036590613064565b6001600160a01b03841660009081526005602052604090206003810154421080159061169c57506006810154600582015461169591612147565b81600b0154115b6116b85760405162461bcd60e51b815260040161036590612c0c565b60005b8451811015610f095760008582815181106116d257fe5b6020908102919091018101516001600160a01b03808a166000818152600480865260408083209486168352938652838220928252600686528382205461ffff1682529190945290832054908601549193509190611737906064906105f590859061216c565b6001600160a01b03808b166000818152600460208181526040808420958a168452948152848320848452600682528584205461ffff16845290528382209190915591516301cd910960e51b8152929350916339b221209161179c9187918791016129d3565b602060405180830381600087803b1580156117b657600080fd5b505af11580156117ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ee919061292e565b6117f757600080fd5b6001600160a01b03891660009081526005602052604090206006015461181d90826121e8565b6001600160a01b038a16600081815260056020526040908190206006019290925590517fb953fce83a28d4617eacb6af781c4df0f51088186cc78d2fffa773f1cd92c9029061186f90869085906129d3565b60405180910390a25050506001016116bb565b61188a612589565b506001600160a01b0380831660009081526005602081815260408084208151610220810183528154815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301529182015460a0820152600682015460c0820152600782015460e08201526008808301546101008301526009830154610120830152600a830154610140830152600b830154610160830152600c8301548516610180830152600d83015485166101a0830152600e83015485166101c0830152600f8301546101e083015260109092015460ff161515610200820152905490921663b246cc9861197f61222a565b6040518263ffffffff1660e01b815260040161199b9190612981565b60206040518083038186803b1580156119b357600080fd5b505afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061294e565b905042826040015111158015611a05575042826060015110155b611a215760405162461bcd60e51b8152600401610365906130c1565b816101400151831015611a465760405162461bcd60e51b81526004016103659061301a565b6101208201516001600160a01b03851660008181526002602090815260408083208684528252808320938352600682528083205461ffff1683529290522054611a8f9085612147565b1115611aad5760405162461bcd60e51b815260040161036590612f36565b6000846001600160a01b031663355274ea6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ae857600080fd5b505afa158015611afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b20919061294e565b90506000611b4a629896806105f586608001516105f5633b9aca008a61216c90919063ffffffff16565b90506000866001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b8757600080fd5b505afa158015611b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbf919061294e565b905082611bcc8284612147565b1115611bea5760405162461bcd60e51b815260040161036590612fc8565b60a0850151611bf99087612147565b6001600160a01b0380891660009081526005602081905260409091200191909155610180860151166323b872dd611c2e61222a565b30896040518463ffffffff1660e01b8152600401611c4e939291906129af565b602060405180830381600087803b158015611c6857600080fd5b505af1158015611c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca0919061292e565b611ca957600080fd5b604080516001808252818301909252606091602080830190803683370190505090508281600081518110611cd957fe5b6020908102919091010152604080516001808252818301909252606091816020016020820280368337019050509050611d1061222a565b81600081518110611d1d57fe5b6001600160a01b0392831660209182029290920101526040516307233fbf60e51b8152908a169063e467f7e090611d5a9084908690600401612a0d565b602060405180830381600087803b158015611d7457600080fd5b505af1158015611d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dac919061292e565b611db557600080fd5b6001600160a01b0389166000908152600160205260408120611e1a918a9190611ddc61222a565b6001600160a01b03908116825260208083019390935260409182016000908120918f168152600684528281205461ffff168152925290205490612147565b6001600160a01b038a16600090815260016020526040812090611e3b61222a565b6001600160a01b03908116825260208083019390935260409182016000908120918e16808252600685528382205461ffff16825291845282812094909455835260039091528120611e9191869190611ddc61222a565b6001600160a01b038a16600090815260036020526040812090611eb261222a565b6001600160a01b03908116825260208083019390935260409182016000908120918e1680825260068552838220805461ffff9081168452938652848320969096558152600284528281208b825284528281209454909116815292909152902054611f1c9089612147565b6001600160a01b038a1660008181526002602090815260408083208b84528252808320938352600682528083205461ffff1683529290522055611f5d61222a565b6001600160a01b0316896001600160a01b03167f214399217b44b0f0f93b5ba58868c778310925962e91255cf7312f52e39f8e1c8961018001518b88604051611fa8939291906129ec565b60405180910390a3505050505050505050565b6001600160a01b0380831660008181526005602090815260408083206004908101549083528184209587168452948252808320938352600682528083205461ffff168352929052908120549091612019916064916105f5919061216c565b9392505050565b6001600160a01b038116600090815260056020526040902060038101544211801561206057506006810154600582015461205991612147565b81600b0154115b61207c5760405162461bcd60e51b815260040161036590612c0c565b61208d8261208861222a565b61222e565b5050565b61209961222a565b6000546001600160a01b039081169116146120c65760405162461bcd60e51b815260040161036590612f01565b6001600160a01b0381166120ec5760405162461bcd60e51b815260040161036590612b8f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828201838110156120195760405162461bcd60e51b815260040161036590612bd5565b60008261217b57506000610529565b8282028284828161218857fe5b04146120195760405162461bcd60e51b815260040161036590612e79565b600061201983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612526565b600061201983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061255d565b3390565b600854604051631648d99360e31b81526000916001600160a01b03169063b246cc989061225f908590600401612981565b60206040518083038186803b15801561227757600080fd5b505afa15801561228b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122af919061294e565b6001600160a01b03808516600081815260036020908152604080832094881680845294825280832084845260068352818420805461ffff908116808752838652848720548888526001875285882099885298865284872090875285528386208054908790558254821687529285528386208690559585526002845282852088865284528285209054909516845293909152902054929350909161235290826121e8565b6001600160a01b03861660008181526002602090815260408083208884528252808320848452600683528184205461ffff168452909152908190209290925590516301cd910960e51b81526339b22120906123b390879086906004016129d3565b602060405180830381600087803b1580156123cd57600080fd5b505af11580156123e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612405919061292e565b61240e57600080fd5b6001600160a01b0380861660009081526005602052604090819020600c0154905163a9059cbb60e01b815291169063a9059cbb9061245290879085906004016129d3565b602060405180830381600087803b15801561246c57600080fd5b505af1158015612480573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a4919061292e565b6124ad57600080fd5b6001600160a01b038516600090815260056020819052604090912001546124d490826121e8565b6001600160a01b038616600081815260056020819052604091829020019290925590517fbfed30d9eb2d70c87ac13dffb355266c8508938ab8c9492dbd984b148ccfe8a3906114ad90879085906129d3565b600081836125475760405162461bcd60e51b81526004016103659190612a9b565b50600083858161255357fe5b0495945050505050565b600081848411156125815760405162461bcd60e51b81526004016103659190612a9b565b505050900390565b60405180610220016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000151581525090565b80356001600160a01b038116811461052957600080fd5b600082601f830112612651578081fd5b813561266461265f826132a2565b61327b565b81815291506020808301908481018184028601820187101561268557600080fd5b60005b848110156126ac5761269a888361262a565b84529282019290820190600101612688565b505050505092915050565b6000602082840312156126c8578081fd5b612019838361262a565b600080604083850312156126e4578081fd5b6126ee848461262a565b91506126fd846020850161262a565b90509250929050565b60008060408385031215612718578182fd5b612722848461262a565b9150602083013567ffffffffffffffff81111561273d578182fd5b61274985828601612641565b9150509250929050565b600080600060608486031215612767578081fd5b8335612772816132c2565b925060208481013567ffffffffffffffff8082111561278f578384fd5b61279b88838901612641565b945060408701359150808211156127b0578384fd5b508501601f810187136127c1578283fd5b80356127cf61265f826132a2565b81815283810190838501858402850186018b10156127eb578687fd5b8694505b8385101561280d5780358352600194909401939185019185016127ef565b5080955050505050509250925092565b6000808284036101c0811215612831578283fd5b833561283c816132c2565b92506101a0601f198201811315612851578283fd5b61285a8161327b565b91506020850135825260408501356020830152606085013560408301526080850135606083015260a0850135608083015260c085013560a083015260e085013560c08301526101008086013560e0840152610120808701358285015261014091506128c78883890161262a565b908401526101606128da8888830161262a565b8285015261018091506128ef8883890161262a565b90840152940135938101939093525092909150565b60008060408385031215612916578182fd5b612920848461262a565b946020939093013593505050565b60006020828403121561293f578081fd5b81518015158114612019578182fd5b60006020828403121561295f578081fd5b5051919050565b815260200190565b6001600160a01b03169052565b15159052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b604080825283519082018190526000906020906060840190828701845b82811015612a4d57612a3d84835161296e565b9284019290840190600101612a2a565b50505083810382850152808551612a6481846131f2565b91508387019250845b81811015612a8e57612a80838551612966565b938501939250600101612a6d565b5090979650505050505050565b6000602080835283518082850152825b81811015612ac757858101830151858201604001528201612aab565b81811115612ad85783604083870101525b50601f01601f1916929092016040019392505050565b60208082526035908201527f496e697469616c496e766573746d656e743a2053746172742074696d65206d756040820152747374206265206265666f726520656e642074696d6560581b606082015260800190565b6020808252602c908201527f496e697469616c496e766573746d656e743a2043616e206f6e6c79206d696e7460408201526b20647572696e672073616c6560a01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252602f908201527f496e697469616c496e766573746d656e743a20536f667420636170206d75737460408201526e081b9bdd081899481c995858da1959608a1b606082015260800190565b60208082526036908201527f496e697469616c496e766573746d656e743a20496e766573746d656e74206d75604082015275737420737461727420696e207468652066757475726560501b606082015260800190565b60208082526044908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f207760408201527f61697420666f7220696e697469616c20696e766573746d656e7420746f2066696060820152630dcd2e6d60e31b608082015260a00190565b60208082526027908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f2062604082015266329030b236b4b760c91b606082015260800190565b60208082526037908201527f496e697469616c20696e766573746d656e743a204f66666572696e6720616c7260408201527f656164792073657420616e642069742073746172746564000000000000000000606082015260800190565b60208082526037908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f206860408201527f6176652073797374656d2061646d696e20726967687473000000000000000000606082015260800190565b60208082526038908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f206360408201527f6f6c6c65637420696e766573746d656e74732066697273740000000000000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526027908201527f496e697469616c496e766573746d656e743a20536f667420636170206e6f74206040820152661c995858da195960ca1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602a908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f20696040820152696e76657374206c65737360b01b606082015260800190565b60208082526028908201527f496e697469616c496e766573746d656e743a20536f66742063617020736574206040820152670e8dede40d0d2ced60c31b606082015260800190565b60208082526032908201527f496e697469616c496e766573746d656e743a20546f6f206d616e7920746f6b656040820152711b9cc81ddbdd5b19081899481b5a5b9d195960721b606082015260800190565b6020808252602a908201527f496e697469616c496e766573746d656e743a20596f75206e65656420746f20696040820152696e76657374206d6f726560b01b606082015260800190565b60208082526038908201527f496e697469616c20696e766573746d656e743a20596f75206e65656420746f2060408201527f62652061626c6520746f20656469742070726f70657274790000000000000000606082015260800190565b60208082526029908201527f496e697469616c496e766573746d656e743a204f66666572696e67206973206e6040820152686f742061637469766560b81b606082015260800190565b600061022082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401518184015250610120808401518184015250610140808401518184015250610160808401518184015250610180808401516131a08285018261296e565b50506101a0808401516131b58285018261296e565b50506101c0808401516131ca8285018261296e565b50506101e08381015190830152610200808401516131ea8285018261297b565b505092915050565b90815260200190565b918252602082015260400190565b9d8e5260208e019c909c5260408d019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e08801526101008701526101208601526001600160a01b03908116610140860152908116610160850152166101808301526101a08201526101c00190565b60405181810167ffffffffffffffff8111828210171561329a57600080fd5b604052919050565b600067ffffffffffffffff8211156132b8578081fd5b5060209081020190565b6001600160a01b03811681146132d757600080fd5b5056fea26469706673582212208d3b192464f063698685395204ebd4fb425f5005036ccbe7a9334501f67a25d064736f6c634300060c0033

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

0000000000000000000000008c2a858fe7b2bf155247c7f528c6ca7b186197b500000000000000000000000013344d0cb96b17df81c4171ce47e14ff6c1975f7

-----Decoded View---------------
Arg [0] : dataProxy (address): 0x8C2A858FE7b2bf155247C7F528c6CA7B186197B5
Arg [1] : users (address): 0x13344D0Cb96b17dF81C4171Ce47E14ff6c1975f7

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000008c2a858fe7b2bf155247c7f528c6ca7b186197b5
Arg [1] : 00000000000000000000000013344d0cb96b17df81c4171ce47e14ff6c1975f7


Deployed Bytecode Sourcemap

1190:17051:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15344:784;;;;;;:::i;:::-;;:::i;:::-;;16496:137;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8632:1102;;;;;;:::i;:::-;;:::i;10004:997::-;;;;;;:::i;:::-;;:::i;17503:290::-;;;;;;:::i;:::-;;:::i;16241:151::-;;;;;;:::i;:::-;;:::i;1684:145:2:-;;;:::i;16757:122:1:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14663:493::-;;;;;;:::i;:::-;;:::i;13564:513::-;;;;;;:::i;:::-;;:::i;4343:1869::-;;;;;;:::i;:::-;;:::i;1061:77:2:-;;;:::i;:::-;;;;;;;:::i;4089:84:1:-;;;;;;:::i;:::-;;:::i;3983:100::-;;;;;;:::i;:::-;;:::i;17093:193::-;;;;;;:::i;:::-;;:::i;11211:1040::-;;;;;;:::i;:::-;;:::i;6406:2080::-;;;;;;:::i;:::-;;:::i;17999:240::-;;;;;;:::i;:::-;;:::i;14194:350::-;;;;;;:::i;:::-;;:::i;1978:240:2:-;;;;;;:::i;:::-;;:::i;15344:784:1:-;15456:10;;15423:77;;-1:-1:-1;;;15423:77:1;;-1:-1:-1;;;;;15456:10:1;;;;15423:65;;:77;;15489:10;;15423:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15415:145;;;;-1:-1:-1;;;15415:145:1;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;15598:20:1;;15570:25;15598:20;;;:10;:20;;;;;15636:16;;;;15656:15;-1:-1:-1;15636:35:1;;;:113;;-1:-1:-1;15723:25:1;;;;15694:24;;;;:55;;:28;:55::i;:::-;15675:8;:16;;;:74;15636:113;15628:173;;;;-1:-1:-1;;;15628:173:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;15852:20:1;;;;;;;:10;:20;;;;;;;;;:36;;;15907:24;;;;15819:113;;-1:-1:-1;;;15819:113:1;;15852:36;;;15819:79;;:113;;15899:6;;15907:24;15819:113;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15811:122;;;;;;-1:-1:-1;;;;;;;15943:20:1;15982:1;15943:20;;;:10;:20;;;;;;;;:36;;;:40;;;15993:37;;;;:41;;;16082:35;;;;;;;;;;;;:39;16044:77;-1:-1:-1;;16044:77:1;;;;;;15344:784::o;16496:137::-;16552:7;16611:8;-1:-1:-1;;;;;16578:46:1;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16571:55;16496:137;-1:-1:-1;;16496:137:1:o;8632:1102::-;-1:-1:-1;;;;;8723:20:1;;8695:25;8723:20;;;:10;:20;;;;;;;;8810:25;;;;8781:24;;;;8723:20;;8781:55;;:24;:28;:55::i;:::-;8761:8;:16;;;:75;;8753:127;;;;-1:-1:-1;;;8753:127:1;;;;;;;:::i;:::-;8917:15;8898:8;:16;;;:34;:82;;;;8963:17;8971:8;8963:7;:17::i;:::-;8936:23;8950:8;8936:13;:23::i;:::-;:44;8898:82;8890:163;;;;-1:-1:-1;;;8890:163:1;;;;;;;:::i;:::-;9083:24;;;;;9063:17;9117:28;;;;9155;;;:35;;-1:-1:-1;;9155:35:1;-1:-1:-1;9155:35:1;;;9228:12;;;;9083:24;;9063:17;9214:38;;9246:5;;9214:27;;9083:24;;9214:13;:27::i;:::-;:31;;:38::i;:::-;9200:52;-1:-1:-1;9274:18:1;:9;9200:52;9274:13;:18::i;:::-;-1:-1:-1;;;;;9340:35:1;;;;;;;:25;:35;;;;;;;;;;;;;;;:39;9302:77;-1:-1:-1;;9302:77:1;;;;;;9430:10;:20;;;;;;;:36;;;9477:18;;;;9397:110;;-1:-1:-1;;;9397:110:1;;9262:30;;-1:-1:-1;9430:36:1;;;9397:79;;:110;;9477:18;;9262:30;;9397:110;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9389:119;;;;;;9522:7;;9518:154;;-1:-1:-1;;;;;9586:20:1;;;;;;;:10;:20;;;;;;;:36;;;9633:21;;;;9553:107;;-1:-1:-1;;;9553:107:1;;9586:36;;;;9553:79;;:107;;9633:21;;;9656:3;;9553:107;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9545:116;;;;;;9702:8;-1:-1:-1;;;;;9686:41:1;;9712:9;9723:3;9686:41;;;;;;;:::i;:::-;;;;;;;;8632:1102;;;;:::o;10004:997::-;10153:10;;-1:-1:-1;;;;;10153:10:1;10120:64;10185:12;:10;:12::i;:::-;10199:8;10120:88;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10112:140;;;;-1:-1:-1;;;10112:140:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;10290:20:1;;10262:25;10290:20;;;:10;:20;;;;;10328:21;;10353:15;-1:-1:-1;10328:40:1;;;:79;;;10391:8;:16;;;10372:15;:35;;10328:79;10320:136;;;;-1:-1:-1;;;10320:136:1;;;;;;;:::i;:::-;10474:65;;-1:-1:-1;;;10474:65:1;;-1:-1:-1;;;;;10474:47:1;;;;;:65;;10522:7;;10531;;10474:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10466:74;;;;;;10555:9;10550:445;10574:7;:14;10570:1;:18;10550:445;;;10609:14;10626:7;10634:1;10626:10;;;;;;;;;;;;;;10609:27;;10726:89;10804:7;10812:1;10804:10;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10726:28:1;;;;;;;:18;:28;;;;;;:36;;;;;;;;;;;10763:35;;;:25;:35;;;;;;;;10726:73;;;;;;;;;:77;:89::i;:::-;-1:-1:-1;;;;;10650:28:1;;;;;;;:18;:28;;;;;;;;:36;;;;;;;;;;;10687:35;;;:25;:35;;;;;;;;10650:73;;;;;;;;;:165;;;;10865:14;;;;10850:10;;:39;;10885:3;;10850:30;;10865:14;10850:7;;10858:1;;10850:10;;;;;;;;;;;;:14;;:30;;;;:::i;:39::-;10943:25;;;;10829:60;;-1:-1:-1;10943:41:1;;10829:60;10943:29;:41::i;:::-;-1:-1:-1;;;;;10903:20:1;;;;;;:10;:20;;;;;:37;;:81;-1:-1:-1;;10590:3:1;;10550:445;;;;10004:997;;;;:::o;17503:290::-;17658:6;;17625:71;;-1:-1:-1;;;17625:71:1;;17591:7;;;;-1:-1:-1;;;;;17658:6:1;;;;17625:63;;:71;;17689:6;;17625:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17713:30:1;;;;;;:20;:30;;;;;;;;:36;;;;;;;;;17750:35;;;:25;:35;;;;;;;;17713:73;;;;;;;;;-1:-1:-1;;17503:290:1;;;;:::o;16241:151::-;16303:7;16362:8;-1:-1:-1;;;;;16329:54:1;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1684:145:2;1275:12;:10;:12::i;:::-;1265:6;;-1:-1:-1;;;;;1265:6:2;;;:22;;;1257:67;;;;-1:-1:-1;;;1257:67:2;;;;;;;:::i;:::-;1790:1:::1;1774:6:::0;;1753:40:::1;::::0;-1:-1:-1;;;;;1774:6:2;;::::1;::::0;1753:40:::1;::::0;1790:1;;1753:40:::1;1820:1;1803:19:::0;;-1:-1:-1;;;;;;1803:19:2::1;::::0;;1684:145::o;16757:122:1:-;16818:15;;:::i;:::-;-1:-1:-1;;;;;;16852:20:1;;;;;;;:10;:20;;;;;;;;;16845:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16757:122::o;14663:493::-;14763:10;;14730:77;;-1:-1:-1;;;14730:77:1;;-1:-1:-1;;;;;14763:10:1;;;;14730:65;;:77;;14796:10;;14730:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14722:145;;;;-1:-1:-1;;;14722:145:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;14877:20:1;;;;;;:10;:20;;;;;;14913:15;14877:51;;;14938:31;;;:49;;;14997:30;;;:48;;;15055:28;;;;:46;15116:33;;;14877:20;15116:33;14663:493;:::o;13564:513::-;2900:10;;2867:77;;-1:-1:-1;;;2867:77:1;;13655:10;;13667:8;;-1:-1:-1;;;;;2900:10:1;;;;2867:60;;:77;;13655:10;;13667:8;;2867:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2859:146;;;;-1:-1:-1;;;2859:146:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;13715:20:1;::::1;13687:25;13715:20:::0;;;:10:::1;:20;::::0;;;;13753:16:::1;::::0;::::1;::::0;13773:15:::1;-1:-1:-1::0;13753:35:1;::::1;::::0;:113:::1;;-1:-1:-1::0;13840:25:1::1;::::0;::::1;::::0;13811:24:::1;::::0;::::1;::::0;:55:::1;::::0;:28:::1;:55::i;:::-;13792:8;:16;;;:74;13753:113;13745:173;;;;-1:-1:-1::0;;;13745:173:1::1;;;;;;;:::i;:::-;13933:6;13928:143;13949:7;:14;13945:1;:18;13928:143;;;13984:14;14001:7;14009:1;14001:10;;;;;;;;;;;;;;13984:27;;14025:35;14043:8;14053:6;14025:17;:35::i;:::-;-1:-1:-1::0;13965:3:1::1;;13928:143;;;;3015:1;13564:513:::0;;;;:::o;4343:1869::-;4442:12;:10;:12::i;:::-;2900:10;;2867:77;;-1:-1:-1;;;2867:77:1;;4456:8;;-1:-1:-1;;;;;2900:10:1;;2867:60;;:77;;2928:5;;4456:8;;2867:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2859:146;;;;-1:-1:-1;;;2859:146:1;;;;;;;:::i;:::-;4556:46:::1;4578:23;4592:8;4578:13;:23::i;:::-;4556:17;4564:8;4556:7;:17::i;:::-;:21:::0;::::1;:46::i;:::-;4484:68;4544:7;4484:55;4521:11;:17;;;4484:32;4508:7;4484:11;:19;;;:23;;:32;;;;:::i;:68::-;:118;;4476:171;;;;-1:-1:-1::0;;;4476:171:1::1;;;;;;;:::i;:::-;4665:24:::0;;4693:15:::1;-1:-1:-1::0;4665:43:1::1;4657:110;;;;-1:-1:-1::0;;;4657:110:1::1;;;;;;;:::i;:::-;4813:22;::::0;::::1;::::0;4785:24;;:50:::1;::::0;::::1;::::0;:110:::1;;;4876:11;:19;;;4840:11;:22;;;4865:6;4840:31;4839:56;;4785:110;4777:176;;;;-1:-1:-1::0;;;4777:176:1::1;;;;;;;:::i;:::-;4963:24;;:::i;:::-;-1:-1:-1::0;;;;;;4990:20:1;;::::1;;::::0;;;:10:::1;:20;::::0;;;;;;;;4963:47;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;::::1;;;;::::0;;;;;5028:26;;:69:::1;;-1:-1:-1::0;5058:21:1;;5082:15:::1;-1:-1:-1::0;5028:69:1::1;:107;;;;5120:15;5101:8;:16;;;:34;5028:107;:139;;;;5139:8;:28;;;5028:139;5020:207;;;;-1:-1:-1::0;;;5020:207:1::1;;;;;;;:::i;:::-;5246:24;::::0;::::1;::::0;:29;:63;::::1;;;-1:-1:-1::0;5279:25:1::1;::::0;::::1;::::0;:30;5246:63:::1;5245:97;;;;5314:8;:28;;;5245:97;5237:166;;;;-1:-1:-1::0;;;5237:166:1::1;;;;;;;:::i;:::-;5424:382;;;;;;;;5433:11;:24;;;5424:382;;;;5459:11;:22;;;5424:382;;;;5483:11;:22;;;5508:6;5483:31;5424:382;;;;5516:11;:19;;;5424:382;;;;5537:11;:17;;;5424:382;;;;5556:1;5424:382;;;;5559:1;5424:382;;;;5562:11;:32;;;5424:382;;;;5596:11;:32;;;5424:382;;;;5630:11;:25;;;5424:382;;;;5657:11;:25;;;5424:382;;;;5684:11;:19;;;5424:382;;;;5705:11;:27;;;-1:-1:-1::0;;;;;5424:382:1::1;;;;;5734:11;:21;;;-1:-1:-1::0;;;;;5424:382:1::1;;;;;5757:11;:24;;;-1:-1:-1::0;;;;;5424:382:1::1;;;;;5783:11;:15;;;5424:382;;;;5800:5;5424:382;;;;::::0;5413:393:::1;;5839:8;5816:10;:20;5827:8;-1:-1:-1::0;;;;;5816:20:1::1;-1:-1:-1::0;;;;;5816:20:1::1;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;5816:31:1::1;;;;;-1:-1:-1::0;;;;;5816:31:1::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;5816:31:1::1;;;;;-1:-1:-1::0;;;;;5816:31:1::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;5816:31:1::1;;;;;-1:-1:-1::0;;;;;5816:31:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5875:8;-1:-1:-1::0;;;;;5862:343:1::1;;5885:8;:14;;;5901:8;:29;;;5932:8;:29;;;5963:8;:22;;;5987:8;:22;;;6011:8;:16;;;6029:8;:21;;;6052:8;:19;;;6073:8;:21;;;6097:6;6073:30;6105:8;:16;;;6123:8;:24;;;6149:8;:18;;;6169:8;:21;;;6192:8;:12;;;5862:343;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;3015:1;4343:1869:::0;;;;:::o;1061:77:2:-;1099:7;1125:6;-1:-1:-1;;;;;1125:6:2;1061:77;:::o;4089:84:1:-;1275:12:2;:10;:12::i;:::-;1265:6;;-1:-1:-1;;;;;1265:6:2;;;:22;;;1257:67;;;;-1:-1:-1;;;1257:67:2;;;;;;;:::i;:::-;4152:6:1::1;:14:::0;;-1:-1:-1;;;;;;4152:14:1::1;-1:-1:-1::0;;;;;4152:14:1;;;::::1;::::0;;;::::1;::::0;;4089:84::o;3983:100::-;1275:12:2;:10;:12::i;:::-;1265:6;;-1:-1:-1;;;;;1265:6:2;;;:22;;;1257:67;;;;-1:-1:-1;;;1257:67:2;;;;;;;:::i;:::-;4054:10:1::1;:22:::0;;-1:-1:-1;;;;;;4054:22:1::1;-1:-1:-1::0;;;;;4054:22:1;;;::::1;::::0;;;::::1;::::0;;3983:100::o;17093:193::-;-1:-1:-1;;;;;17209:25:1;;;17183:7;17209:25;;;:15;:25;;;;;;;;:33;;;;;;;;;;;;17243:35;;;:25;:35;;;;;;;;17209:70;;;;;;;17093:193::o;11211:1040::-;2900:10;;2867:77;;-1:-1:-1;;;2867:77:1;;11309:10;;11321:8;;-1:-1:-1;;;;;2900:10:1;;;;2867:60;;:77;;11309:10;;11321:8;;2867:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2859:146;;;;-1:-1:-1;;;2859:146:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;11369:20:1;::::1;11341:25;11369:20:::0;;;:10:::1;:20;::::0;;;;11407:16:::1;::::0;::::1;::::0;11427:15:::1;-1:-1:-1::0;11407:35:1;::::1;::::0;:113:::1;;-1:-1:-1::0;11494:25:1::1;::::0;::::1;::::0;11465:24:::1;::::0;::::1;::::0;:55:::1;::::0;:28:::1;:55::i;:::-;11446:8;:16;;;:74;11407:113;11399:173;;;;-1:-1:-1::0;;;11399:173:1::1;;;;;;;:::i;:::-;11587:6;11582:663;11603:7;:14;11599:1;:18;11582:663;;;11638:14;11655:7;11663:1;11655:10;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;11701:28:1;;::::1;11679:19;11701:28:::0;;;:18:::1;:28:::0;;;;;;;:36;;::::1;::::0;;;;;;;;11738:35;;;:25:::1;:35:::0;;;;;;::::1;;11701:73:::0;;;;;;;;;;11829:14;;::::1;::::0;11655:10;;-1:-1:-1;11701:73:1;11679:19;11813:40:::1;::::0;11849:3:::1;::::0;11813:31:::1;::::0;11701:73;;11813:15:::1;:31::i;:40::-;-1:-1:-1::0;;;;;11867:28:1;;::::1;11943:1;11867:28:::0;;;:18:::1;:28;::::0;;;;;;;:36;;::::1;::::0;;;;;;;;11904:35;;;:25:::1;:35:::0;;;;;;::::1;;11867:73:::0;;;;;;;:77;;;;11967:76;;-1:-1:-1;;;11967:76:1;;11788:65;;-1:-1:-1;11867:28:1;11967:55:::1;::::0;:76:::1;::::0;11896:6;;12031:11;;11967:76:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11959:85;;;::::0;::::1;;-1:-1:-1::0;;;;;12099:20:1;::::1;;::::0;;;:10:::1;:20;::::0;;;;:37:::1;;::::0;:57:::1;::::0;12141:14;12099:41:::1;:57::i;:::-;-1:-1:-1::0;;;;;12059:20:1;::::1;;::::0;;;:10:::1;:20;::::0;;;;;;:37:::1;;:97:::0;;;;12175:59;;::::1;::::0;::::1;::::0;12211:6;;12219:14;;12175:59:::1;:::i;:::-;;;;;;;;-1:-1:-1::0;;;11619:3:1::1;;11582:663;;6406:2080:::0;6473:24;;:::i;:::-;-1:-1:-1;;;;;;6500:20:1;;;;;;;:10;:20;;;;;;;;6473:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6578:6;;6473:47;;6578:6;6545:63;6609:12;:10;:12::i;:::-;6545:77;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6530:92;;6662:15;6640:8;:18;;;:37;;:76;;;;;6701:15;6681:8;:16;;;:35;;6640:76;6632:130;;;;-1:-1:-1;;;6632:130:1;;;;;;;:::i;:::-;6790:8;:22;;;6780:6;:32;;6772:87;;;;-1:-1:-1;;;6772:87:1;;;;;;;:::i;:::-;6966:22;;;;-1:-1:-1;;;;;6877:30:1;;;;;;:20;:30;;;;;;;;:36;;;;;;;;6914:35;;;:25;:35;;;;;;;;6877:73;;;;;;;:85;;6955:6;6877:77;:85::i;:::-;:111;;6869:166;;;;-1:-1:-1;;;6869:166:1;;;;;;;:::i;:::-;7045:11;7092:8;-1:-1:-1;;;;;7059:46:1;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7045:62;;7117:18;7138:52;7182:7;7138:39;7162:8;:14;;;7138:19;7149:7;7138:6;:10;;:19;;;;:::i;:52::-;7117:73;;7200:21;7257:8;-1:-1:-1;;;;;7224:54:1;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7200:80;-1:-1:-1;7332:3:1;7299:29;7200:80;7317:10;7299:17;:29::i;:::-;:36;;7291:99;;;;-1:-1:-1;;;7291:99:1;;;;;;;:::i;:::-;7439:24;;;;:36;;7468:6;7439:28;:36::i;:::-;-1:-1:-1;;;;;7400:20:1;;;;;;;:10;:20;;;;;;;;:36;:75;;;;7527:24;;;;7494:71;;7566:12;:10;:12::i;:::-;7588:4;7595:6;7494:108;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7486:117;;;;;;7641:16;;;7655:1;7641:16;;;;;;;;;7614:24;;7641:16;;;;;;;;;;;-1:-1:-1;7641:16:1;7614:43;;7680:10;7667:7;7675:1;7667:10;;;;;;;;;;;;;;;;;:23;7728:16;;;7742:1;7728:16;;;;;;;;;7700:25;;7728:16;;;;;;;;;;;;-1:-1:-1;7728:16:1;7700:44;;7768:12;:10;:12::i;:::-;7754:8;7763:1;7754:11;;;;;;;;-1:-1:-1;;;;;7754:26:1;;;:11;;;;;;;;;:26;7798:66;;-1:-1:-1;;;7798:66:1;;:47;;;;;;:66;;7846:8;;7856:7;;7798:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7790:75;;;;;;-1:-1:-1;;;;;7954:25:1;;;;;;:15;:25;;;;;:88;;8035:6;;7954:25;7980:12;:10;:12::i;:::-;-1:-1:-1;;;;;7954:39:1;;;;;;;;;;;;;;;;;-1:-1:-1;7954:39:1;;;7994:35;;;;;:25;:35;;;;;;;;7954:76;;;;;;;;:80;:88::i;:::-;-1:-1:-1;;;;;7875:25:1;;;;;;:15;:25;;;;;;7901:12;:10;:12::i;:::-;-1:-1:-1;;;;;7875:39:1;;;;;;;;;;;;;;;;;-1:-1:-1;7875:39:1;;;7915:35;;;;;;:25;:35;;;;;;;;7875:76;;;;;;;;:167;;;;8127:21;;:11;:21;;;;;:88;;8204:10;;8127:21;8149:12;:10;:12::i;8127:88::-;-1:-1:-1;;;;;8052:21:1;;;;;;:11;:21;;;;;;8074:12;:10;:12::i;:::-;-1:-1:-1;;;;;8052:35:1;;;;;;;;;;;;;;;;;-1:-1:-1;8052:35:1;;;8088;;;;;;:25;:35;;;;;;;;;;;8052:72;;;;;;;;:163;;;;8301:30;;:20;:30;;;;;:36;;;;;;;;8338:35;;;;;8301:73;;;;;;;;;:85;;8379:6;8301:77;:85::i;:::-;-1:-1:-1;;;;;8225:30:1;;;;;;:20;:30;;;;;;;;:36;;;;;;;;8262:35;;;:25;:35;;;;;;;;8225:73;;;;;;:161;8420:12;:10;:12::i;:::-;-1:-1:-1;;;;;8401:78:1;8410:8;-1:-1:-1;;;;;8401:78:1;;8434:8;:24;;;8460:6;8468:10;8401:78;;;;;;;;:::i;:::-;;;;;;;;6406:2080;;;;;;;;;:::o;17999:240::-;-1:-1:-1;;;;;18196:20:1;;;18092:7;18196:20;;;:10;:20;;;;;;;;:26;;;;;18118:28;;;;;;:36;;;;;;;;;;;18155:35;;;:25;:35;;;;;;;;18118:73;;;;;;;;;18092:7;;18118:114;;18228:3;;18118:105;;:73;:77;:105::i;:114::-;18111:121;17999:240;-1:-1:-1;;;17999:240:1:o;14194:350::-;-1:-1:-1;;;;;14284:20:1;;14256:25;14284:20;;;:10;:20;;;;;14322:16;;;;14341:15;-1:-1:-1;14322:112:1;;;;-1:-1:-1;14408:25:1;;;;14379:24;;;;:55;;:28;:55::i;:::-;14360:8;:16;;;:74;14322:112;14314:172;;;;-1:-1:-1;;;14314:172:1;;;;;;;:::i;:::-;14496:41;14514:8;14524:12;:10;:12::i;:::-;14496:17;:41::i;:::-;14194:350;;:::o;1978:240:2:-;1275:12;:10;:12::i;:::-;1265:6;;-1:-1:-1;;;;;1265:6:2;;;:22;;;1257:67;;;;-1:-1:-1;;;1257:67:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;2066:22:2;::::1;2058:73;;;;-1:-1:-1::0;;;2058:73:2::1;;;;;;;:::i;:::-;2167:6;::::0;;2146:38:::1;::::0;-1:-1:-1;;;;;2146:38:2;;::::1;::::0;2167:6;::::1;::::0;2146:38:::1;::::0;::::1;2194:6;:17:::0;;-1:-1:-1;;;;;;2194:17:2::1;-1:-1:-1::0;;;;;2194:17:2;;;::::1;::::0;;;::::1;::::0;;1978:240::o;874:176:3:-;932:7;963:5;;;986:6;;;;978:46;;;;-1:-1:-1;;;978:46:3;;;;;;;:::i;2180:459::-;2238:7;2479:6;2475:45;;-1:-1:-1;2508:1:3;2501:8;;2475:45;2542:5;;;2546:1;2542;:5;:1;2565:5;;;;;:10;2557:56;;;;-1:-1:-1;;;2557:56:3;;;;;;;:::i;3101:130::-;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;1321:134::-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;590:104:0:-;677:10;590:104;:::o;12257:1109:1:-;12384:6;;12351:71;;-1:-1:-1;;;12351:71:1;;12336:12;;-1:-1:-1;;;;;12384:6:1;;12351:63;;:71;;12415:6;;12351:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12454:21:1;;;12432:19;12454:21;;;:11;:21;;;;;;;;:29;;;;;;;;;;;;12484:35;;;:25;:35;;;;;;;;;;;12454:66;;;;;;;;;;12555:25;;;12484:35;12555:25;;;;;:33;;;;;;;;;:70;;;;;;;;;;12635:74;;;;12749:35;;;;12719:66;;;;;;;;:70;;;12875:30;;;:20;:30;;;;;:36;;;;;;;;12912:35;;;;;12875:73;;;;;;;;;12336:86;;-1:-1:-1;12454:66:1;;12875:93;;12555:70;12875:77;:93::i;:::-;-1:-1:-1;;;;;12799:30:1;;;;;;:20;:30;;;;;;;;:36;;;;;;;;12836:35;;;:25;:35;;;;;;;;12799:73;;;;;;;;;:169;;;;12987:76;;-1:-1:-1;;;12987:76:1;;:55;;:76;;13043:6;;13051:11;;12987:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12979:85;;;;;;-1:-1:-1;;;;;13115:20:1;;;;;;;:10;:20;;;;;;;:36;;;13082:103;;-1:-1:-1;;;13082:103:1;;13115:36;;;13082:79;;:103;;13162:6;;13170:14;;13082:103;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13074:112;;;;;;-1:-1:-1;;;;;13236:20:1;;;;;;:10;:20;;;;;;;;:36;;:56;;13277:14;13236:40;:56::i;:::-;-1:-1:-1;;;;;13197:20:1;;;;;;:10;:20;;;;;;;;;:36;:95;;;;13307:52;;;;;;13336:6;;13344:14;;13307:52;:::i;3713:272:3:-;3799:7;3833:12;3826:5;3818:28;;;;-1:-1:-1;;;3818:28:3;;;;;;;;:::i;:::-;;3856:9;3872:1;3868;:5;;;;;;;3713:272;-1:-1:-1;;;;;3713:272:3:o;1746:187::-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:3;;;;;;;;:::i;:::-;-1:-1:-1;;;1902:5:3;;;1746:187::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;72:20;;-1:-1;;;;;38789:54;;39754:35;;39744:2;;39803:1;;39793:12;160:707;;277:3;270:4;262:6;258:17;254:27;244:2;;-1:-1;;285:12;244:2;332:6;319:20;354:80;369:64;426:6;369:64;:::i;:::-;354:80;:::i;:::-;462:21;;;345:89;-1:-1;506:4;519:14;;;;494:17;;;608;;;599:27;;;;596:36;-1:-1;593:2;;;645:1;;635:12;593:2;670:1;655:206;680:6;677:1;674:13;655:206;;;760:37;793:3;781:10;760:37;:::i;:::-;748:50;;812:14;;;;840;;;;702:1;695:9;655:206;;;659:14;;;;;237:630;;;;:::o;4391:241::-;;4495:2;4483:9;4474:7;4470:23;4466:32;4463:2;;;-1:-1;;4501:12;4463:2;4563:53;4608:7;4584:22;4563:53;:::i;4639:366::-;;;4760:2;4748:9;4739:7;4735:23;4731:32;4728:2;;;-1:-1;;4766:12;4728:2;4828:53;4873:7;4849:22;4828:53;:::i;:::-;4818:63;;4936:53;4981:7;4918:2;4961:9;4957:22;4936:53;:::i;:::-;4926:63;;4722:283;;;;;:::o;5012:502::-;;;5158:2;5146:9;5137:7;5133:23;5129:32;5126:2;;;-1:-1;;5164:12;5126:2;5226:53;5271:7;5247:22;5226:53;:::i;:::-;5216:63;;5344:2;5333:9;5329:18;5316:32;5368:18;5360:6;5357:30;5354:2;;;-1:-1;;5390:12;5354:2;5420:78;5490:7;5481:6;5470:9;5466:22;5420:78;:::i;:::-;5410:88;;;5120:394;;;;;:::o;5521:763::-;;;;5709:2;5697:9;5688:7;5684:23;5680:32;5677:2;;;-1:-1;;5715:12;5677:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;5767:63;-1:-1;5895:2;5880:18;;;5867:32;5919:18;5908:30;;;5905:2;;;-1:-1;;5941:12;5905:2;5971:78;6041:7;6032:6;6021:9;6017:22;5971:78;:::i;:::-;5961:88;;6114:2;6103:9;6099:18;6086:32;6072:46;;5919:18;6130:6;6127:30;6124:2;;;-1:-1;;6160:12;6124:2;-1:-1;6236:22;;1003:4;991:17;;987:27;-1:-1;977:2;;-1:-1;;1018:12;977:2;1065:6;1052:20;1087:80;1102:64;1159:6;1102:64;:::i;1087:80::-;1195:21;;;1252:14;;;;1227:17;;;1341;;;1332:27;;;;1329:36;-1:-1;1326:2;;;-1:-1;;1368:12;1326:2;-1:-1;1394:10;;1388:206;1413:6;1410:1;1407:13;1388:206;;;4180:20;;1481:50;;1435:1;1428:9;;;;;1545:14;;;;1573;;1388:206;;;1392:14;6180:88;;;;;;;;5671:613;;;;;:::o;6291:423::-;;;6428:9;6419:7;6415:23;6440:3;6415:23;6411:33;6408:2;;;-1:-1;;6447:12;6408:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;6499:63;-1:-1;2052:6;-1:-1;;2031:19;;2027:32;-1:-1;2024:2;;;-1:-1;;2062:12;2024:2;2090:22;2052:6;2090:22;:::i;:::-;2081:31;;6599:2;6670:9;6666:22;4180:20;2184:16;2177:75;2373:22;6670:9;2373:22;4180:20;6599:2;2338:5;2334:16;2327:75;2520:22;6670:9;2520:22;4180:20;2373:22;2485:5;2481:16;2474:75;2665:22;6670:9;2665:22;4180:20;2520:22;2630:5;2626:16;2619:75;2826:22;6670:9;2826:22;4180:20;2665:22;2791:5;2787:16;2780:75;2987:22;6670:9;2987:22;4180:20;2826:22;2952:5;2948:16;2941:75;3141:22;6670:9;3141:22;4180:20;2987:22;3106:5;3102:16;3095:75;3295:22;;6670:9;3295:22;4180:20;3141:22;3260:5;3256:16;3249:75;3445:22;;6670:9;3445:22;4180:20;3295:22;3408:5;3404:18;3397:77;3603:22;;;3582:49;3627:3;3603:22;6670:9;3603:22;3582:49;:::i;:::-;3562:18;;;3555:77;3755:22;3734:49;3779:3;3755:22;;;3734:49;:::i;:::-;3603:22;3718:5;3714:18;3707:77;3910:22;;;3889:49;3934:3;3910:22;6670:9;3910:22;3889:49;:::i;:::-;3869:18;;;3862:77;4056:22;;4180:20;4015:18;;;4008:77;;;;-1:-1;6402:312;3873:5;;-1:-1;6402:312::o;6721:366::-;;;6842:2;6830:9;6821:7;6817:23;6813:32;6810:2;;;-1:-1;;6848:12;6810:2;6910:53;6955:7;6931:22;6910:53;:::i;:::-;6900:63;7000:2;7039:22;;;;4180:20;;-1:-1;;;6804:283::o;7094:257::-;;7206:2;7194:9;7185:7;7181:23;7177:32;7174:2;;;-1:-1;;7212:12;7174:2;1689:6;1683:13;39900:5;38622:13;38615:21;39878:5;39875:32;39865:2;;-1:-1;;39911:12;7358:263;;7473:2;7461:9;7452:7;7448:23;7444:32;7441:2;;;-1:-1;;7479:12;7441:2;-1:-1;1821:13;;7435:186;-1:-1;7435:186::o;8081:173::-;21464:37;;8243:4;8234:14;;8161:93::o;8411:103::-;-1:-1;;;;;38789:54;8472:37;;8466:48::o;10099:94::-;38622:13;38615:21;10154:34;;10148:45::o;21633:222::-;-1:-1;;;;;38789:54;;;;8472:37;;21760:2;21745:18;;21731:124::o;22107:349::-;-1:-1;;;;;38789:54;;;8341:58;;38789:54;;22442:2;22427:18;;8472:37;22270:2;22255:18;;22241:215::o;22463:460::-;-1:-1;;;;;38789:54;;;8341:58;;38789:54;;;;22826:2;22811:18;;8472:37;22909:2;22894:18;;21464:37;;;;22654:2;22639:18;;22625:298::o;23270:333::-;-1:-1;;;;;38789:54;;;;8472:37;;23589:2;23574:18;;21464:37;23425:2;23410:18;;23396:207::o;23610:444::-;-1:-1;;;;;38789:54;;;;8472:37;;23957:2;23942:18;;21464:37;;;;24040:2;24025:18;;21464:37;23793:2;23778:18;;23764:290::o;24061:629::-;24316:2;24330:47;;;37368:12;;24301:18;;;38031:19;;;24061:629;;38080:4;;38071:14;;;;37064;;;24061:629;9080:260;9105:6;9102:1;9099:13;9080:260;;;7986:46;8028:3;9172:6;9166:13;7986:46;:::i;:::-;8052:14;;;;37771;;;;9127:1;9120:9;9080:260;;;9084:14;;;24547:9;24541:4;24537:20;38080:4;24521:9;24517:18;24510:48;24572:108;9594:5;37368:12;9613:86;9692:6;9687:3;9613:86;:::i;:::-;9606:93;;38080:4;9770:5;37064:14;9782:21;;-1:-1;9809:260;9834:6;9831:1;9828:13;9809:260;;;9922:63;9981:3;9901:6;9895:13;9922:63;:::i;:::-;37771:14;;;;9915:70;-1:-1;9127:1;9849:9;9809:260;;;-1:-1;24564:116;;24287:403;-1:-1;;;;;;;24287:403::o;24697:310::-;;24844:2;;24865:17;24858:47;10345:5;37368:12;38043:6;24844:2;24833:9;24829:18;38031:19;-1:-1;39386:101;39400:6;39397:1;39394:13;39386:101;;;39467:11;;;;;39461:18;39448:11;;;38071:14;39448:11;39441:39;39415:10;;39386:101;;;39502:6;39499:1;39496:13;39493:2;;;-1:-1;38071:14;39558:6;24833:9;39549:16;;39542:27;39493:2;-1:-1;2031:19;39658:14;-1:-1;;39654:28;10503:39;;;;38071:14;10503:39;;24815:192;-1:-1;;;24815:192::o;25014:416::-;25214:2;25228:47;;;10779:2;25199:18;;;38031:19;10815:34;38071:14;;;10795:55;-1:-1;;;10870:12;;;10863:45;10927:12;;;25185:245::o;25437:416::-;25637:2;25651:47;;;11178:2;25622:18;;;38031:19;11214:34;38071:14;;;11194:55;-1:-1;;;11269:12;;;11262:36;11317:12;;;25608:245::o;25860:416::-;26060:2;26074:47;;;11568:2;26045:18;;;38031:19;11604:34;38071:14;;;11584:55;-1:-1;;;11659:12;;;11652:30;11701:12;;;26031:245::o;26283:416::-;26483:2;26497:47;;;11952:2;26468:18;;;38031:19;11988:29;38071:14;;;11968:50;12037:12;;;26454:245::o;26706:416::-;26906:2;26920:47;;;12288:2;26891:18;;;38031:19;12324:34;38071:14;;;12304:55;-1:-1;;;12379:12;;;12372:39;12430:12;;;26877:245::o;27129:416::-;27329:2;27343:47;;;12681:2;27314:18;;;38031:19;12717:34;38071:14;;;12697:55;-1:-1;;;12772:12;;;12765:46;12830:12;;;27300:245::o;27552:416::-;27752:2;27766:47;;;13081:2;27737:18;;;38031:19;13117:34;38071:14;;;13097:55;13186:34;13172:12;;;13165:56;-1:-1;;;13241:12;;;13234:28;13281:12;;;27723:245::o;27975:416::-;28175:2;28189:47;;;13532:2;28160:18;;;38031:19;13568:34;38071:14;;;13548:55;-1:-1;;;13623:12;;;13616:31;13666:12;;;28146:245::o;28398:416::-;28598:2;28612:47;;;13917:2;28583:18;;;38031:19;13953:34;38071:14;;;13933:55;14022:25;14008:12;;;14001:47;14067:12;;;28569:245::o;28821:416::-;29021:2;29035:47;;;14318:2;29006:18;;;38031:19;14354:34;38071:14;;;14334:55;14423:25;14409:12;;;14402:47;14468:12;;;28992:245::o;29244:416::-;29444:2;29458:47;;;14719:2;29429:18;;;38031:19;14755:34;38071:14;;;14735:55;14824:26;14810:12;;;14803:48;14870:12;;;29415:245::o;29667:416::-;29867:2;29881:47;;;15121:2;29852:18;;;38031:19;15157:34;38071:14;;;15137:55;-1:-1;;;15212:12;;;15205:25;15249:12;;;29838:245::o;30090:416::-;30290:2;30304:47;;;15500:2;30275:18;;;38031:19;15536:34;38071:14;;;15516:55;-1:-1;;;15591:12;;;15584:31;15634:12;;;30261:245::o;30513:416::-;30713:2;30727:47;;;30698:18;;;38031:19;15921:34;38071:14;;;15901:55;15975:12;;;30684:245::o;30936:416::-;31136:2;31150:47;;;16226:2;31121:18;;;38031:19;16262:34;38071:14;;;16242:55;-1:-1;;;16317:12;;;16310:34;16363:12;;;31107:245::o;31359:416::-;31559:2;31573:47;;;16614:2;31544:18;;;38031:19;16650:34;38071:14;;;16630:55;-1:-1;;;16705:12;;;16698:32;16749:12;;;31530:245::o;31782:416::-;31982:2;31996:47;;;17000:2;31967:18;;;38031:19;17036:34;38071:14;;;17016:55;-1:-1;;;17091:12;;;17084:42;17145:12;;;31953:245::o;32205:416::-;32405:2;32419:47;;;17396:2;32390:18;;;38031:19;17432:34;38071:14;;;17412:55;-1:-1;;;17487:12;;;17480:34;17533:12;;;32376:245::o;32628:416::-;32828:2;32842:47;;;17784:2;32813:18;;;38031:19;17820:34;38071:14;;;17800:55;17889:26;17875:12;;;17868:48;17935:12;;;32799:245::o;33051:416::-;33251:2;33265:47;;;18186:2;33236:18;;;38031:19;18222:34;38071:14;;;18202:55;-1:-1;;;18277:12;;;18270:33;18322:12;;;33222:245::o;33474:323::-;;33651:3;33640:9;33636:19;33628:27;;18666:16;18660:23;21471:3;21464:37;18837:4;18830:5;18826:16;18820:23;18837:4;18901:3;18897:14;21464:37;18996:4;18989:5;18985:16;18979:23;18996:4;19060:3;19056:14;21464:37;19153:4;19146:5;19142:16;19136:23;19153:4;19217:3;19213:14;21464:37;19308:4;19301:5;19297:16;19291:23;19308:4;19372:3;19368:14;21464:37;19473:4;19466:5;19462:16;19456:23;19473:4;19537:3;19533:14;21464:37;19639:4;19632:5;19628:16;19622:23;19639:4;19703:3;19699:14;21464:37;19809:4;19802:5;19798:16;19792:23;19809:4;19873:3;19869:14;21464:37;19979:6;;19972:5;19968:18;19962:25;19979:6;20045:3;20041:16;21464:37;;20146:6;;20139:5;20135:18;20129:25;20146:6;20212:3;20208:16;21464:37;;20313:6;;20306:5;20302:18;20296:25;20313:6;20379:3;20375:16;21464:37;;20474:6;;20467:5;20463:18;20457:25;20474:6;20540:3;20536:16;21464:37;;20643:6;;20636:5;20632:18;20626:25;20657:65;20643:6;20709:3;20705:16;20691:12;20657:65;:::i;:::-;;;20806:6;;20799:5;20795:18;20789:25;20820:65;20806:6;20872:3;20868:16;20854:12;20820:65;:::i;:::-;;;20972:6;;20965:5;20961:18;20955:25;20986:65;20972:6;21038:3;21034:16;21020:12;20986:65;:::i;:::-;-1:-1;;21129:6;21118:18;;;21112:25;21191:16;;;21464:37;21302:6;21291:18;;;21285:25;21316:59;21358:16;;;21285:25;21316:59;:::i;:::-;;;33622:175;;;;:::o;33804:222::-;21464:37;;;33931:2;33916:18;;33902:124::o;34033:333::-;21464:37;;;34352:2;34337:18;;21464:37;34188:2;34173:18;;34159:207::o;34373:1684::-;21464:37;;;35033:2;35018:18;;21464:37;;;;35116:2;35101:18;;21464:37;;;;35199:2;35184:18;;21464:37;;;;35282:3;35267:19;;21464:37;;;;35366:3;35351:19;;21464:37;;;;35450:3;35435:19;;21464:37;;;;35534:3;35519:19;;21464:37;35618:3;35603:19;;21464:37;35702:3;35687:19;;21464:37;-1:-1;;;;;38789:54;;;35787:3;35772:19;;8472:37;38789:54;;;35872:3;35857:19;;8472:37;38789:54;35957:3;35942:19;;8472:37;36042:3;36027:19;;21464:37;34868:3;34853:19;;34839:1218::o;36064:256::-;36126:2;36120:9;36152:17;;;36227:18;36212:34;;36248:22;;;36209:62;36206:2;;;36284:1;;36274:12;36206:2;36126;36293:22;36104:216;;-1:-1;36104:216::o;36327:304::-;;36486:18;36478:6;36475:30;36472:2;;;-1:-1;;36508:12;36472:2;-1:-1;36553:4;36541:17;;;36606:15;;36409:222::o;39695:117::-;-1:-1;;;;;38789:54;;39754:35;;39744:2;;39803:1;;39793:12;39744:2;39738:74;:::o

Swarm Source

ipfs://8d3b192464f063698685395204ebd4fb425f5005036ccbe7a9334501f67a25d0

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.