Contract 0x2bA7cBddF6d1E951863AB214CD1cE52F27F5F8e5

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0xe222915707f63df0c66d8a3ab3fc9b9605ecd35528e0df406340e20e04ba58fd0x61042060380363972023-01-13 18:24:3470 days 12 hrs ago0xdbf670f74d66174c9bfe78be748fe28d46a6995a IN  Create: XVMCgovernor0 MATIC0.296366421525 59.167610952
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
XVMCgovernor

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2023-01-13
*/

// File: libs/standard/Address.sol



pragma solidity >=0.6.12 <=0.8.0;



/**

 * @dev Collection of functions related to the address type

 */

library Address {

    /**

     * @dev Returns true if `account` is a contract.

     *

     * [IMPORTANT]

     * ====

     * It is unsafe to assume that an address for which this function returns

     * false is an externally-owned account (EOA) and not a contract.

     *

     * Among others, `isContract` will return false for the following

     * types of addresses:

     *

     *  - an externally-owned account

     *  - a contract in construction

     *  - an address where a contract will be created

     *  - an address where a contract lived, but was destroyed

     * ====

     *

     * [IMPORTANT]

     * ====

     * You shouldn't rely on `isContract` to protect against flash loan attacks!

     *

     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets

     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract

     * constructor.

     * ====

     */

    function isContract(address account) internal view returns (bool) {

        // This method relies on extcodesize/address.code.length, which returns 0

        // for contracts in construction, since the code is only stored at the end

        // of the constructor execution.



        return account.code.length > 0;

    }



    /**

     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to

     * `recipient`, forwarding all available gas and reverting on errors.

     *

     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost

     * of certain opcodes, possibly making contracts go over the 2300 gas limit

     * imposed by `transfer`, making them unable to receive funds via

     * `transfer`. {sendValue} removes this limitation.

     *

     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].

     *

     * IMPORTANT: because control is transferred to `recipient`, care must be

     * taken to not create reentrancy vulnerabilities. Consider using

     * {ReentrancyGuard} or the

     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].

     */

    function sendValue(address payable recipient, uint256 amount) internal {

        require(address(this).balance >= amount, "Address: insufficient balance");



        (bool success, ) = recipient.call{value: amount}("");

        require(success, "Address: unable to send value, recipient may have reverted");

    }



    /**

     * @dev Performs a Solidity function call using a low level `call`. A

     * plain `call` is an unsafe replacement for a function call: use this

     * function instead.

     *

     * If `target` reverts with a revert reason, it is bubbled up by this

     * function (like regular Solidity function calls).

     *

     * Returns the raw returned data. To convert to the expected return value,

     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].

     *

     * Requirements:

     *

     * - `target` must be a contract.

     * - calling `target` with `data` must not revert.

     *

     * _Available since v3.1._

     */

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {

        return functionCall(target, data, "Address: low-level call failed");

    }



    /**

     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with

     * `errorMessage` as a fallback revert reason when `target` reverts.

     *

     * _Available since v3.1._

     */

    function functionCall(

        address target,

        bytes memory data,

        string memory errorMessage

    ) internal returns (bytes memory) {

        return functionCallWithValue(target, data, 0, errorMessage);

    }



    /**

     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],

     * but also transferring `value` wei to `target`.

     *

     * Requirements:

     *

     * - the calling contract must have an ETH balance of at least `value`.

     * - the called Solidity function must be `payable`.

     *

     * _Available since v3.1._

     */

    function functionCallWithValue(

        address target,

        bytes memory data,

        uint256 value

    ) internal returns (bytes memory) {

        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");

    }



    /**

     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but

     * with `errorMessage` as a fallback revert reason when `target` reverts.

     *

     * _Available since v3.1._

     */

    function functionCallWithValue(

        address target,

        bytes memory data,

        uint256 value,

        string memory errorMessage

    ) internal returns (bytes memory) {

        require(address(this).balance >= value, "Address: insufficient balance for call");

        require(isContract(target), "Address: call to non-contract");



        (bool success, bytes memory returndata) = target.call{value: value}(data);

        return verifyCallResult(success, returndata, errorMessage);

    }



    /**

     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],

     * but performing a static call.

     *

     * _Available since v3.3._

     */

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {

        return functionStaticCall(target, data, "Address: low-level static call failed");

    }



    /**

     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],

     * but performing a static call.

     *

     * _Available since v3.3._

     */

    function functionStaticCall(

        address target,

        bytes memory data,

        string memory errorMessage

    ) internal view returns (bytes memory) {

        require(isContract(target), "Address: static call to non-contract");



        (bool success, bytes memory returndata) = target.staticcall(data);

        return verifyCallResult(success, returndata, errorMessage);

    }



    /**

     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],

     * but performing a delegate call.

     *

     * _Available since v3.4._

     */

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {

        return functionDelegateCall(target, data, "Address: low-level delegate call failed");

    }



    /**

     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],

     * but performing a delegate call.

     *

     * _Available since v3.4._

     */

    function functionDelegateCall(

        address target,

        bytes memory data,

        string memory errorMessage

    ) internal returns (bytes memory) {

        require(isContract(target), "Address: delegate call to non-contract");



        (bool success, bytes memory returndata) = target.delegatecall(data);

        return verifyCallResult(success, returndata, errorMessage);

    }



    /**

     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the

     * revert reason using the provided one.

     *

     * _Available since v4.3._

     */

    function verifyCallResult(

        bool success,

        bytes memory returndata,

        string memory errorMessage

    ) internal pure returns (bytes memory) {

        if (success) {

            return returndata;

        } else {

            // Look for revert reason and bubble it up if present

            if (returndata.length > 0) {

                // The easiest way to bubble the revert reason is using memory via assembly



                assembly {

                    let returndata_size := mload(returndata)

                    revert(add(32, returndata), returndata_size)

                }

            } else {

                revert(errorMessage);

            }

        }

    }

}


// File: libs/standard/IERC20.sol



// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)



pragma solidity ^0.8.0;



/**

 * @dev Interface of the ERC20 standard as defined in the EIP.

 */

interface IERC20 {

    /**

     * @dev Emitted when `value` tokens are moved from one account (`from`) to

     * another (`to`).

     *

     * Note that `value` may be zero.

     */

    event Transfer(address indexed from, address indexed to, uint256 value);



    /**

     * @dev Emitted when the allowance of a `spender` for an `owner` is set by

     * a call to {approve}. `value` is the new allowance.

     */

    event Approval(address indexed owner, address indexed spender, uint256 value);



    /**

     * @dev Returns the amount of tokens in existence.

     */

    function totalSupply() external view returns (uint256);



    /**

     * @dev Returns the amount of tokens owned by `account`.

     */

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



    /**

     * @dev Moves `amount` tokens from the caller's account to `to`.

     *

     * Returns a boolean value indicating whether the operation succeeded.

     *

     * Emits a {Transfer} event.

     */

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



    /**

     * @dev Returns the remaining number of tokens that `spender` will be

     * allowed to spend on behalf of `owner` through {transferFrom}. This is

     * zero by default.

     *

     * This value changes when {approve} or {transferFrom} are called.

     */

    function allowance(address owner, address spender) external view returns (uint256);



    /**

     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.

     *

     * Returns a boolean value indicating whether the operation succeeded.

     *

     * IMPORTANT: Beware that changing an allowance with this method brings the risk

     * that someone may use both the old and the new allowance by unfortunate

     * transaction ordering. One possible solution to mitigate this race

     * condition is to first reduce the spender's allowance to 0 and set the

     * desired value afterwards:

     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729

     *

     * Emits an {Approval} event.

     */

    function approve(address spender, uint256 amount) external returns (bool);



    /**

     * @dev Moves `amount` tokens from `from` to `to` using the

     * allowance mechanism. `amount` is then deducted from the caller's

     * allowance.

     *

     * Returns a boolean value indicating whether the operation succeeded.

     *

     * Emits a {Transfer} event.

     */

    function transferFrom(

        address from,

        address to,

        uint256 amount

    ) external returns (bool);

}


// File: libs/standard/SafeERC20.sol



// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)



pragma solidity ^0.8.0;





/**

 * @title SafeERC20

 * @dev Wrappers around ERC20 operations that throw on failure (when the token

 * contract returns false). Tokens that return no value (and instead revert or

 * throw on failure) are also supported, non-reverting calls are assumed to be

 * successful.

 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,

 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.

 */

library SafeERC20 {

    using Address for address;



    function safeTransfer(

        IERC20 token,

        address to,

        uint256 value

    ) internal {

        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));

    }



    function safeTransferFrom(

        IERC20 token,

        address from,

        address to,

        uint256 value

    ) internal {

        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));

    }



    /**

     * @dev Deprecated. This function has issues similar to the ones found in

     * {IERC20-approve}, and its usage is discouraged.

     *

     * Whenever possible, use {safeIncreaseAllowance} and

     * {safeDecreaseAllowance} instead.

     */

    function safeApprove(

        IERC20 token,

        address spender,

        uint256 value

    ) internal {

        // safeApprove should only be called when setting an initial allowance,

        // or when resetting it to zero. To increase and decrease it, use

        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'

        require(

            (value == 0) || (token.allowance(address(this), spender) == 0),

            "SafeERC20: approve from non-zero to non-zero allowance"

        );

        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));

    }



    function safeIncreaseAllowance(

        IERC20 token,

        address spender,

        uint256 value

    ) internal {

        uint256 newAllowance = token.allowance(address(this), spender) + value;

        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));

    }



    function safeDecreaseAllowance(

        IERC20 token,

        address spender,

        uint256 value

    ) internal {

        unchecked {

            uint256 oldAllowance = token.allowance(address(this), spender);

            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");

            uint256 newAllowance = oldAllowance - value;

            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));

        }

    }



    /**

     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement

     * on the return value: the return value is optional (but if data is returned, it must not be false).

     * @param token The token targeted by the call.

     * @param data The call data (encoded using abi.encode or one of its variants).

     */

    function _callOptionalReturn(IERC20 token, bytes memory data) private {

        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since

        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that

        // the target address contains contract code and also asserts for success in the low-level call.



        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");

        if (returndata.length > 0) {

            // Return data is optional

            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");

        }

    }

}


// File: test.sol





pragma solidity 0.8.0;






interface IacPool {

    function setCallFee(uint256 _callFee) external;

    function totalShares() external returns (uint256);

    function totalVotesFor(uint256 proposalID) external returns (uint256);

    function setAdmin(address _admin, address _treasury) external;

    function setTreasury(address _treasury) external;

	function addAndExtendStake(address _recipientAddr, uint256 _amount, uint256 _stakeID, uint256 _lockUpTokensInSeconds) external;

    function giftDeposit(uint256 _amount, address _toAddress, uint256 _minToServeInSecs) external;

    function harvest() external;

	function calculateHarvestXVMCRewards() external view returns (uint256);

}



interface IMasterChef {

    function set(uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, bool _withUpdate) external;

    function updateEmissionRate(uint256 _xvmcPerBlock) external;

    function setFeeAddress(address _feeAddress) external;

    function dev(address _devaddr) external;

    function transferOwnership(address newOwner) external;

    function XVMCPerBlock() external returns (uint256);

    function totalAllocPoint() external returns (uint256);

    function updatePool(uint256 _pid) external;

    function owner() external returns (address);

	function setGovernorFee(uint256 _amount) external;

}



interface IXVMCtreasury {

    function requestWithdraw(address _token, address _receiver, uint _value) external;

}



interface IOldChef {

	function burnTokens(uint256 _amount) external;

}



interface IConsensus {

	function totalXVMCStaked() external view returns(uint256);

	function tokensCastedPerVote(uint256 _forID) external view returns(uint256);

	function isGovInvalidated(address _failedGov) external view returns(bool, bool);

}



interface IPolygonMultisig {

	function isOwner(address) external view returns(bool);

}



interface IRewardBoost {

	function updateDelayBetweenEvents(uint256 _delay) external;

	function updateGrandEventLength(uint256 _length) external;

}



interface InftStaking {

    function stopEarning(uint256 _withdrawAmount) external;

    function setAdmin() external;

    function withdrawDummy(uint256 _amount) external;

    function startEarning() external;

}



interface InftAllocation {

    function setAllocationContract(address _contract, bool _setting) external;

}



    /**

     * XVMC governor is a decentralized masterchef governed by it's users

     * Works as a decentralized cryptocurrency with no third-party control

     * Effectively creating a DAO through time-deposits

     *

     * In order to earn staking rewards, users must lock up their tokens.

     * Certificates of deposit or time deposit are the biggest market in the world

     * The longer the lockup period, the higher the rewards(APY) and voting power 

     * The locked up stakers create the governance council, through which

     * the protocol can be upgraded in a decentralized manner.

     *

     * Users are utilized as oracles through on-chain voting regulating the entire system(events,

     * rewards, APYs, fees, bonuses,...)

     * The token voting is overpowered by the consensus mechanism(locked up stakers)

     *

     * It is a real DAO creating an actual decentralized finance ecosystem

     *

     * https://macncheese.finance/

    */



    

contract XVMCgovernor {

    using SafeERC20 for IERC20;

    

    uint256 public immutable goldenRatio = 1618; //1.618 is the golden ratio

	address public immutable oldToken = 0x6d0c966c8A09e354Df9C48b446A474CE3343D912;

    address public immutable token = 0x970ccEe657Dd831e9C37511Aa3eb5302C1Eb5EEe; //XVMC token

    

    //masterchef address

    address public immutable masterchef = 0x6ff40a8a1fe16075bD6008A48befB768BE08b4b0;

    address public immutable oldChefOwner = 0x27771BB243c37B35091b0A1e8b69C816249c2E71;

	

	//https://docs.polygon.technology/docs/faq/commit-chain-multisigs/

	address public immutable polygonMultisig = 0x355b8E02e7F5301E6fac9b7cAc1D6D9c86C0343f; 

	

    address public immutable consensusContract = 0xDDd4982e3E9e5C5C489321D2143b8a027f535112;

    address public immutable farmContract = 0xdf47e7a036A6a85F92898176b5A8B4B4b9fBF25A;

    address public immutable fibonacceningContract = 0xff5a8072565726A055690bd14924022DE020623A; //reward boost contract

    address public immutable basicContract = 0xEBD2e542F593d8E03543661BCc70ad2474e6DBad;

	

    address public immutable oldNftStakingContract = 0xD7bf9953d090D6Eb5fC8f6707e88Ea057beD08cB;

	address public immutable nftStakingContract = 0xEc94d2b09aD2b8493718D1edca6EE3c954E7F320;

	address public immutable nftAllocationContract = 0x765A3045902B164dA1a7619BEc58DE64cf7Bdfe2;

    

    //Addresses for treasuryWallet and NFT wallet

    address public treasuryWallet = 0xC44D3FB20a7fA7eff7437c1C39d34A68A2046BA7;

    address public nftWallet = 0xcCb906C2233A39aA14f60d2F836EB24492D83713;

    

    //addresses for time-locked deposits(autocompounding pools)

    address public immutable acPool1 = 0xfFB71361dD8Fc3ef0831871Ec8dd51B413ed093C;

    address public immutable acPool2 = 0x9a9AEF66624C3fa77DaACcA9B51DE307FA09bd50;

    address public immutable acPool3 = 0x1F8a5D98f1e2F10e93331D27CF22eD7985EF6a12;

    address public immutable acPool4 = 0x30019481FC501aFa449781ac671103Feb0d6363C;

    address public immutable acPool5 = 0x8c96105ea574727e94d9C199c632128f1cA584cF;

    address public immutable acPool6 = 0x605c5AA14BdBf0d50a99836e7909C631cf3C8d46;

        

    //pool ID in the masterchef for respective Pool address and dummy token

    uint256 public immutable acPool1ID = 2;

    uint256 public immutable acPool2ID = 3;

    uint256 public immutable acPool3ID = 4;

    uint256 public immutable acPool4ID = 5;

    uint256 public immutable acPool5ID = 6;

    uint256 public immutable acPool6ID = 7;

	

	uint256 public immutable nftStakingPoolID = 10;



    uint256 public immutable innitTimestamp;

    

    mapping(address => uint256) private _rollBonus;

	

	mapping(address => address[]) public signaturesConfirmed; //for multi-sig

	mapping(address => mapping(address => bool)) public alreadySigned; //alreadySigned[owner][newGovernor]

	

	uint256 public newGovernorBlockDelay = 189000; //in blocks (roughly 5 days at beginning)

    

    uint256 public costToVote = 500000 * 1e18;  // 500K coins. All proposals are valid unless rejected. This is a minimum to prevent spam

    uint256 public delayBeforeEnforce = 3 days; //minimum number of TIME between when proposal is initiated and executed



    uint256 public maximumVoteTokens; // maximum tokens that can be voted with to prevent tyrany

    

    //fibonaccening event can be scheduled once minimum threshold of tokens have been collected

    uint256 public thresholdFibonaccening = 10000000000 * 1e18; //10B coins

    

    //delays for Fibonnaccening Events

    uint256 public immutable minDelay = 1 days; // has to be called minimum 1 day in advance

    uint256 public immutable maxDelay = 31 days; //1month.. is that good? i think yes

    

    uint256 public lastRegularReward = 33333000000000000000000; //remembers the last reward used(outside of boost)

    bool public eventFibonacceningActive; // prevent some functions if event is active ..threshold and durations for fibonaccening

    

    uint256 public blocksPerSecond = 434783; // divide by a million

    uint256 public durationForCalculation= 12 hours; //period used to calculate block time

    uint256  public lastBlockHeight; //block number when counting is activated

    uint256 public recordTimeStart; //timestamp when counting is activated

    bool public countingBlocks;



	bool public isInflationStatic; // if static, inflation stays perpetually at 1.618% annually. If dynamic, it reduces by 1.618% on each reward boost

    uint256  public totalFibonacciEventsAfterGrand; //used for rebalancing inflation after Grand Fib

    

    uint256 public newGovernorRequestBlock;

    address public eligibleNewGovernor; //used for changing smart contract

    bool public changeGovernorActivated;



	bool public fibonacciDelayed; //used to delay fibonaccening events through vote

	

	uint256 public lastHarvestedTime;



    bool public initializedUpdates;

    bool public initializedBuyback;



    event SetInflation(uint256 rewardPerBlock);

    event TransferOwner(address newOwner, uint256 timestamp);

    event EnforceGovernor(address _newGovernor, address indexed enforcer);

    event GiveRolloverBonus(address recipient, uint256 amount, address poolInto);

	event Harvest(address indexed sender, uint256 callFee);

	event Multisig(address signer, address newGovernor, bool sign, uint256 idToVoteFor);

    

    constructor(

		address _acPool1,

		address _acPool2,

		address _acPool3,

		address _acPool4,

		address _acPool5,

		address _acPool6) {

			_rollBonus[_acPool1] = 75;

			_rollBonus[_acPool2] = 100;

			_rollBonus[_acPool3] = 150;

			_rollBonus[_acPool4] = 250;

			_rollBonus[_acPool5] = 350;

			_rollBonus[_acPool6] = 500;

            innitTimestamp = block.timestamp;

    }    





    function innitializeUpdates() external {

        require(!initializedUpdates, "already updated");



        InftStaking(oldNftStakingContract).setAdmin(); // updates new governor in the old nft staking contr(act 

        InftStaking(oldNftStakingContract).stopEarning(0); // stops earnings in old nft staking contract(withdraws from chef)

        InftStaking(oldNftStakingContract).withdrawDummy(0); // withdraws from the contract to ourself

        uint256 _dummyBalance = IERC20(0xB18058232d1f945c19CC6988ccD19498F5d2853B).balanceOf(address(this)); // our dummy token balance

        IERC20(0xB18058232d1f945c19CC6988ccD19498F5d2853B).transfer(nftStakingContract, _dummyBalance); // transfers the dummy token to the new nft staking contract)

        InftStaking(nftStakingContract).startEarning(); // starts earning in the new nft staking contract (deposits to chef)

        InftStaking(nftStakingContract).setAdmin(); // updates admin in new staking contract



        InftAllocation(nftAllocationContract).setAllocationContract(0x717AFa6fe5A9857d0246bEa28730Ab482aE88379, true); // sets allocation contract



        initializedUpdates = true;

    }



    // withdraws MATIC from treasury into buyback contract

    function initTreasuryWithdraw() external {

        require(!initializedBuyback, "already executed");

        address buyBackAndBurn = 0xA2e4728c89D6dCFc93dF4b2b438E49da823Fe181;

        IXVMCtreasury(treasuryWallet).requestWithdraw(address(0), buyBackAndBurn, treasuryWallet.balance);



        initializedBuyback = true;

    }



    

    /**

     * Updates circulating supply and maximum vote token variables

     */

    function updateMaximumVotetokens() external {

        maximumVoteTokens = getTotalSupply() / 10000;

    }

    



    /**

     * Calculates average block time

     * No decimals so we keep track of "100blocks" per second

	 * It will be used in the future to keep inflation static, while block production can be dynamic

	 * (bitcoin adjusts to 1 block per 10minutes, XVMC inflation is dependant on the production of blocks on Polygon which can vary)

     */

    function startCountingBlocks() external {

        require(!countingBlocks, "already counting blocks");

        countingBlocks = true;

        lastBlockHeight = block.number;

        recordTimeStart = block.timestamp;

    } 

    function calculateAverageBlockTime() external {

        require(countingBlocks && (recordTimeStart + durationForCalculation) <= block.timestamp);

        blocksPerSecond = 1000000 * (block.number - lastBlockHeight) / (block.timestamp - recordTimeStart);

        countingBlocks = false;

    }

    

    function getRollBonus(address _bonusForPool) external view returns (uint256) {

        return _rollBonus[_bonusForPool];

    }

    

    /**

     * Return total(circulating) supply.

     * Total supply = total supply of XVMC token(new) + (total supply of oldToken - supply of old token inside contract of new token) * 1000

	 * New XVMC token = 1000 * old token (can be swapped inside the token contract, contract holds old tokens)

	 * Old XVMC tokens held inside the contract of token are basically tokens that have been swapped to new token at a ratio of (1:1000)

    */

    function getTotalSupply() public view returns(uint256) {

        return (IERC20(token).totalSupply() +

					1000 * (IERC20(oldToken).totalSupply() - IERC20(oldToken).balanceOf(token)));

    }

    

    /**

     * Mass equivalent to massUpdatePools in masterchef, but only for relevant pools

    */

    function updateAllPools() external {

        IMasterChef(masterchef).updatePool(0); // XVMC-USDC and XVMC-wmatic

    	IMasterChef(masterchef).updatePool(1); 

    	IMasterChef(masterchef).updatePool(8); //meme pool 8,9

    	IMasterChef(masterchef).updatePool(9);

		IMasterChef(masterchef).updatePool(10); // NFT staking

        IMasterChef(masterchef).updatePool(acPool1ID);

    	IMasterChef(masterchef).updatePool(acPool2ID); 

    	IMasterChef(masterchef).updatePool(acPool3ID); 

    	IMasterChef(masterchef).updatePool(acPool4ID); 

    	IMasterChef(masterchef).updatePool(acPool5ID); 

    	IMasterChef(masterchef).updatePool(acPool6ID); 

    }

    

     /**

     * Rebalances farms in masterchef

     */

    function rebalanceFarms() external {

    	IMasterChef(masterchef).updatePool(0);

    	IMasterChef(masterchef).updatePool(1); 

    }

   

     /**

     * Rebalances Pools and allocates rewards in masterchef

     * Pools with higher time-lock must always pay higher rewards in relative terms

     * Eg. for 1XVMC staked in the pool 6, you should always be receiving

     * 50% more rewards compared to staking in pool 4

     * 

     * QUESTION: should we create a modifier to prevent rebalancing during inflation events?

     * Longer pools compound on their interests and earn much faster?

     * On the other hand it could also be an incentive to hop to pools with longer lockup

	 * Could also make it changeable through voting

     */

    function rebalancePools() public {

	    uint256 balancePool1 = IERC20(token).balanceOf(acPool1);

    	uint256 balancePool2 = IERC20(token).balanceOf(acPool2);

    	uint256 balancePool3 = IERC20(token).balanceOf(acPool3);

    	uint256 balancePool4 = IERC20(token).balanceOf(acPool4);

    	uint256 balancePool5 = IERC20(token).balanceOf(acPool5);

    	uint256 balancePool6 = IERC20(token).balanceOf(acPool6);

		

    	IMasterChef(masterchef).set(acPool1ID, (balancePool1 * 2 / 1e26), 0, false);

    	IMasterChef(masterchef).set(acPool2ID, (balancePool2 * 3 / 1e26), 0, false);

    	IMasterChef(masterchef).set(acPool3ID, (balancePool3 * 5 / 1e26), 0, false);

    	IMasterChef(masterchef).set(acPool4ID, (balancePool4 * 10 / 1e26), 0, false);

    	IMasterChef(masterchef).set(acPool5ID, (balancePool5 * 13 / 1e26), 0, false);

    	IMasterChef(masterchef).set(acPool6ID, (balancePool6 * 15 / 1e26), 0, false); 

    	

    	//equivalent to massUpdatePools() in masterchef, but we loop just through relevant pools

    	IMasterChef(masterchef).updatePool(acPool1ID);

    	IMasterChef(masterchef).updatePool(acPool2ID); 

    	IMasterChef(masterchef).updatePool(acPool3ID); 

    	IMasterChef(masterchef).updatePool(acPool4ID); 

    	IMasterChef(masterchef).updatePool(acPool5ID); 

    	IMasterChef(masterchef).updatePool(acPool6ID); 

    }

	

	function harvestAll() public {

		IacPool(acPool1).harvest();

		IacPool(acPool2).harvest();

		IacPool(acPool3).harvest();

		IacPool(acPool4).harvest();

		IacPool(acPool5).harvest();

		IacPool(acPool6).harvest();

	}



    /**

     * Harvests from all pools and rebalances rewards

     */

    function harvest() external {

        require(msg.sender == tx.origin, "no proxy/contracts");



        uint256 totalFee = pendingHarvestRewards();



		harvestAll();

        rebalancePools();

		

		lastHarvestedTime = block.timestamp;

	

		IERC20(token).safeTransfer(msg.sender, totalFee);



		emit Harvest(msg.sender, totalFee);

    }

	

	function pendingHarvestRewards() public view returns (uint256) {

		uint256 totalRewards = IacPool(acPool1).calculateHarvestXVMCRewards() + IacPool(acPool2).calculateHarvestXVMCRewards() + IacPool(acPool3).calculateHarvestXVMCRewards() +

        					IacPool(acPool4).calculateHarvestXVMCRewards() + IacPool(acPool5).calculateHarvestXVMCRewards() + IacPool(acPool6).calculateHarvestXVMCRewards();

		return totalRewards;

	}

    

    /**

     * Mechanism, where the governor gives the bonus 

     * to user for extending(re-commiting) their stake

     * tldr; sends the gift deposit, which resets the timer

     * the pool is responsible for calculating the bonus

     */

    function stakeRolloverBonus(address _toAddress, address _depositToPool, uint256 _bonusToPay, uint256 _stakeID) external {

        require(

            msg.sender == acPool1 || msg.sender == acPool2 || msg.sender == acPool3 ||

            msg.sender == acPool4 || msg.sender == acPool5 || msg.sender == acPool6);

        

        IacPool(_depositToPool).addAndExtendStake(_toAddress, _bonusToPay, _stakeID, 0);

        

        emit GiveRolloverBonus(_toAddress, _bonusToPay, _depositToPool);

    }



    /**

     * Sets inflation in Masterchef

     */

    function setInflation(uint256 rewardPerBlock) external {

        require(msg.sender == fibonacceningContract);

    	IMasterChef(masterchef).updateEmissionRate(rewardPerBlock);



        emit SetInflation(rewardPerBlock);

    }

	

	function rememberReward() external {

		require(msg.sender == fibonacceningContract);

		lastRegularReward = IMasterChef(masterchef).XVMCPerBlock();

	}

    

    

    function enforceGovernor() external {

        require(msg.sender == consensusContract);

		require(newGovernorRequestBlock + newGovernorBlockDelay < block.number, "time delay not yet passed");



		IMasterChef(masterchef).setFeeAddress(eligibleNewGovernor);

        IMasterChef(masterchef).dev(eligibleNewGovernor);

        IMasterChef(masterchef).transferOwnership(eligibleNewGovernor); //transfer masterchef ownership

		

		IERC20(token).safeTransfer(eligibleNewGovernor, IERC20(token).balanceOf(address(this))); // send collected XVMC tokens to new governor

        

		emit EnforceGovernor(eligibleNewGovernor, msg.sender);

    }

	

    function setNewGovernor(address beneficiary) external {

        require(msg.sender == consensusContract);

        newGovernorRequestBlock = block.number;

        eligibleNewGovernor = beneficiary;

        changeGovernorActivated = true;

    }

	

	function governorRejected() external {

		require(changeGovernorActivated, "not active");

		

		(bool _govInvalidated, ) = IConsensus(consensusContract).isGovInvalidated(eligibleNewGovernor);

		if(_govInvalidated) {

			changeGovernorActivated = false;

		}

	}



	function treasuryRequest(address _tokenAddr, address _recipient, uint256 _amountToSend) external {

		require(msg.sender == consensusContract);

		IXVMCtreasury(treasuryWallet).requestWithdraw(

			_tokenAddr, _recipient, _amountToSend

		);

	}

	

	function updateDurationForCalculation(uint256 _newDuration) external {

	    require(msg.sender == basicContract);

	    durationForCalculation = _newDuration;

	}

	

	function delayFibonacci(bool _arg) external {

	    require(msg.sender == consensusContract);

	    fibonacciDelayed = _arg;

	}

	

	function setActivateFibonaccening(bool _arg) external {

		require(msg.sender == fibonacceningContract);

		eventFibonacceningActive = _arg;

	}



	function setPool(uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, bool _withUpdate) external {

	    require(msg.sender == farmContract);

	    IMasterChef(masterchef).set(_pid, _allocPoint, _depositFeeBP, _withUpdate);

	}

	

	function setThresholdFibonaccening(uint256 newThreshold) external {

	    require(msg.sender == basicContract);

	    thresholdFibonaccening = newThreshold;

	}

	

	function updateDelayBeforeEnforce(uint256 newDelay) external {

	    require(msg.sender == basicContract);

	    delayBeforeEnforce = newDelay;

	}

	

	function setCallFee(address _acPool, uint256 _newCallFee) external {

	    require(msg.sender == basicContract);

	    IacPool(_acPool).setCallFee(_newCallFee);

	}

	

	function updateCostToVote(uint256 newCostToVote) external {

	    require(msg.sender == basicContract);

	    costToVote = newCostToVote;

	}

	

	function updateRolloverBonus(address _forPool, uint256 _bonus) external {

	    require(msg.sender == basicContract);

		require(_bonus <= 1500, "15% hard limit");

	    _rollBonus[_forPool] = _bonus;

	}

	

	function burnFromOldChef(uint256 _amount) external {

		require(msg.sender == farmContract || msg.sender == fibonacceningContract);

		IOldChef(oldChefOwner).burnTokens(_amount);

	}

	

	function setGovernorTax(uint256 _amount) external {

		require(msg.sender == farmContract);

		IMasterChef(masterchef).setGovernorFee(_amount);

	}

	

	function postGrandFibIncreaseCount() external {

		require(msg.sender == fibonacceningContract);

		totalFibonacciEventsAfterGrand++;

	}

	

	function updateDelayBetweenEvents(uint256 _amount) external {

	    require(msg.sender == basicContract);

		IRewardBoost(fibonacceningContract).updateDelayBetweenEvents(_amount);

	}

	function updateGrandEventLength(uint256 _amount) external {

	    require(msg.sender == basicContract);

		IRewardBoost(fibonacceningContract).updateGrandEventLength(_amount);

	}

	    

	

    /**

     * Transfers collected fees into treasury wallet(but not XVMC...for now)

     */

    function transferCollectedFees(address _tokenContract) external {

        require(msg.sender == tx.origin);

		require(_tokenContract != token, "not XVMC!");

		

        uint256 amount = IERC20(_tokenContract).balanceOf(address(this));

        

        IERC20(_tokenContract).safeTransfer(treasuryWallet, amount);

    }

	

	

	/*

	 * newGovernorBlockDelay is the delay during which the governor proposal can be voted against

	 * As the time passes, changes should take longer to enforce(greater security)

	 * Prioritize speed and efficiency at launch. Prioritize security once established

	 * Delay increases by 2500 blocks(roughly 1.6hours) per each day after launch

	 * Delay starts at 189000 blocks(roughly 5 days)

	 * After a month, delay will be roughly 7 days (increases 2days/month)

	 * After a year, 29 days. After 2 years, 53 days,...

	 * Can be ofcourse changed by replacing governor contract

	 */

	function updateGovernorChangeDelay() external {

		newGovernorBlockDelay = 189000 + (((block.timestamp - innitTimestamp) / 86400) * 2500);

	}



    

    /**

     * The weak point, Polygon-ETH bridge is secured by a 5/8 multisig.

	 * Can change governing contract thru a multisig(without consensus) and 42% of weighted votes voting in favor

	 * https://docs.polygon.technology/docs/faq/commit-chain-multisigs/

     */

    function multiSigGovernorChange(address _newGovernor) external {

		uint _signatureCount = 0;

		uint _ownersLength = signaturesConfirmed[_newGovernor].length;

		require(_ownersLength >= 5, "minimum 5 signatures required");

		for(uint i=0; i< _ownersLength; i++) {//owners can change, must check if still active

			if(IPolygonMultisig(polygonMultisig).isOwner(signaturesConfirmed[_newGovernor][i])) {

				_signatureCount++;

			}

		}

        require(_signatureCount >= 5, "Minimum 5/8 signatures required");

		

		uint256 _totalStaked = IConsensus(consensusContract).totalXVMCStaked();

		uint256 _totalVotedInFavor = IConsensus(consensusContract).tokensCastedPerVote(uint256(uint160(_newGovernor)));

		

		require(_totalVotedInFavor >= (_totalStaked * 42 / 100), "Minimum 42% weighted vote required");

        

        IMasterChef(masterchef).setFeeAddress(_newGovernor);

        IMasterChef(masterchef).dev(_newGovernor);

        IMasterChef(masterchef).transferOwnership(_newGovernor);

		IERC20(token).safeTransfer(_newGovernor, IERC20(token).balanceOf(address(this)));

    }



	function signMultisig(address _newGovernor) external {

		bool _isOwner = IPolygonMultisig(polygonMultisig).isOwner(msg.sender);

		require(_isOwner, "Signer is not multisig owner");

		

		require(!alreadySigned[msg.sender][_newGovernor], "already signed");

		alreadySigned[msg.sender][_newGovernor] = true;

		signaturesConfirmed[_newGovernor].push(msg.sender); //adds vote

		

		emit Multisig(msg.sender, _newGovernor, true, uint256(uint160(_newGovernor)));

	}

	

	function unSignMultisig(address _newGovernor) external {

		require(alreadySigned[msg.sender][_newGovernor], "not signed");

		uint256 _lastIndex = signaturesConfirmed[_newGovernor].length - 1;

		uint256 _index;

		while(signaturesConfirmed[_newGovernor][_index] != msg.sender) {

			_index++;

		}

		alreadySigned[msg.sender][_newGovernor] = false;

		if(_index != _lastIndex) {

			signaturesConfirmed[_newGovernor][_index] = signaturesConfirmed[_newGovernor][_lastIndex];

		} 

		signaturesConfirmed[_newGovernor].pop();

		

		emit Multisig(msg.sender, _newGovernor, false, uint256(uint160(_newGovernor)));

	}

	

	function addressToUint256(address _address) external pure returns(uint256) {

		return(uint256(uint160(_address)));

	}

    

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_acPool1","type":"address"},{"internalType":"address","name":"_acPool2","type":"address"},{"internalType":"address","name":"_acPool3","type":"address"},{"internalType":"address","name":"_acPool4","type":"address"},{"internalType":"address","name":"_acPool5","type":"address"},{"internalType":"address","name":"_acPool6","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"}],"name":"EnforceGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"poolInto","type":"address"}],"name":"GiveRolloverBonus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"callFee","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"},{"indexed":false,"internalType":"address","name":"newGovernor","type":"address"},{"indexed":false,"internalType":"bool","name":"sign","type":"bool"},{"indexed":false,"internalType":"uint256","name":"idToVoteFor","type":"uint256"}],"name":"Multisig","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewardPerBlock","type":"uint256"}],"name":"SetInflation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TransferOwner","type":"event"},{"inputs":[],"name":"acPool1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool1ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool2ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool3ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool4ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool5","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool5ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool6","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool6ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addressToUint256","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"alreadySigned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basicContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnFromOldChef","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"calculateAverageBlockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeGovernorActivated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"consensusContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"costToVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"countingBlocks","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayBeforeEnforce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_arg","type":"bool"}],"name":"delayFibonacci","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"durationForCalculation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eligibleNewGovernor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enforceGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eventFibonacceningActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fibonacceningContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fibonacciDelayed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_bonusForPool","type":"address"}],"name":"getRollBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldenRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governorRejected","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvestAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initTreasuryWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initializedBuyback","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initializedUpdates","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"innitTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"innitializeUpdates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isInflationStatic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastHarvestedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRegularReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumVoteTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"multiSigGovernorChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"newGovernorBlockDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newGovernorRequestBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftAllocationContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftStakingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftStakingPoolID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldChefOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldNftStakingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingHarvestRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"polygonMultisig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"postGrandFibIncreaseCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebalanceFarms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebalancePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recordTimeStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rememberReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_arg","type":"bool"}],"name":"setActivateFibonaccening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_acPool","type":"address"},{"internalType":"uint256","name":"_newCallFee","type":"uint256"}],"name":"setCallFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setGovernorTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardPerBlock","type":"uint256"}],"name":"setInflation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"setNewGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"setThresholdFibonaccening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"signMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"signaturesConfirmed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"address","name":"_depositToPool","type":"address"},{"internalType":"uint256","name":"_bonusToPay","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"stakeRolloverBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startCountingBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"thresholdFibonaccening","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFibonacciEventsAfterGrand","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"transferCollectedFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amountToSend","type":"uint256"}],"name":"treasuryRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"unSignMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateAllPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCostToVote","type":"uint256"}],"name":"updateCostToVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDelay","type":"uint256"}],"name":"updateDelayBeforeEnforce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateDelayBetweenEvents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDuration","type":"uint256"}],"name":"updateDurationForCalculation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateGovernorChangeDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateGrandEventLength","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateMaximumVotetokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_forPool","type":"address"},{"internalType":"uint256","name":"_bonus","type":"uint256"}],"name":"updateRolloverBonus","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6104206040526106526080527f6d0c966c8a09e354df9c48b446a474ce3343d91200000000000000000000000060a0527f970ccee657dd831e9c37511aa3eb5302c1eb5eee00000000000000000000000060c0527f6ff40a8a1fe16075bd6008a48befb768be08b4b000000000000000000000000060e0527f27771bb243c37b35091b0a1e8b69c816249c2e71000000000000000000000000610100527f355b8e02e7f5301e6fac9b7cac1d6d9c86c0343f000000000000000000000000610120527fddd4982e3e9e5c5c489321d2143b8a027f535112000000000000000000000000610140527fdf47e7a036a6a85f92898176b5a8b4b4b9fbf25a000000000000000000000000610160527fff5a8072565726a055690bd14924022de020623a000000000000000000000000610180527febd2e542f593d8e03543661bcc70ad2474e6dbad0000000000000000000000006101a0527fd7bf9953d090d6eb5fc8f6707e88ea057bed08cb0000000000000000000000006101c0527fec94d2b09ad2b8493718d1edca6ee3c954e7f3200000000000000000000000006101e0527f765a3045902b164da1a7619bec58de64cf7bdfe200000000000000000000000061020052600080546001600160a01b031990811673c44d3fb20a7fa7eff7437c1c39d34a68a2046ba7179091556001805490911673ccb906c2233a39aa14f60d2f836eb24492d837131790557fffb71361dd8fc3ef0831871ec8dd51b413ed093c000000000000000000000000610220527f9a9aef66624c3fa77daacca9b51de307fa09bd50000000000000000000000000610240527f1f8a5d98f1e2f10e93331d27cf22ed7985ef6a12000000000000000000000000610260527f30019481fc501afa449781ac671103feb0d6363c000000000000000000000000610280527f8c96105ea574727e94d9c199c632128f1ca584cf0000000000000000000000006102a0527f605c5aa14bdbf0d50a99836e7909c631cf3c8d460000000000000000000000006102c05260026102e052600361030052600461032052600561034081905260066103608190526007610380819052600a6103a08190526202e2489093556969e10de76676d08000009091556203f48090556b204fce5e3e25026110000000600955620151806103e0526228de806104005269070efc4d0e326fb4000090556206a25f600c5561a8c0600d553480156200037e57600080fd5b5060405162005da038038062005da0833981016040819052620003a19162000423565b6001600160a01b03958616600090815260026020526040808220604b9055958716815285812060649055938616845284842060969055918516835283832060fa90558416825282822061015e9055909216825290206101f49055426103c052620004a3565b80516001600160a01b03811681146200041e57600080fd5b919050565b60008060008060008060c087890312156200043c578182fd5b620004478762000406565b9550620004576020880162000406565b9450620004676040880162000406565b9350620004776060880162000406565b9250620004876080880162000406565b91506200049760a0880162000406565b90509295509295509295565b60805160a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c6101e05160601c6102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c05160601c6102e05161030051610320516103405161036051610380516103a0516103c0516103e051610400516153fa620009a6600039600061448d01526000612e3401526000818161259a01526144f9015260006109fb0152600081816113af01528181612bbc01528181613e5901526142490152600081816123dc01528181612b1e01528181613d9201526141ab0152600081816123b801528181612a8001528181613ccb015261410d0152600081816112bf015281816129e201528181613c04015261406f01526000818161095f0152818161294401528181613b3d0152613fd101526000818161236a015281816128a601528181613a780152613f330152600081816109830152818161222c015281816139ba015281816143b401526145440152600081816121b9015281816138fa015281816143810152818161451d01526145d501526000818161175e015281816121460152818161383a0152818161434e01526146660152600081816120d3015281816125450152818161377a0152818161431b01526146f701526000818161113101528181612060015281816136ba015281816142e8015261478801526000818161115e01528181611fed0152818161360d015281816142b60152614819015260008181610e260152612c0a015260008181610cae01528181610d2d01528181610da0015261110d015260008181610a8301528181610b0901528181610b8801526122c501526000818161118b0152818161178b015281816117c5015281816117ff01528181611e03015281816122f2015281816125050152818161346501526148e201526000818161184001528181611b1101528181611e860152818161233301528181612be6015281816133d7015281816134e401526144ba015260008181611c170152818161238e0152818161332401526133a5015260008181610ec1015281816110ad01528181611222015281816113e201528181611d4b015281816122a101528181612fdf01526130740152600081816109d701528181610f230152612e9d01526000818161341901526134b7015260008181611454015281816114d70152818161155901528181611b3d01528181611c5801528181612425015281816124a2015281816125fe0152818161267b015281816126fa01528181612779015281816127f80152818161287701528181612915015281816129b301528181612a5101528181612aef01528181612b8d01528181613166015281816131e201528181613260015281816133650152818161352501528181613a5101528181613b0e01528181613bd501528181613c9c01528181613d6301528181613e2a01528181613f0401528181613fa201528181614040015281816140de0152818161417c0152818161421a015261490f01526000818161133c015281816115e50152818161167601528181611ef501528181612c7301528181612d94015281816132cf015281816135e00152818161368b0152818161374b0152818161380b015281816138cb0152818161398b015261493301526000818161256901528181612c460152612ced01526000611bea01526153fa6000f3fe608060405234801561001057600080fd5b506004361061051a5760003560e01c80638a22abb1116102a4578063c63c4e9b11610172578063e5f59bc1116100d9578063f700760811610092578063f700760814610924578063f7bd54f71461092c578063f95a42e914610934578063fb1db2781461093c578063fc0c546a14610944578063fedd1abe1461094c5761051a565b8063e5f59bc1146108de578063e9a4e6ba146108f1578063ed49d2f8146108f9578063f0929fc814610901578063f2f2bb6d14610914578063f2fa0bb01461091c5761051a565b8063dc73559e1161012b578063dc73559e1461088d578063dda1dccd146108a0578063ded6e1c9146108a8578063e0676b01146108bb578063e0a8ed52146108c3578063e0e01a61146108d65761051a565b8063c63c4e9b1461083c578063c710303614610844578063d06482e514610857578063d28708641461086a578063d3b7c5111461087d578063d487bc24146108855761051a565b8063abc090d411610216578063b60f0531116101cf578063b60f05311461080c578063b61841e114610814578063b9ec7d741461081c578063bb20d1e114610824578063c4c57bad1461082c578063c4e41b22146108345761051a565b8063abc090d4146107d1578063ae885352146107d9578063aec92998146107e1578063b1e37008146107f4578063b2922ec4146107fc578063b31c710a146108045761051a565b80639d2252bc116102685780639d2252bc146107a15780639eb0e965146107a9578063a569e896146107b1578063a7708fb3146107b9578063a83a33dd146107c1578063aaf5ab8d146107c95761051a565b80638a22abb11461076e5780638ed955b914610776578063931cc2d41461077e5780639464ad22146107865780639bc643a41461078e5761051a565b80634ed3dded116103ec5780636a0ab9a91161035357806373d95bc51161030c57806373d95bc51461071d578063758fb955146107305780637668702a1461074357806376b4c85c1461074b5780637943ac0b14610753578063879010f41461075b5761051a565b80636a0ab9a9146106e25780636ce57221146106ea5780636d557c2e146106f25780636ea9e374146107055780636f3d35421461070d5780636fb88db9146107155761051a565b8063615cef7d116103a5578063615cef7d146106865780636355a2bb14610699578063640ba48d146106ac57806364b8cf3d146106bf578063655ea8eb146106d257806366813f63146106da5761051a565b80634ed3dded1461065657806351a41dec1461065e5780635553c956146106665780635a4972e61461066e5780635d8ee0b9146106765780635ec232f11461067e5761051a565b806324955846116104905780632d72b864116104495780632d72b8641461061b57806334733cc91461062e5780633ab3feb2146106365780634626402b1461063e5780634641257d146106465780634b60ae631461064e5761051a565b806324955846146105d557806328382258146105e8578063296d77fb146105f05780632a5626f2146105f85780632a9f51d7146106005780632b976cf6146106085761051a565b80631cc9841f116104e25780631cc9841f146105825780631cde0e4b1461058a5780631ecff830146105925780631ed03472146105a55780632254ea33146105af57806323572fc9146105c25761051a565b806306cad67c1461051f5780630919475d1461053d578063092b4a3e14610552578063129ebc4b14610567578063136e89231461056f575b600080fd5b610527610954565b6040516105349190614f2d565b60405180910390f35b61054561095d565b6040516105349190614f38565b61055a610981565b6040516105349190614e4d565b6105276109a5565b61052761057d366004614c6a565b6109b5565b61055a6109d5565b6105456109f9565b61055a6105a0366004614d18565b610a1d565b6105ad610a55565b005b6105ad6105bd366004614d41565b610eb6565b6105ad6105d0366004614c50565b610f09565b6105ad6105e3366004614c50565b6110a2565b61055a61110b565b61055a61112f565b610527611153565b61055a61115c565b6105ad610616366004614d18565b611180565b6105ad610629366004614c9c565b611217565b6105456112b7565b6105456112bd565b61055a6112e1565b6105ad6112f0565b6105456113a7565b6105456113ad565b6105456113d1565b6105ad6113d7565b6105276116e4565b6105ad6116f2565b61055a61175c565b6105ad610694366004614db2565b611780565b6105ad6106a7366004614db2565b6117ba565b6105ad6106ba366004614db2565b6117f4565b6105ad6106cd366004614c50565b6118aa565b6105ad611b06565b61055a611bd3565b610545611be2565b610545611be8565b6105ad610700366004614de2565b611c0c565b6105ad611ccb565b6105ad611d05565b610527611dea565b6105ad61072b366004614d18565b611df8565b61054561073e366004614c50565b611e6b565b6105ad611e7b565b610545611ec7565b6105ad611ecd565b6105ad610769366004614c50565b611ee7565b610545611fe5565b6105ad611feb565b61055a61229f565b61055a6122c3565b6105ad61079c366004614db2565b6122e7565b610545612368565b61055a61238c565b6105456123b0565b6105456123b6565b6105456123da565b6105276123fe565b6105ad61240e565b6105456124f4565b6105ad6107ef366004614db2565b6124fa565b61055a612534565b61055a612543565b61055a612567565b61054561258b565b6105ad612591565b6105ad6125e7565b61055a612be4565b61055a612c08565b610545612c2c565b610545612e32565b6105ad610852366004614c50565b612e56565b6105ad610865366004614db2565b613319565b6105ad610878366004614db2565b61339a565b61054561344e565b610545613454565b6105ad61089b366004614db2565b61345a565b610545613494565b6105456108b6366004614c50565b61349a565b61055a6134b5565b6105ad6108d1366004614db2565b6134d9565b6105ad6135c6565b6105ad6108ec366004614cd7565b6142ab565b610545614485565b61054561448b565b6105ad61090f366004614d41565b6144af565b6105456144f7565b61055a61451b565b61054561453f565b61055a6148e0565b610527614904565b61055a61490d565b61055a614931565b6105ad614955565b60155460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b601354600160a81b900460ff1681565b600460209081526000928352604080842090915290825290205460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020528160005260406000208181548110610a3957600080fd5b6000918252602090912001546001600160a01b03169150829050565b60155460ff1615610a815760405162461bcd60e51b8152600401610a7890615110565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632cae20966040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610adc57600080fd5b505af1158015610af0573d6000803e3d6000fd5b5050604051631facfc2160e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250637eb3f0849150610b4190600090600401614f38565b600060405180830381600087803b158015610b5b57600080fd5b505af1158015610b6f573d6000803e3d6000fd5b505060405163159ad8cd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063159ad8cd9150610bc090600090600401614f38565b600060405180830381600087803b158015610bda57600080fd5b505af1158015610bee573d6000803e3d6000fd5b50506040516370a0823160e01b81526000925073b18058232d1f945c19cc6988ccd19498f5d2853b91506370a0823190610c2c903090600401614e4d565b60206040518083038186803b158015610c4457600080fd5b505afa158015610c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7c9190614dca565b60405163a9059cbb60e01b815290915073b18058232d1f945c19cc6988ccd19498f5d2853b9063a9059cbb90610cd8907f0000000000000000000000000000000000000000000000000000000000000000908590600401614ecb565b602060405180830381600087803b158015610cf257600080fd5b505af1158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a9190614d5d565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a36e40fc6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610d8657600080fd5b505af1158015610d9a573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632cae20966040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610df957600080fd5b505af1158015610e0d573d6000803e3d6000fd5b50506040516315371f7d60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506354dc7df49150610e749073717afa6fe5a9857d0246bea28730ab482ae8837990600190600401614eb0565b600060405180830381600087803b158015610e8e57600080fd5b505af1158015610ea2573d6000803e3d6000fd5b50506015805460ff19166001179055505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610eeb57600080fd5b60138054911515600160a81b0260ff60a81b19909216919091179055565b6040516317aa5fb760e11b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632f54bf6e90610f58903390600401614e4d565b60206040518083038186803b158015610f7057600080fd5b505afa158015610f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa89190614d5d565b905080610fc75760405162461bcd60e51b8152600401610a789061504c565b3360009081526004602090815260408083206001600160a01b038616845290915290205460ff161561100b5760405162461bcd60e51b8152600401610a7890615139565b3360008181526004602090815260408083206001600160a01b038716808552908352818420805460ff1916600190811790915560038452828520805480830182559086529390942090920180546001600160a01b03191685179055517fe33d821ee0252a5c507075137daf759d5ec3bab8afacd3bfc12c76716926312c936110969390928792614e61565b60405180910390a15050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110d757600080fd5b436012556013805460ff60a01b196001600160a01b039093166001600160a01b03199091161791909116600160a01b179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111b557600080fd5b6040516313232c1360e11b81526001600160a01b038316906326465826906111e1908490600401614f38565b600060405180830381600087803b1580156111fb57600080fd5b505af115801561120f573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461124c57600080fd5b60005460405163d7b7142360e01b81526001600160a01b039091169063d7b714239061128090869086908690600401614e8c565b600060405180830381600087803b15801561129a57600080fd5b505af11580156112ae573d6000803e3d6000fd5b50505050505050565b60075481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031681565b33321461130f5760405162461bcd60e51b8152600401610a78906150ad565b600061131961453f565b9050611323611feb565b61132b6135c6565b426014556113636001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383614a0c565b336001600160a01b03167fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba8260405161139c9190614f38565b60405180910390a250565b600e5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60065481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461140c57600080fd5b4360055460125461141d91906152eb565b1061143a5760405162461bcd60e51b8152600401610a78906150d9565b6013546040516321c17f3560e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692638705fcd49261148d929190911690600401614e4d565b600060405180830381600087803b1580156114a757600080fd5b505af11580156114bb573d6000803e3d6000fd5b50506013546040516346c4548760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169450638d88a90e935061150f921690600401614e4d565b600060405180830381600087803b15801561152957600080fd5b505af115801561153d573d6000803e3d6000fd5b505060135460405163f2fde38b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116945063f2fde38b9350611591921690600401614e4d565b600060405180830381600087803b1580156115ab57600080fd5b505af11580156115bf573d6000803e3d6000fd5b50506013546040516370a0823160e01b815261169d93506001600160a01b0391821692507f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319061161c903090600401614e4d565b60206040518083038186803b15801561163457600080fd5b505afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c9190614dca565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190614a0c565b60135460405133917f5296de069a121d7d0bc5ab079d0b2aaad96d23909ae242cabb658a592247ce62916116da916001600160a01b031690614e4d565b60405180910390a2565b601054610100900460ff1681565b60105460ff168015611713575042600d54600f5461171091906152eb565b11155b61171c57600080fd5b600f546117299042615342565b600e546117369043615342565b61174390620f4240615323565b61174d9190615303565b600c556010805460ff19169055565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117b557600080fd5b600755565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117ef57600080fd5b600955565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461182957600080fd5b60405163640ba48d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063640ba48d90611875908490600401614f38565b600060405180830381600087803b15801561188f57600080fd5b505af11580156118a3573d6000803e3d6000fd5b5050505050565b3360009081526004602090815260408083206001600160a01b038516845290915290205460ff166118ed5760405162461bcd60e51b8152600401610a78906151cf565b6001600160a01b03811660009081526003602052604081205461191290600190615342565b905060005b6001600160a01b038316600090815260036020526040902080543391908390811061195257634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161461197e578061197681615385565b915050611917565b3360009081526004602090815260408083206001600160a01b03871684529091529020805460ff19169055808214611a62576001600160a01b03831660009081526003602052604090208054839081106119e857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03868116845260039092526040909220805491909216919083908110611a3357634e487b7160e01b600052603260045260246000fd5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001600160a01b0383166000908152600360205260409020805480611a9757634e487b7160e01b600052603160045260246000fd5b600082815260208120820160001990810180546001600160a01b03191690559091019091556040517fe33d821ee0252a5c507075137daf759d5ec3bab8afacd3bfc12c76716926312c91611af991339187916001600160a01b03831690614e61565b60405180910390a1505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b3b57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663135d31d76040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611b9657600080fd5b505af1158015611baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bce9190614dca565b600a55565b6013546001600160a01b031681565b60125481565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c4157600080fd5b604051636cb1c21160e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d963842290611c939087908790879087906004016152ca565b600060405180830381600087803b158015611cad57600080fd5b505af1158015611cc1573d6000803e3d6000fd5b5050505050505050565b60105460ff1615611cee5760405162461bcd60e51b8152600401610a7890614fab565b6010805460ff1916600117905543600e5542600f55565b601354600160a01b900460ff16611d2e5760405162461bcd60e51b8152600401610a7890614fe2565b60135460405163050168c160e01b81526000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263050168c192611d81921690600401614e4d565b604080518083038186803b158015611d9857600080fd5b505afa158015611dac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd09190614d79565b5090508015611de7576013805460ff60a01b191690555b50565b601554610100900460ff1681565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e2d57600080fd5b6105dc811115611e4f5760405162461bcd60e51b8152600401610a78906152a2565b6001600160a01b03909116600090815260026020526040902055565b6001600160a01b0381165b919050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611eb057600080fd5b60118054906000611ec083615385565b9190505550565b60115481565b612710611ed8612c2c565b611ee29190615303565b600855565b333214611ef357600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161415611f455760405162461bcd60e51b8152600401610a78906151f3565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190611f74903090600401614e4d565b60206040518083038186803b158015611f8c57600080fd5b505afa158015611fa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc49190614dca565b600054909150611fe1906001600160a01b03848116911683614a0c565b5050565b600c5481565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561204657600080fd5b505af115801561205a573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156120b957600080fd5b505af11580156120cd573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561212c57600080fd5b505af1158015612140573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561219f57600080fd5b505af11580156121b3573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561221257600080fd5b505af1158015612226573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561228557600080fd5b505af1158015612299573d6000803e3d6000fd5b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461231c57600080fd5b6040516326f190e960e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639bc643a490611875908490600401614f38565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b601354600160a01b900460ff1681565b6040516328f582d360e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906351eb05a69061245b90600090600401614f38565b600060405180830381600087803b15801561247557600080fd5b505af1158015612489573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a691506124da90600190600401614f38565b600060405180830381600087803b15801561228557600080fd5b60095481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461252f57600080fd5b600655565b6001546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60145481565b620151806125bf7f000000000000000000000000000000000000000000000000000000000000000042615342565b6125c99190615303565b6125d5906109c4615323565b6125e2906202e2486152eb565b600555565b6040516328f582d360e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906351eb05a69061263490600090600401614f38565b600060405180830381600087803b15801561264e57600080fd5b505af1158015612662573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a691506126b390600190600401614f38565b600060405180830381600087803b1580156126cd57600080fd5b505af11580156126e1573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a6915061273290600890600401614f38565b600060405180830381600087803b15801561274c57600080fd5b505af1158015612760573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a691506127b190600990600401614f38565b600060405180830381600087803b1580156127cb57600080fd5b505af11580156127df573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a6915061283090600a90600401614f38565b600060405180830381600087803b15801561284a57600080fd5b505af115801561285e573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a691506128ce907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b1580156128e857600080fd5b505af11580156128fc573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a6915061296c907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b15801561298657600080fd5b505af115801561299a573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150612a0a907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b158015612a2457600080fd5b505af1158015612a38573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150612aa8907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b158015612ac257600080fd5b505af1158015612ad6573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150612b46907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b158015612b6057600080fd5b505af1158015612b74573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a691506124da907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190612c9b907f000000000000000000000000000000000000000000000000000000000000000090600401614e4d565b60206040518083038186803b158015612cb357600080fd5b505afa158015612cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ceb9190614dca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d4457600080fd5b505afa158015612d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7c9190614dca565b612d869190615342565b612d92906103e8615323565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612deb57600080fd5b505afa158015612dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e239190614dca565b612e2d91906152eb565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0381166000908152600360205260408120546005811015612e905760405162461bcd60e51b8152600401610a7890614f74565b60005b81811015612fb9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632f54bf6e60036000876001600160a01b03166001600160a01b031681526020019081526020016000208381548110612f0e57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516001600160e01b031960e084901b168152612f44916001600160a01b031690600401614e4d565b60206040518083038186803b158015612f5c57600080fd5b505afa158015612f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f949190614d5d565b15612fa75782612fa381615385565b9350505b80612fb181615385565b915050612e93565b506005821015612fdb5760405162461bcd60e51b8152600401610a7890615161565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166319cbe9506040518163ffffffff1660e01b815260040160206040518083038186803b15801561303657600080fd5b505afa15801561304a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306e9190614dca565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637e57e8ff866001600160a01b03166040518263ffffffff1660e01b81526004016130c79190614f38565b60206040518083038186803b1580156130df57600080fd5b505afa1580156130f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131179190614dca565b9050606461312683602a615323565b6131309190615303565b81101561314f5760405162461bcd60e51b8152600401610a7890615260565b6040516321c17f3560e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638705fcd49061319b908890600401614e4d565b600060405180830381600087803b1580156131b557600080fd5b505af11580156131c9573d6000803e3d6000fd5b50506040516346c4548760e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250638d88a90e9150613219908890600401614e4d565b600060405180830381600087803b15801561323357600080fd5b505af1158015613247573d6000803e3d6000fd5b505060405163f2fde38b60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063f2fde38b9150613297908890600401614e4d565b600060405180830381600087803b1580156132b157600080fd5b505af11580156132c5573d6000803e3d6000fd5b505050506118a3857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161161c9190614e4d565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461334e57600080fd5b60405163a3d7a33960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a3d7a33990611875908490600401614f38565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806133f95750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61340257600080fd5b604051636d1b229d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636d1b229d90611875908490600401614f38565b60055481565b600f5481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461348f57600080fd5b600d55565b600d5481565b6001600160a01b031660009081526002602052604090205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461350e57600080fd5b6040516305d4266960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630ba84cd29061355a908490600401614f38565b600060405180830381600087803b15801561357457600080fd5b505af1158015613588573d6000803e3d6000fd5b505050507fa2c906d360736c15f8fc6c4b049228f49b9f4f8dbe56808aa82f316833a055be816040516135bb9190614f38565b60405180910390a150565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190613635907f000000000000000000000000000000000000000000000000000000000000000090600401614e4d565b60206040518083038186803b15801561364d57600080fd5b505afa158015613661573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136859190614dca565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016136f59190614e4d565b60206040518083038186803b15801561370d57600080fd5b505afa158015613721573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137459190614dca565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016137b59190614e4d565b60206040518083038186803b1580156137cd57600080fd5b505afa1580156137e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138059190614dca565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016138759190614e4d565b60206040518083038186803b15801561388d57600080fd5b505afa1580156138a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c59190614dca565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016139359190614e4d565b60206040518083038186803b15801561394d57600080fd5b505afa158015613961573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139859190614dca565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016139f59190614e4d565b60206040518083038186803b158015613a0d57600080fd5b505afa158015613a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a459190614dca565b90506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e4000000613aae8a6002615323565b613ab89190615303565b6000806040518563ffffffff1660e01b8152600401613ada94939291906152ca565b600060405180830381600087803b158015613af457600080fd5b505af1158015613b08573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e4000000886003613b759190615323565b613b7f9190615303565b6000806040518563ffffffff1660e01b8152600401613ba194939291906152ca565b600060405180830381600087803b158015613bbb57600080fd5b505af1158015613bcf573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e4000000876005613c3c9190615323565b613c469190615303565b6000806040518563ffffffff1660e01b8152600401613c6894939291906152ca565b600060405180830381600087803b158015613c8257600080fd5b505af1158015613c96573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e400000086600a613d039190615323565b613d0d9190615303565b6000806040518563ffffffff1660e01b8152600401613d2f94939291906152ca565b600060405180830381600087803b158015613d4957600080fd5b505af1158015613d5d573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e400000085600d613dca9190615323565b613dd49190615303565b6000806040518563ffffffff1660e01b8152600401613df694939291906152ca565b600060405180830381600087803b158015613e1057600080fd5b505af1158015613e24573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d96384227f00000000000000000000000000000000000000000000000000000000000000006a52b7d2dcc80cd2e400000084600f613e919190615323565b613e9b9190615303565b6000806040518563ffffffff1660e01b8152600401613ebd94939291906152ca565b600060405180830381600087803b158015613ed757600080fd5b505af1158015613eeb573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150613f5b907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b158015613f7557600080fd5b505af1158015613f89573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150613ff9907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b15801561401357600080fd5b505af1158015614027573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150614097907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b1580156140b157600080fd5b505af11580156140c5573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150614135907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b15801561414f57600080fd5b505af1158015614163573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a691506141d3907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b1580156141ed57600080fd5b505af1158015614201573d6000803e3d6000fd5b50506040516328f582d360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506351eb05a69150614271907f000000000000000000000000000000000000000000000000000000000000000090600401614f38565b600060405180830381600087803b15801561428b57600080fd5b505af115801561429f573d6000803e3d6000fd5b50505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061430a5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b8061433d5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b806143705750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b806143a35750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b806143d65750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6143df57600080fd5b60405163b3f5f65560e01b81526001600160a01b0384169063b3f5f6559061441290879086908690600090600401614f07565b600060405180830381600087803b15801561442c57600080fd5b505af1158015614440573d6000803e3d6000fd5b505050507fd1e293b75a6aeb3a9ab5df2765badd46e6e7c83a001a37e4b9cadea14c81837184838560405161447793929190614ee4565b60405180910390a150505050565b60085481565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146144e457600080fd5b600b805460ff1916911515919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561459b57600080fd5b505afa1580156145af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145d39190614dca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561462c57600080fd5b505afa158015614640573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146649190614dca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b1580156146bd57600080fd5b505afa1580156146d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146f59190614dca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561474e57600080fd5b505afa158015614762573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147869190614dca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b1580156147df57600080fd5b505afa1580156147f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148179190614dca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e89bfdab6040518163ffffffff1660e01b815260040160206040518083038186803b15801561487057600080fd5b505afa158015614884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148a89190614dca565b6148b291906152eb565b6148bc91906152eb565b6148c691906152eb565b6148d091906152eb565b6148da91906152eb565b91505090565b7f000000000000000000000000000000000000000000000000000000000000000081565b60105460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b601554610100900460ff161561497d5760405162461bcd60e51b8152600401610a7890615083565b6000805460405163d7b7142360e01b815273a2e4728c89d6dcfc93df4b2b438e49da823fe181926001600160a01b039092169163d7b71423916149c891908590853190600401614e8c565b600060405180830381600087803b1580156149e257600080fd5b505af11580156149f6573d6000803e3d6000fd5b50506015805461ff001916610100179055505050565b614a628363a9059cbb60e01b8484604051602401614a2b929190614ecb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614a67565b505050565b6000614abc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614af69092919063ffffffff16565b805190915015614a625780806020019051810190614ada9190614d5d565b614a625760405162461bcd60e51b8152600401610a7890615216565b6060614b058484600085614b0f565b90505b9392505050565b606082471015614b315760405162461bcd60e51b8152600401610a7890615006565b614b3a85614bcf565b614b565760405162461bcd60e51b8152600401610a7890615198565b600080866001600160a01b03168587604051614b729190614e31565b60006040518083038185875af1925050503d8060008114614baf576040519150601f19603f3d011682016040523d82523d6000602084013e614bb4565b606091505b5091509150614bc4828286614c00565b979650505050505050565b600080826001600160a01b0316803b806020016040519081016040528181526000908060200190933c511192915050565b60608315614c0f575081614b08565b825115614c1f5782518084602001fd5b8160405162461bcd60e51b8152600401610a789190614f41565b80356001600160a01b0381168114611e7657600080fd5b600060208284031215614c61578081fd5b614b0882614c39565b60008060408385031215614c7c578081fd5b614c8583614c39565b9150614c9360208401614c39565b90509250929050565b600080600060608486031215614cb0578081fd5b614cb984614c39565b9250614cc760208501614c39565b9150604084013590509250925092565b60008060008060808587031215614cec578081fd5b614cf585614c39565b9350614d0360208601614c39565b93969395505050506040820135916060013590565b60008060408385031215614d2a578182fd5b614d3383614c39565b946020939093013593505050565b600060208284031215614d52578081fd5b8135614b08816153b6565b600060208284031215614d6e578081fd5b8151614b08816153b6565b60008060408385031215614d8b578182fd5b8251614d96816153b6565b6020840151909250614da7816153b6565b809150509250929050565b600060208284031215614dc3578081fd5b5035919050565b600060208284031215614ddb578081fd5b5051919050565b60008060008060808587031215614df7578384fd5b8435935060208501359250604085013561ffff81168114614e16578283fd5b91506060850135614e26816153b6565b939692955090935050565b60008251614e43818460208701615359565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03948516815292909316602083015215156040820152606081019190915260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b901515815260200190565b90815260200190565b6000602082528251806020840152614f60816040850160208701615359565b601f01601f19169190910160400192915050565b6020808252601d908201527f6d696e696d756d2035207369676e617475726573207265717569726564000000604082015260600190565b60208082526017908201527f616c726561647920636f756e74696e6720626c6f636b73000000000000000000604082015260600190565b6020808252600a90820152696e6f742061637469766560b01b604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252601c908201527f5369676e6572206973206e6f74206d756c7469736967206f776e657200000000604082015260600190565b60208082526010908201526f185b1c9958591e48195e1958dd5d195960821b604082015260600190565b6020808252601290820152716e6f2070726f78792f636f6e74726163747360701b604082015260600190565b60208082526019908201527f74696d652064656c6179206e6f74207965742070617373656400000000000000604082015260600190565b6020808252600f908201526e185b1c9958591e481d5c19185d1959608a1b604082015260600190565b6020808252600e908201526d185b1c9958591e481cda59db995960921b604082015260600190565b6020808252601f908201527f4d696e696d756d20352f38207369676e61747572657320726571756972656400604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252600a90820152691b9bdd081cda59db995960b21b604082015260600190565b6020808252600990820152686e6f742058564d432160b81b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526022908201527f4d696e696d756d2034322520776569676874656420766f746520726571756972604082015261195960f21b606082015260800190565b6020808252600e908201526d0c4d49481a185c99081b1a5b5a5d60921b604082015260600190565b938452602084019290925261ffff1660408301521515606082015260800190565b600082198211156152fe576152fe6153a0565b500190565b60008261531e57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561533d5761533d6153a0565b500290565b600082821015615354576153546153a0565b500390565b60005b8381101561537457818101518382015260200161535c565b838111156122995750506000910152565b6000600019821415615399576153996153a0565b5060010190565b634e487b7160e01b600052601160045260246000fd5b8015158114611de757600080fdfea2646970667358221220ea086b028ff59de9ecc8c38a51600953e9c5e097abdaa3be73623d1b3d148c9164736f6c63430008000033000000000000000000000000ffb71361dd8fc3ef0831871ec8dd51b413ed093c0000000000000000000000009a9aef66624c3fa77daacca9b51de307fa09bd500000000000000000000000001f8a5d98f1e2f10e93331d27cf22ed7985ef6a1200000000000000000000000030019481fc501afa449781ac671103feb0d6363c0000000000000000000000008c96105ea574727e94d9c199c632128f1ca584cf000000000000000000000000605c5aa14bdbf0d50a99836e7909c631cf3c8d46

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

000000000000000000000000ffb71361dd8fc3ef0831871ec8dd51b413ed093c0000000000000000000000009a9aef66624c3fa77daacca9b51de307fa09bd500000000000000000000000001f8a5d98f1e2f10e93331d27cf22ed7985ef6a1200000000000000000000000030019481fc501afa449781ac671103feb0d6363c0000000000000000000000008c96105ea574727e94d9c199c632128f1ca584cf000000000000000000000000605c5aa14bdbf0d50a99836e7909c631cf3c8d46

-----Decoded View---------------
Arg [0] : _acPool1 (address): 0xffb71361dd8fc3ef0831871ec8dd51b413ed093c
Arg [1] : _acPool2 (address): 0x9a9aef66624c3fa77daacca9b51de307fa09bd50
Arg [2] : _acPool3 (address): 0x1f8a5d98f1e2f10e93331d27cf22ed7985ef6a12
Arg [3] : _acPool4 (address): 0x30019481fc501afa449781ac671103feb0d6363c
Arg [4] : _acPool5 (address): 0x8c96105ea574727e94d9c199c632128f1ca584cf
Arg [5] : _acPool6 (address): 0x605c5aa14bdbf0d50a99836e7909c631cf3c8d46

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000ffb71361dd8fc3ef0831871ec8dd51b413ed093c
Arg [1] : 0000000000000000000000009a9aef66624c3fa77daacca9b51de307fa09bd50
Arg [2] : 0000000000000000000000001f8a5d98f1e2f10e93331d27cf22ed7985ef6a12
Arg [3] : 00000000000000000000000030019481fc501afa449781ac671103feb0d6363c
Arg [4] : 0000000000000000000000008c96105ea574727e94d9c199c632128f1ca584cf
Arg [5] : 000000000000000000000000605c5aa14bdbf0d50a99836e7909c631cf3c8d46


Deployed ByteCode Sourcemap

19587:23092:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24653:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21961:38;;;:::i;:::-;;;;;;;:::i;21737:77::-;;;:::i;:::-;;;;;;;:::i;24519:28::-;;;:::i;22448:65::-;;;;;;:::i;:::-;;:::i;20211:85::-;;;:::i;22198:46::-;;;:::i;22370:56::-;;;;;;:::i;:::-;;:::i;25604:1192::-;;;:::i;:::-;;36374:134;;;;;;:::i;:::-;;:::i;41394:484::-;;;;;;:::i;:::-;;:::i;35377:257::-;;;;;;:::i;:::-;;:::i;20816:88::-;;;:::i;21393:77::-;;;:::i;23580:36::-;;;:::i;21307:77::-;;;:::i;37263:170::-;;;;;;:::i;:::-;;:::i;35930:255::-;;;;;;:::i;:::-;;:::i;22805:42::-;;;:::i;22008:38::-;;;:::i;21071:74::-;;;:::i;32589:369::-;;;:::i;23887:31::-;;;:::i;22149:38::-;;;:::i;22664:41::-;;;:::i;34703:661::-;;;:::i;24083:29::-;;;:::i;28064:303::-;;;:::i;21565:77::-;;;:::i;37100:153::-;;;;;;:::i;:::-;;:::i;36924:166::-;;;;;;:::i;:::-;;:::i;38336:189::-;;;;;;:::i;:::-;;:::i;41888:645::-;;;;;;:::i;:::-;;:::i;34521:158::-;;;:::i;24396:34::-;;;:::i;24349:38::-;;;:::i;19661:43::-;;;:::i;36677:237::-;;;;;;:::i;:::-;;:::i;27818:::-;;;:::i;35644:277::-;;;:::i;24692:30::-;;;:::i;37600:212::-;;;;;;:::i;:::-;;:::i;42543:123::-;;;;;;:::i;:::-;;:::i;38183:143::-;;;:::i;24237:46::-;;;:::i;27326:111::-;;;:::i;38839:338::-;;;;;;:::i;:::-;;:::i;23722:39::-;;;:::i;32264:234::-;;;:::i;20311:87::-;;;:::i;20719:91::-;;;:::i;38530:185::-;;;;;;:::i;:::-;;:::i;21914:38::-;;;:::i;20407:82::-;;;:::i;23462:58::-;;;:::i;22055:38::-;;;:::i;22102:::-;;;:::i;24474:35::-;;;:::i;30073:140::-;;;:::i;23140:58::-;;;:::i;37443:147::-;;;;;;:::i;:::-;;:::i;21154:69::-;;;:::i;21479:77::-;;;:::i;19738:78::-;;;:::i;24608:32::-;;;:::i;39804:146::-;;;:::i;29313:680::-;;;:::i;20498:91::-;;;:::i;20910:::-;;;:::i;28988:200::-;;;:::i;23269:42::-;;;:::i;40253:1132::-;;;;;;:::i;:::-;;:::i;38020:153::-;;;;;;:::i;:::-;;:::i;37822:188::-;;;;;;:::i;:::-;;:::i;22560:45::-;;;:::i;23969:30::-;;;:::i;36195:169::-;;;;;;:::i;:::-;;:::i;23793:47::-;;;:::i;28383:132::-;;;;;;:::i;:::-;;:::i;20047:82::-;;;:::i;34271:240::-;;;;;;:::i;:::-;;:::i;30860:1394::-;;;:::i;33677:521::-;;;;;;:::i;:::-;;:::i;22933:32::-;;;:::i;23365:43::-;;;:::i;36518:150::-;;;;;;:::i;:::-;;:::i;22257:39::-;;;:::i;21651:77::-;;;:::i;32968:433::-;;;:::i;20622:83::-;;;:::i;24047:26::-;;;:::i;19958:80::-;;;:::i;19825:75::-;;;:::i;26870:344::-;;;:::i;24653:30::-;;;;;;:::o;21961:38::-;;;:::o;21737:77::-;;;:::o;24519:28::-;;;-1:-1:-1;;;24519:28:0;;;;;:::o;22448:65::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20211:85::-;;;:::o;22198:46::-;;;:::o;22370:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22370:56:0;;-1:-1:-1;22370:56:0;;-1:-1:-1;22370:56:0:o;25604:1192::-;25665:18;;;;25664:19;25656:47;;;;-1:-1:-1;;;25656:47:0;;;;;;;:::i;:::-;;;;;;;;;25732:21;-1:-1:-1;;;;;25720:43:0;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25836:49:0;;-1:-1:-1;;;25836:49:0;;-1:-1:-1;;;;;25848:21:0;25836:46;;-1:-1:-1;25836:46:0;;-1:-1:-1;25836:49:0;;25883:1;;25836:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25965:51:0;;-1:-1:-1;;;25965:51:0;;-1:-1:-1;;;;;25977:21:0;25965:48;;-1:-1:-1;25965:48:0;;-1:-1:-1;25965:51:0;;26014:1;;25965:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26095:75:0;;-1:-1:-1;;;26095:75:0;;26071:21;;-1:-1:-1;26102:42:0;;-1:-1:-1;26095:60:0;;:75;;26164:4;;26095:75;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26210:94;;-1:-1:-1;;;26210:94:0;;26071:99;;-1:-1:-1;26217:42:0;;26210:59;;:94;;26270:18;;26071:99;;26210:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26391:18;-1:-1:-1;;;;;26379:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26519:18;-1:-1:-1;;;;;26507:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26607:109:0;;-1:-1:-1;;;26607:109:0;;-1:-1:-1;;;;;26622:21:0;26607:59;;-1:-1:-1;26607:59:0;;-1:-1:-1;26607:109:0;;26667:42;;26711:4;;26607:109;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26761:18:0;:25;;-1:-1:-1;;26761:25:0;26782:4;26761:25;;;-1:-1:-1;;;25604:1192:0:o;36374:134::-;36436:10;-1:-1:-1;;;;;36450:17:0;36436:31;;36428:40;;;;;;36478:16;:23;;;;;-1:-1:-1;;;36478:23:0;-1:-1:-1;;;;36478:23:0;;;;;;;;;36374:134::o;41394:484::-;41470:53;;-1:-1:-1;;;41470:53:0;;41454:13;;-1:-1:-1;;;;;41487:15:0;41470:41;;;;:53;;41512:10;;41470:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41454:69;;41538:8;41530:49;;;;-1:-1:-1;;;41530:49:0;;;;;;;:::i;:::-;41615:10;41601:25;;;;:13;:25;;;;;;;;-1:-1:-1;;;;;41601:39:0;;;;;;;;;;;;41600:40;41592:67;;;;-1:-1:-1;;;41592:67:0;;;;;;;:::i;:::-;41680:10;41666:25;;;;:13;:25;;;;;;;;-1:-1:-1;;;;;41666:39:0;;;;;;;;;;;:46;;-1:-1:-1;;41666:46:0;41708:4;41666:46;;;;;;41719:19;:33;;;;;:50;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;41719:50:0;;;;;41799:72;;;;;41680:10;;41692:12;;41799:72;:::i;:::-;;;;;;;;41394:484;;:::o;35377:257::-;35452:10;-1:-1:-1;;;;;35466:17:0;35452:31;;35444:40;;;;;;35523:12;35497:23;:38;35548:19;:33;;-1:-1:-1;;;;;;;;;35548:33:0;;;-1:-1:-1;;;;;;35548:33:0;;;;35594:30;;;;-1:-1:-1;;;35594:30:0;;;35377:257::o;20816:88::-;;;:::o;21393:77::-;;;:::o;23580:36::-;;;;;;:::o;21307:77::-;;;:::o;37263:170::-;37348:10;-1:-1:-1;;;;;37362:13:0;37348:27;;37340:36;;;;;;37386:40;;-1:-1:-1;;;37386:40:0;;-1:-1:-1;;;;;37386:27:0;;;;;:40;;37414:11;;37386:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37263:170;;:::o;35930:255::-;36042:10;-1:-1:-1;;;;;36056:17:0;36042:31;;36034:40;;;;;;36095:14;;36081:97;;-1:-1:-1;;;36081:97:0;;-1:-1:-1;;;;;36095:14:0;;;;36081:45;;:97;;36134:10;;36146;;36158:13;;36081:97;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35930:255;;;:::o;22805:42::-;;;;:::o;22008:38::-;;;:::o;21071:74::-;;;-1:-1:-1;;;;;21071:74:0;;:::o;32589:369::-;32638:10;32652:9;32638:23;32630:54;;;;-1:-1:-1;;;32630:54:0;;;;;;;:::i;:::-;32701:16;32720:23;:21;:23::i;:::-;32701:42;;32754:12;:10;:12::i;:::-;32779:16;:14;:16::i;:::-;32828:15;32808:17;:35;32855:48;-1:-1:-1;;;;;32862:5:0;32855:26;32882:10;32894:8;32855:26;:48::i;:::-;32927:10;-1:-1:-1;;;;;32919:29:0;;32939:8;32919:29;;;;;;:::i;:::-;;;;;;;;32589:369;:::o;23887:31::-;;;;:::o;22149:38::-;;;:::o;22664:41::-;;;;:::o;34703:661::-;34760:10;-1:-1:-1;;;;;34774:17:0;34760:31;;34752:40;;;;;;34857:12;34833:21;;34807:23;;:47;;;;:::i;:::-;:62;34799:100;;;;-1:-1:-1;;;34799:100:0;;;;;;;:::i;:::-;34948:19;;34910:58;;-1:-1:-1;;;34910:58:0;;-1:-1:-1;;;;;34922:10:0;34910:37;;;;;:58;;34948:19;;;;;34910:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35009:19:0;;34981:48;;-1:-1:-1;;;34981:48:0;;-1:-1:-1;;;;;34993:10:0;34981:27;;;-1:-1:-1;34981:27:0;;-1:-1:-1;34981:48:0;;35009:19;;34981:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35084:19:0;;35042:62;;-1:-1:-1;;;35042:62:0;;-1:-1:-1;;;;;35054:10:0;35042:41;;;-1:-1:-1;35042:41:0;;-1:-1:-1;35042:62:0;;35084:19;;35042:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35176:19:0;;35197:38;;-1:-1:-1;;;35197:38:0;;35149:87;;-1:-1:-1;;;;;;35176:19:0;;;;-1:-1:-1;35204:5:0;35197:23;;;;;;:38;;35229:4;;35197:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35156:5:0;35149:26;;:87;:26;:87::i;:::-;35322:19;;35306:48;;35343:10;;35306:48;;;;-1:-1:-1;;;;;35322:19:0;;35306:48;:::i;:::-;;;;;;;;34703:661::o;24083:29::-;;;;;;;;;:::o;28064:303::-;28131:14;;;;:79;;;;;28195:15;28168:22;;28150:15;;:40;;;;:::i;:::-;28149:61;;28131:79;28123:88;;;;;;28306:15;;28288:33;;:15;:33;:::i;:::-;28268:15;;28253:30;;:12;:30;:::i;:::-;28242:42;;:7;:42;:::i;:::-;:80;;;;:::i;:::-;28224:15;:98;28335:14;:22;;-1:-1:-1;;28335:22:0;;;28064:303::o;21565:77::-;;;:::o;37100:153::-;37179:10;-1:-1:-1;;;;;37193:13:0;37179:27;;37171:36;;;;;;37217:18;:29;37100:153::o;36924:166::-;37008:10;-1:-1:-1;;;;;37022:13:0;37008:27;;37000:36;;;;;;37046:22;:37;36924:166::o;38336:189::-;38414:10;-1:-1:-1;;;;;38428:13:0;38414:27;;38406:36;;;;;;38449:69;;-1:-1:-1;;;38449:69:0;;-1:-1:-1;;;;;38462:21:0;38449:60;;;;:69;;38510:7;;38449:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38336:189;:::o;41888:645::-;41972:10;41958:25;;;;:13;:25;;;;;;;;-1:-1:-1;;;;;41958:39:0;;;;;;;;;;;;41950:62;;;;-1:-1:-1;;;41950:62:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42040:33:0;;42019:18;42040:33;;;:19;:33;;;;;:40;:44;;42083:1;;42040:44;:::i;:::-;42019:65;;42091:14;42112:87;-1:-1:-1;;;;;42118:33:0;;;;;;:19;:33;;;;;:41;;42163:10;;42118:33;42152:6;;42118:41;;;;-1:-1:-1;;;42118:41:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42118:41:0;:55;42112:87;;42183:8;;;;:::i;:::-;;;;42112:87;;;42219:10;42247:5;42205:25;;;:13;:25;;;;;;;;-1:-1:-1;;;;;42205:39:0;;;;;;;;;:47;;-1:-1:-1;;42205:47:0;;;42262:20;;;42259:130;;-1:-1:-1;;;;;42336:33:0;;;;;;:19;:33;;;;;:45;;42370:10;;42336:45;;;;-1:-1:-1;;;42336:45:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42292:33:0;;;;;:19;:33;;;;;;;:41;;42336:45;;;;;42292:33;42326:6;;42292:41;;;;-1:-1:-1;;;42292:41:0;;;;;;;;;;;;;;;;;:89;;;;;-1:-1:-1;;;;;42292:89:0;;;;;-1:-1:-1;;;;;42292:89:0;;;;;;42259:130;-1:-1:-1;;;;;42396:33:0;;;;;;:19;:33;;;;;:39;;;;;-1:-1:-1;;;42396:39:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;42396:39:0;;;;;-1:-1:-1;;;;;;42396:39:0;;;;;;;;;42453:73;;;;;;42462:10;;42474:12;;-1:-1:-1;;;;;42495:30:0;;;42453:73;:::i;:::-;;;;;;;;41888:645;;;:::o;34521:158::-;34571:10;-1:-1:-1;;;;;34585:21:0;34571:35;;34563:44;;;;;;34646:10;-1:-1:-1;;;;;34634:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34614:17;:58;34521:158::o;24396:34::-;;;-1:-1:-1;;;;;24396:34:0;;:::o;24349:38::-;;;;:::o;19661:43::-;;;:::o;36677:237::-;36796:10;-1:-1:-1;;;;;36810:12:0;36796:26;;36788:35;;;;;;36833:74;;-1:-1:-1;;;36833:74:0;;-1:-1:-1;;;;;36845:10:0;36833:27;;;;:74;;36861:4;;36867:11;;36880:13;;36895:11;;36833:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36677:237;;;;:::o;27818:::-;27880:14;;;;27879:15;27871:51;;;;-1:-1:-1;;;27871:51:0;;;;;;;:::i;:::-;27935:14;:21;;-1:-1:-1;;27935:21:0;27952:4;27935:21;;;27987:12;27969:15;:30;28030:15;28012;:33;27818:237::o;35644:277::-;35696:23;;-1:-1:-1;;;35696:23:0;;;;35688:46;;;;-1:-1:-1;;;35688:46:0;;;;;;;:::i;:::-;35821:19;;35774:67;;-1:-1:-1;;;35774:67:0;;35748:20;;-1:-1:-1;;;;;35785:17:0;35774:46;;;;;:67;;35821:19;;35774:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35747:94;;;35851:15;35848:67;;;35876:23;:31;;-1:-1:-1;;;;35876:31:0;;;35848:67;35644:277;:::o;24692:30::-;;;;;;;;;:::o;37600:212::-;37690:10;-1:-1:-1;;;;;37704:13:0;37690:27;;37682:36;;;;;;37743:4;37733:6;:14;;37725:41;;;;-1:-1:-1;;;37725:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37776:20:0;;;;;;;:10;:20;;;;;:29;37600:212::o;42543:123::-;-1:-1:-1;;;;;42632:26:0;;42543:123;;;;:::o;38183:143::-;38244:10;-1:-1:-1;;;;;38258:21:0;38244:35;;38236:44;;;;;;38287:30;:32;;;:30;:32;;;:::i;:::-;;;;;;38183:143::o;24237:46::-;;;;:::o;27326:111::-;27422:5;27403:16;:14;:16::i;:::-;:24;;;;:::i;:::-;27383:17;:44;27326:111::o;38839:338::-;38924:10;38938:9;38924:23;38916:32;;;;;;38981:5;-1:-1:-1;;;;;38963:23:0;:14;-1:-1:-1;;;;;38963:23:0;;;38955:45;;;;-1:-1:-1;;;38955:45:0;;;;;;;:::i;:::-;39036:47;;-1:-1:-1;;;39036:47:0;;39019:14;;-1:-1:-1;;;;;39036:32:0;;;;;:47;;39077:4;;39036:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39144:14;;39019:64;;-1:-1:-1;39108:59:0;;-1:-1:-1;;;;;39108:35:0;;;;39144:14;39019:64;39108:35;:59::i;:::-;38839:338;;:::o;23722:39::-;;;;:::o;32264:234::-;32308:7;-1:-1:-1;;;;;32300:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32341:7;-1:-1:-1;;;;;32333:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32374:7;-1:-1:-1;;;;;32366:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32407:7;-1:-1:-1;;;;;32399:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32440:7;-1:-1:-1;;;;;32432:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32473:7;-1:-1:-1;;;;;32465:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32264:234::o;20311:87::-;;;:::o;20719:91::-;;;:::o;38530:185::-;38606:10;-1:-1:-1;;;;;38620:13:0;38606:27;;38598:36;;;;;;38641:67;;-1:-1:-1;;;38641:67:0;;-1:-1:-1;;;;;38654:21:0;38641:58;;;;:67;;38700:7;;38641:67;;;:::i;21914:38::-;;;:::o;20407:82::-;;;:::o;23462:58::-;;;;:::o;22055:38::-;;;:::o;22102:::-;;;:::o;24474:35::-;;;-1:-1:-1;;;24474:35:0;;;;;:::o;30073:140::-;30118:37;;-1:-1:-1;;;30118:37:0;;-1:-1:-1;;;;;30130:10:0;30118:34;;;;:37;;30153:1;;30118:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30165:37:0;;-1:-1:-1;;;30165:37:0;;-1:-1:-1;;;;;30177:10:0;30165:34;;-1:-1:-1;30165:34:0;;-1:-1:-1;30165:37:0;;30200:1;;30165:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;23140:58;;;;:::o;37443:147::-;37519:10;-1:-1:-1;;;;;37533:13:0;37519:27;;37511:36;;;;;;37557:10;:26;37443:147::o;21154:69::-;;;-1:-1:-1;;;;;21154:69:0;;:::o;21479:77::-;;;:::o;19738:78::-;;;:::o;24608:32::-;;;;:::o;39804:146::-;39929:5;39893:32;39911:14;39893:15;:32;:::i;:::-;39892:42;;;;:::i;:::-;39891:51;;39938:4;39891:51;:::i;:::-;39881:62;;:6;:62;:::i;:::-;39857:21;:86;39804:146::o;29313:680::-;29361:37;;-1:-1:-1;;;29361:37:0;;-1:-1:-1;;;;;29373:10:0;29361:34;;;;:37;;29396:1;;29361:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29437:37:0;;-1:-1:-1;;;29437:37:0;;-1:-1:-1;;;;;29449:10:0;29437:34;;-1:-1:-1;29437:34:0;;-1:-1:-1;29437:37:0;;29472:1;;29437:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29485:37:0;;-1:-1:-1;;;29485:37:0;;-1:-1:-1;;;;;29497:10:0;29485:34;;-1:-1:-1;29485:34:0;;-1:-1:-1;29485:37:0;;29520:1;;29485:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29548:37:0;;-1:-1:-1;;;29548:37:0;;-1:-1:-1;;;;;29560:10:0;29548:34;;-1:-1:-1;29548:34:0;;-1:-1:-1;29548:37:0;;29583:1;;29548:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29592:38:0;;-1:-1:-1;;;29592:38:0;;-1:-1:-1;;;;;29604:10:0;29592:34;;-1:-1:-1;29592:34:0;;-1:-1:-1;29592:38:0;;29627:2;;29592:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29658:45:0;;-1:-1:-1;;;29658:45:0;;-1:-1:-1;;;;;29670:10:0;29658:34;;-1:-1:-1;29658:34:0;;-1:-1:-1;29658:45:0;;29693:9;;29658:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29713:45:0;;-1:-1:-1;;;29713:45:0;;-1:-1:-1;;;;;29725:10:0;29713:34;;-1:-1:-1;29713:34:0;;-1:-1:-1;29713:45:0;;29748:9;;29713:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29769:45:0;;-1:-1:-1;;;29769:45:0;;-1:-1:-1;;;;;29781:10:0;29769:34;;-1:-1:-1;29769:34:0;;-1:-1:-1;29769:45:0;;29804:9;;29769:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29825:45:0;;-1:-1:-1;;;29825:45:0;;-1:-1:-1;;;;;29837:10:0;29825:34;;-1:-1:-1;29825:34:0;;-1:-1:-1;29825:45:0;;29860:9;;29825:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29881:45:0;;-1:-1:-1;;;29881:45:0;;-1:-1:-1;;;;;29893:10:0;29881:34;;-1:-1:-1;29881:34:0;;-1:-1:-1;29881:45:0;;29916:9;;29881:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29937:45:0;;-1:-1:-1;;;29937:45:0;;-1:-1:-1;;;;;29949:10:0;29937:34;;-1:-1:-1;29937:34:0;;-1:-1:-1;29937:45:0;;29972:9;;29937:45;;;:::i;20498:91::-;;;:::o;20910:::-;;;:::o;28988:200::-;29143:33;;-1:-1:-1;;;29143:33:0;;29034:7;;-1:-1:-1;;;;;29150:8:0;29143:26;;;;:33;;29170:5;;29143:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29117:8;-1:-1:-1;;;;;29110:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:66;;;;:::i;:::-;29102:75;;:4;:75;:::i;:::-;29071:5;-1:-1:-1;;;;;29064:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:113;;;;:::i;:::-;29056:122;;28988:200;:::o;23269:42::-;;;:::o;40253:1132::-;-1:-1:-1;;;;;40375:33:0;;40323:20;40375:33;;;:19;:33;;;;;:40;40447:1;40430:18;;;40422:60;;;;-1:-1:-1;;;40422:60:0;;;;;;;:::i;:::-;40493:6;40489:218;40506:13;40503:1;:16;40489:218;;;40601:15;-1:-1:-1;;;;;40584:41:0;;40626:19;:33;40646:12;-1:-1:-1;;;;;40626:33:0;-1:-1:-1;;;;;40626:33:0;;;;;;;;;;;;40660:1;40626:36;;;;;;-1:-1:-1;;;40626:36:0;;;;;;;;;;;;;;;;;;;40584:79;;-1:-1:-1;;;;;;40584:79:0;;;;;;;;;-1:-1:-1;;;;;40626:36:0;;40584:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40581:119;;;40674:17;;;;:::i;:::-;;;;40581:119;40521:3;;;;:::i;:::-;;;;40489:218;;;;40746:1;40727:15;:20;;40719:64;;;;-1:-1:-1;;;40719:64:0;;;;;;;:::i;:::-;40796:20;40830:17;-1:-1:-1;;;;;40819:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40796:70;;40873:26;40913:17;-1:-1:-1;;;;;40902:49:0;;40968:12;-1:-1:-1;;;;;40952:30:0;40902:81;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40873:110;-1:-1:-1;41047:3:0;41027:17;:12;41042:2;41027:17;:::i;:::-;:23;;;;:::i;:::-;41004:18;:47;;40996:94;;;;-1:-1:-1;;;40996:94:0;;;;;;;:::i;:::-;41115:51;;-1:-1:-1;;;41115:51:0;;-1:-1:-1;;;;;41127:10:0;41115:37;;;;:51;;41153:12;;41115:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41179:41:0;;-1:-1:-1;;;41179:41:0;;-1:-1:-1;;;;;41191:10:0;41179:27;;-1:-1:-1;41179:27:0;;-1:-1:-1;41179:41:0;;41207:12;;41179:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41233:55:0;;-1:-1:-1;;;41233:55:0;;-1:-1:-1;;;;;41245:10:0;41233:41;;-1:-1:-1;41233:41:0;;-1:-1:-1;41233:55:0;;41275:12;;41233:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41295:80;41322:12;41343:5;-1:-1:-1;;;;;41336:23:0;;41368:4;41336:38;;;;;;;;;;;;;;;:::i;38020:153::-;38085:10;-1:-1:-1;;;;;38099:12:0;38085:26;;38077:35;;;;;;38119:47;;-1:-1:-1;;;38119:47:0;;-1:-1:-1;;;;;38131:10:0;38119:38;;;;:47;;38158:7;;38119:47;;;:::i;37822:188::-;37888:10;-1:-1:-1;;;;;37902:12:0;37888:26;;;:65;;-1:-1:-1;37918:10:0;-1:-1:-1;;;;;37932:21:0;37918:35;;37888:65;37880:74;;;;;;37961:42;;-1:-1:-1;;;37961:42:0;;-1:-1:-1;;;;;37970:12:0;37961:33;;;;:42;;37995:7;;37961:42;;;:::i;22560:45::-;;;;:::o;23969:30::-;;;;:::o;36195:169::-;36282:10;-1:-1:-1;;;;;36296:13:0;36282:27;;36274:36;;;;;;36320:22;:37;36195:169::o;23793:47::-;;;;:::o;28383:132::-;-1:-1:-1;;;;;28480:25:0;28451:7;28480:25;;;:10;:25;;;;;;;28383:132::o;20047:82::-;;;:::o;34271:240::-;34347:10;-1:-1:-1;;;;;34361:21:0;34347:35;;34339:44;;;;;;34393:58;;-1:-1:-1;;;34393:58:0;;-1:-1:-1;;;;;34405:10:0;34393:42;;;;:58;;34436:14;;34393:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34473:28;34486:14;34473:28;;;;;;:::i;:::-;;;;;;;;34271:240;:::o;30860:1394::-;30926:32;;-1:-1:-1;;;30926:32:0;;30903:20;;-1:-1:-1;;;;;30933:5:0;30926:23;;;;:32;;30950:7;;30926:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30903:55;;30968:20;30998:5;-1:-1:-1;;;;;30991:23:0;;31015:7;30991:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30968:55;;31033:20;31063:5;-1:-1:-1;;;;;31056:23:0;;31080:7;31056:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31033:55;;31098:20;31128:5;-1:-1:-1;;;;;31121:23:0;;31145:7;31121:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31098:55;;31163:20;31193:5;-1:-1:-1;;;;;31186:23:0;;31210:7;31186:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31163:55;;31228:20;31258:5;-1:-1:-1;;;;;31251:23:0;;31275:7;31251:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31228:55;-1:-1:-1;;;;;;31311:10:0;31299:27;;31327:9;31358:4;31339:16;:12;31354:1;31339:16;:::i;:::-;:23;;;;:::i;:::-;31365:1;31368:5;31299:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31396:10;-1:-1:-1;;;;;31384:27:0;;31412:9;31443:4;31424:12;31439:1;31424:16;;;;:::i;:::-;:23;;;;:::i;:::-;31450:1;31453:5;31384:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31481:10;-1:-1:-1;;;;;31469:27:0;;31497:9;31528:4;31509:12;31524:1;31509:16;;;;:::i;:::-;:23;;;;:::i;:::-;31535:1;31538:5;31469:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31566:10;-1:-1:-1;;;;;31554:27:0;;31582:9;31614:4;31594:12;31609:2;31594:17;;;;:::i;:::-;:24;;;;:::i;:::-;31621:1;31624:5;31554:76;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31652:10;-1:-1:-1;;;;;31640:27:0;;31668:9;31700:4;31680:12;31695:2;31680:17;;;;:::i;:::-;:24;;;;:::i;:::-;31707:1;31710:5;31640:76;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31738:10;-1:-1:-1;;;;;31726:27:0;;31754:9;31786:4;31766:12;31781:2;31766:17;;;;:::i;:::-;:24;;;;:::i;:::-;31793:1;31796:5;31726:76;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31919:45:0;;-1:-1:-1;;;31919:45:0;;-1:-1:-1;;;;;31931:10:0;31919:34;;-1:-1:-1;31919:34:0;;-1:-1:-1;31919:45:0;;31954:9;;31919:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31974:45:0;;-1:-1:-1;;;31974:45:0;;-1:-1:-1;;;;;31986:10:0;31974:34;;-1:-1:-1;31974:34:0;;-1:-1:-1;31974:45:0;;32009:9;;31974:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32030:45:0;;-1:-1:-1;;;32030:45:0;;-1:-1:-1;;;;;32042:10:0;32030:34;;-1:-1:-1;32030:34:0;;-1:-1:-1;32030:45:0;;32065:9;;32030:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32086:45:0;;-1:-1:-1;;;32086:45:0;;-1:-1:-1;;;;;32098:10:0;32086:34;;-1:-1:-1;32086:34:0;;-1:-1:-1;32086:45:0;;32121:9;;32086:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32142:45:0;;-1:-1:-1;;;32142:45:0;;-1:-1:-1;;;;;32154:10:0;32142:34;;-1:-1:-1;32142:34:0;;-1:-1:-1;32142:45:0;;32177:9;;32142:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32198:45:0;;-1:-1:-1;;;32198:45:0;;-1:-1:-1;;;;;32210:10:0;32198:34;;-1:-1:-1;32198:34:0;;-1:-1:-1;32198:45:0;;32233:9;;32198:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30860:1394;;;;;;:::o;33677:521::-;33834:10;-1:-1:-1;;;;;33848:7:0;33834:21;;;:46;;-1:-1:-1;33859:10:0;-1:-1:-1;;;;;33873:7:0;33859:21;;33834:46;:71;;;-1:-1:-1;33884:10:0;-1:-1:-1;;;;;33898:7:0;33884:21;;33834:71;:111;;;-1:-1:-1;33924:10:0;-1:-1:-1;;;;;33938:7:0;33924:21;;33834:111;:136;;;-1:-1:-1;33949:10:0;-1:-1:-1;;;;;33963:7:0;33949:21;;33834:136;:161;;;-1:-1:-1;33974:10:0;-1:-1:-1;;;;;33988:7:0;33974:21;;33834:161;33810:186;;;;;;34021:79;;-1:-1:-1;;;34021:79:0;;-1:-1:-1;;;;;34021:41:0;;;;;:79;;34063:10;;34075:11;;34088:8;;34098:1;;34021:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34130:58;34148:10;34160:11;34173:14;34130:58;;;;;;;;:::i;:::-;;;;;;;;33677:521;;;;:::o;22933:32::-;;;;:::o;23365:43::-;;;:::o;36518:150::-;36587:10;-1:-1:-1;;;;;36601:21:0;36587:35;;36579:44;;;;;;36630:24;:31;;-1:-1:-1;;36630:31:0;;;;;;;;;;36518:150::o;22257:39::-;;;:::o;21651:77::-;;;:::o;32968:433::-;33022:7;33038:20;33330:7;-1:-1:-1;;;;;33322:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33281:7;-1:-1:-1;;;;;33273:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33232:7;-1:-1:-1;;;;;33224:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33167:7;-1:-1:-1;;;;;33159:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33118:7;-1:-1:-1;;;;;33110:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33069:7;-1:-1:-1;;;;;33061:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:95;;;;:::i;:::-;:144;;;;:::i;:::-;:209;;;;:::i;:::-;:258;;;;:::i;:::-;:307;;;;:::i;:::-;33038:330;-1:-1:-1;;32968:433:0;:::o;20622:83::-;;;:::o;24047:26::-;;;;;;:::o;19958:80::-;;;:::o;19825:75::-;;;:::o;26870:344::-;26933:18;;;;;;;26932:19;26924:48;;;;-1:-1:-1;;;26924:48:0;;;;;;;:::i;:::-;26985:22;27079:14;;27065:97;;-1:-1:-1;;;27065:97:0;;27010:42;;-1:-1:-1;;;;;27079:14:0;;;;27065:45;;:97;;26985:22;27010:42;;27139:22;;;27065:97;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27179:18:0;:25;;-1:-1:-1;;27179:25:0;;;;;-1:-1:-1;;;26870:344:0:o;12590:223::-;12717:86;12737:5;12767:23;;;12792:2;12796:5;12744:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;12744:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;12744:58:0;-1:-1:-1;;;;;;12744:58:0;;;;;;;;;;12717:19;:86::i;:::-;12590:223;;;:::o;15297:736::-;15731:23;15757:69;15785:4;15757:69;;;;;;;;;;;;;;;;;15765:5;-1:-1:-1;;;;;15757:27:0;;;:69;;;;;:::i;:::-;15843:17;;15731:95;;-1:-1:-1;15843:21:0;15839:185;;15944:10;15933:30;;;;;;;;;;;;:::i;:::-;15925:85;;;;-1:-1:-1;;;15925:85:0;;;;;;;:::i;4085:241::-;4230:12;4264:52;4286:6;4294:4;4300:1;4303:12;4264:21;:52::i;:::-;4257:59;;4085:241;;;;;;:::o;5271:532::-;5451:12;5511:5;5486:21;:30;;5478:81;;;;-1:-1:-1;;;5478:81:0;;;;;;;:::i;:::-;5580:18;5591:6;5580:10;:18::i;:::-;5572:60;;;;-1:-1:-1;;;5572:60:0;;;;;;;:::i;:::-;5650:12;5664:23;5691:6;-1:-1:-1;;;;;5691:11:0;5710:5;5717:4;5691:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5649:73;;;;5742:51;5759:7;5768:10;5780:12;5742:16;:51::i;:::-;5735:58;5271:532;-1:-1:-1;;;;;;;5271:532:0:o;1222:338::-;1282:4;1549:1;1527:7;-1:-1:-1;;;;;1527:12:0;;;;;;;;;;;;;;;;;;;;;;;;:19;:23;;1222:338;-1:-1:-1;;1222:338:0:o;8103:752::-;8261:12;8292:7;8288:558;;;-1:-1:-1;8325:10:0;8318:17;;8288:558;8445:17;;:21;8441:392;;8651:10;8645:17;8714:15;8701:10;8697:2;8693:19;8686:44;8597:154;8802:12;8795:20;;-1:-1:-1;;;8795:20:0;;;;;;;;:::i;14:175:1:-;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:198;;306:2;294:9;285:7;281:23;277:32;274:2;;;327:6;319;312:22;274:2;355:31;376:9;355:31;:::i;397:274::-;;;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;575:31;596:9;575:31;:::i;:::-;565:41;;625:40;661:2;650:9;646:18;625:40;:::i;:::-;615:50;;484:187;;;;;:::o;676:342::-;;;;822:2;810:9;801:7;797:23;793:32;790:2;;;843:6;835;828:22;790:2;871:31;892:9;871:31;:::i;:::-;861:41;;921:40;957:2;946:9;942:18;921:40;:::i;:::-;911:50;;1008:2;997:9;993:18;980:32;970:42;;780:238;;;;;:::o;1023:411::-;;;;;1186:3;1174:9;1165:7;1161:23;1157:33;1154:2;;;1208:6;1200;1193:22;1154:2;1236:31;1257:9;1236:31;:::i;:::-;1226:41;;1286:40;1322:2;1311:9;1307:18;1286:40;:::i;:::-;1144:290;;1276:50;;-1:-1:-1;;;;1373:2:1;1358:18;;1345:32;;1424:2;1409:18;1396:32;;1144:290::o;1439:266::-;;;1568:2;1556:9;1547:7;1543:23;1539:32;1536:2;;;1589:6;1581;1574:22;1536:2;1617:31;1638:9;1617:31;:::i;:::-;1607:41;1695:2;1680:18;;;;1667:32;;-1:-1:-1;;;1526:179:1:o;1710:253::-;;1819:2;1807:9;1798:7;1794:23;1790:32;1787:2;;;1840:6;1832;1825:22;1787:2;1884:9;1871:23;1903:30;1927:5;1903:30;:::i;1968:257::-;;2088:2;2076:9;2067:7;2063:23;2059:32;2056:2;;;2109:6;2101;2094:22;2056:2;2146:9;2140:16;2165:30;2189:5;2165:30;:::i;2230:387::-;;;2364:2;2352:9;2343:7;2339:23;2335:32;2332:2;;;2385:6;2377;2370:22;2332:2;2422:9;2416:16;2441:30;2465:5;2441:30;:::i;:::-;2540:2;2525:18;;2519:25;2490:5;;-1:-1:-1;2553:32:1;2519:25;2553:32;:::i;:::-;2604:7;2594:17;;;2322:295;;;;;:::o;2622:190::-;;2734:2;2722:9;2713:7;2709:23;2705:32;2702:2;;;2755:6;2747;2740:22;2702:2;-1:-1:-1;2783:23:1;;2692:120;-1:-1:-1;2692:120:1:o;2817:194::-;;2940:2;2928:9;2919:7;2915:23;2911:32;2908:2;;;2961:6;2953;2946:22;2908:2;-1:-1:-1;2989:16:1;;2898:113;-1:-1:-1;2898:113:1:o;3016:566::-;;;;;3175:3;3163:9;3154:7;3150:23;3146:33;3143:2;;;3197:6;3189;3182:22;3143:2;3238:9;3225:23;3215:33;;3295:2;3284:9;3280:18;3267:32;3257:42;;3349:2;3338:9;3334:18;3321:32;3393:6;3386:5;3382:18;3375:5;3372:29;3362:2;;3420:6;3412;3405:22;3362:2;3448:5;-1:-1:-1;3505:2:1;3490:18;;3477:32;3518;3477;3518;:::i;:::-;3133:449;;;;-1:-1:-1;3133:449:1;;-1:-1:-1;;3133:449:1:o;3587:274::-;;3754:6;3748:13;3770:53;3816:6;3811:3;3804:4;3796:6;3792:17;3770:53;:::i;:::-;3839:16;;;;;3724:137;-1:-1:-1;;3724:137:1:o;3866:203::-;-1:-1:-1;;;;;4030:32:1;;;;4012:51;;4000:2;3985:18;;3967:102::o;4074:457::-;-1:-1:-1;;;;;4355:15:1;;;4337:34;;4407:15;;;;4402:2;4387:18;;4380:43;4466:14;4459:22;4454:2;4439:18;;4432:50;4513:2;4498:18;;4491:34;;;;4286:3;4271:19;;4253:278::o;4536:375::-;-1:-1:-1;;;;;4794:15:1;;;4776:34;;4846:15;;;;4841:2;4826:18;;4819:43;4893:2;4878:18;;4871:34;;;;4726:2;4711:18;;4693:218::o;4916:284::-;-1:-1:-1;;;;;5102:32:1;;;;5084:51;;5178:14;5171:22;5166:2;5151:18;;5144:50;5072:2;5057:18;;5039:161::o;5205:274::-;-1:-1:-1;;;;;5397:32:1;;;;5379:51;;5461:2;5446:18;;5439:34;5367:2;5352:18;;5334:145::o;5484:375::-;-1:-1:-1;;;;;5742:15:1;;;5724:34;;5789:2;5774:18;;5767:34;;;;5837:15;;;5832:2;5817:18;;5810:43;5674:2;5659:18;;5641:218::o;5864:425::-;-1:-1:-1;;;;;6121:32:1;;;;6103:51;;6185:2;6170:18;;6163:34;;;;6228:2;6213:18;;6206:34;6271:2;6256:18;;6249:34;6090:3;6075:19;;6057:232::o;6294:187::-;6459:14;;6452:22;6434:41;;6422:2;6407:18;;6389:92::o;6486:185::-;6640:25;;;6628:2;6613:18;;6595:76::o;7437:383::-;;7586:2;7575:9;7568:21;7618:6;7612:13;7661:6;7656:2;7645:9;7641:18;7634:34;7677:66;7736:6;7731:2;7720:9;7716:18;7711:2;7703:6;7699:15;7677:66;:::i;:::-;7804:2;7783:15;-1:-1:-1;;7779:29:1;7764:45;;;;7811:2;7760:54;;7558:262;-1:-1:-1;;7558:262:1:o;7825:353::-;8027:2;8009:21;;;8066:2;8046:18;;;8039:30;8105:31;8100:2;8085:18;;8078:59;8169:2;8154:18;;7999:179::o;8183:347::-;8385:2;8367:21;;;8424:2;8404:18;;;8397:30;8463:25;8458:2;8443:18;;8436:53;8521:2;8506:18;;8357:173::o;8535:334::-;8737:2;8719:21;;;8776:2;8756:18;;;8749:30;-1:-1:-1;;;8810:2:1;8795:18;;8788:40;8860:2;8845:18;;8709:160::o;8874:402::-;9076:2;9058:21;;;9115:2;9095:18;;;9088:30;9154:34;9149:2;9134:18;;9127:62;-1:-1:-1;;;9220:2:1;9205:18;;9198:36;9266:3;9251:19;;9048:228::o;9281:352::-;9483:2;9465:21;;;9522:2;9502:18;;;9495:30;9561;9556:2;9541:18;;9534:58;9624:2;9609:18;;9455:178::o;9638:340::-;9840:2;9822:21;;;9879:2;9859:18;;;9852:30;-1:-1:-1;;;9913:2:1;9898:18;;9891:46;9969:2;9954:18;;9812:166::o;9983:342::-;10185:2;10167:21;;;10224:2;10204:18;;;10197:30;-1:-1:-1;;;10258:2:1;10243:18;;10236:48;10316:2;10301:18;;10157:168::o;10330:349::-;10532:2;10514:21;;;10571:2;10551:18;;;10544:30;10610:27;10605:2;10590:18;;10583:55;10670:2;10655:18;;10504:175::o;10684:339::-;10886:2;10868:21;;;10925:2;10905:18;;;10898:30;-1:-1:-1;;;10959:2:1;10944:18;;10937:45;11014:2;10999:18;;10858:165::o;11028:338::-;11230:2;11212:21;;;11269:2;11249:18;;;11242:30;-1:-1:-1;;;11303:2:1;11288:18;;11281:44;11357:2;11342:18;;11202:164::o;11371:355::-;11573:2;11555:21;;;11612:2;11592:18;;;11585:30;11651:33;11646:2;11631:18;;11624:61;11717:2;11702:18;;11545:181::o;11731:353::-;11933:2;11915:21;;;11972:2;11952:18;;;11945:30;12011:31;12006:2;11991:18;;11984:59;12075:2;12060:18;;11905:179::o;12089:334::-;12291:2;12273:21;;;12330:2;12310:18;;;12303:30;-1:-1:-1;;;12364:2:1;12349:18;;12342:40;12414:2;12399:18;;12263:160::o;12428:332::-;12630:2;12612:21;;;12669:1;12649:18;;;12642:29;-1:-1:-1;;;12702:2:1;12687:18;;12680:39;12751:2;12736:18;;12602:158::o;12765:406::-;12967:2;12949:21;;;13006:2;12986:18;;;12979:30;13045:34;13040:2;13025:18;;13018:62;-1:-1:-1;;;13111:2:1;13096:18;;13089:40;13161:3;13146:19;;12939:232::o;13176:398::-;13378:2;13360:21;;;13417:2;13397:18;;;13390:30;13456:34;13451:2;13436:18;;13429:62;-1:-1:-1;;;13522:2:1;13507:18;;13500:32;13564:3;13549:19;;13350:224::o;13579:338::-;13781:2;13763:21;;;13820:2;13800:18;;;13793:30;-1:-1:-1;;;13854:2:1;13839:18;;13832:44;13908:2;13893:18;;13753:164::o;14104:421::-;14336:25;;;14392:2;14377:18;;14370:34;;;;14452:6;14440:19;14435:2;14420:18;;14413:47;14503:14;14496:22;14491:2;14476:18;;14469:50;14323:3;14308:19;;14290:235::o;14947:128::-;;15018:1;15014:6;15011:1;15008:13;15005:2;;;15024:18;;:::i;:::-;-1:-1:-1;15060:9:1;;14995:80::o;15080:217::-;;15146:1;15136:2;;-1:-1:-1;;;15171:31:1;;15225:4;15222:1;15215:15;15253:4;15178:1;15243:15;15136:2;-1:-1:-1;15282:9:1;;15126:171::o;15302:168::-;;15408:1;15404;15400:6;15396:14;15393:1;15390:21;15385:1;15378:9;15371:17;15367:45;15364:2;;;15415:18;;:::i;:::-;-1:-1:-1;15455:9:1;;15354:116::o;15475:125::-;;15543:1;15540;15537:8;15534:2;;;15548:18;;:::i;:::-;-1:-1:-1;15585:9:1;;15524:76::o;15605:258::-;15677:1;15687:113;15701:6;15698:1;15695:13;15687:113;;;15777:11;;;15771:18;15758:11;;;15751:39;15723:2;15716:10;15687:113;;;15818:6;15815:1;15812:13;15809:2;;;-1:-1:-1;;15853:1:1;15835:16;;15828:27;15658:205::o;15868:135::-;;-1:-1:-1;;15928:17:1;;15925:2;;;15948:18;;:::i;:::-;-1:-1:-1;15995:1:1;15984:13;;15915:88::o;16008:127::-;16069:10;16064:3;16060:20;16057:1;16050:31;16100:4;16097:1;16090:15;16124:4;16121:1;16114:15;16140:120;16228:5;16221:13;16214:21;16207:5;16204:32;16194:2;;16250:1;16247;16240:12

Swarm Source

ipfs://ea086b028ff59de9ecc8c38a51600953e9c5e097abdaa3be73623d1b3d148c91
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.