AVAX Price: $9.31 (+1.90%)
 

Overview

AVAX Balance

Avalanche C-Chain LogoAvalanche C-Chain LogoAvalanche C-Chain Logo2.038375538883964952 AVAX

AVAX Value

$18.98 (@ $9.31/AVAX)

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Submit828645522026-04-13 20:41:092 mins ago1776112869IN
0x7Caf521A...C037Fc3ff
0.15518023 AVAX0.002431871.52635455
Submit828644682026-04-13 20:39:423 mins ago1776112782IN
0x7Caf521A...C037Fc3ff
0.11083386 AVAX0.001280251.52646987
Submit828644402026-04-13 20:39:143 mins ago1776112754IN
0x7Caf521A...C037Fc3ff
0.11083386 AVAX0.001645921.52935468
Submit828643252026-04-13 20:37:115 mins ago1776112631IN
0x7Caf521A...C037Fc3ff
0 AVAX0.005578591.52906159
Submit828642992026-04-13 20:36:416 mins ago1776112601IN
0x7Caf521A...C037Fc3ff
0.11084285 AVAX0.001654081.53154095
Submit828642932026-04-13 20:36:366 mins ago1776112596IN
0x7Caf521A...C037Fc3ff
0 AVAX0.002887021.5326948
Submit828642652026-04-13 20:36:087 mins ago1776112568IN
0x7Caf521A...C037Fc3ff
0.11084285 AVAX0.001656611.53339164
Submit828641652026-04-13 20:34:288 mins ago1776112468IN
0x7Caf521A...C037Fc3ff
0.39903429 AVAX0.004921921.53561397
Submit828639982026-04-13 20:31:3511 mins ago1776112295IN
0x7Caf521A...C037Fc3ff
0.39873932 AVAX0.004963491.54487371
Submit828639872026-04-13 20:31:2011 mins ago1776112280IN
0x7Caf521A...C037Fc3ff
0.39866225 AVAX0.004971471.54744573
Submit828639662026-04-13 20:30:5912 mins ago1776112259IN
0x7Caf521A...C037Fc3ff
0.24340599 AVAX0.004961741.54583872
Submit828638192026-04-13 20:28:2914 mins ago1776112109IN
0x7Caf521A...C037Fc3ff
0 AVAX0.005672771.54744545
Withdraw All828638112026-04-13 20:28:2114 mins ago1776112101IN
0x7Caf521A...C037Fc3ff
0 AVAX0.000211911.54680037
Submit828636972026-04-13 20:26:2816 mins ago1776111988IN
0x7Caf521A...C037Fc3ff
0 AVAX0.003066781.54450602
Claim828636492026-04-13 20:25:3717 mins ago1776111937IN
0x7Caf521A...C037Fc3ff
0 AVAX0.004202321.5377677
Claim828635552026-04-13 20:24:0419 mins ago1776111844IN
0x7Caf521A...C037Fc3ff
0.10684823 AVAX0.003875511.53888333
Submit828635212026-04-13 20:23:2319 mins ago1776111803IN
0x7Caf521A...C037Fc3ff
0.35302658 AVAX0.005122581.54271624
Submit828629132026-04-13 20:13:0230 mins ago1776111182IN
0x7Caf521A...C037Fc3ff
0.39623388 AVAX0.004932361.53553332
Submit828628972026-04-13 20:12:4630 mins ago1776111166IN
0x7Caf521A...C037Fc3ff
0.39623388 AVAX0.004935331.53645841
Submit828628472026-04-13 20:11:5631 mins ago1776111116IN
0x7Caf521A...C037Fc3ff
0.39623388 AVAX0.004925791.53822488
Submit828627822026-04-13 20:10:5232 mins ago1776111052IN
0x7Caf521A...C037Fc3ff
0.39623388 AVAX0.004934161.54082733
Submit828624772026-04-13 20:05:4237 mins ago1776110742IN
0x7Caf521A...C037Fc3ff
0 AVAX0.005047961.55281748
Submit828623442026-04-13 20:03:2639 mins ago1776110606IN
0x7Caf521A...C037Fc3ff
0 AVAX0.005082071.56000198
Submit828623432026-04-13 20:03:2539 mins ago1776110605IN
0x7Caf521A...C037Fc3ff
0 AVAX0.005069741.55925656
Submit828623432026-04-13 20:03:2539 mins ago1776110605IN
0x7Caf521A...C037Fc3ff
0 AVAX0.005091911.55925656
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
828638112026-04-13 20:28:2114 mins ago1776112101
0x7Caf521A...C037Fc3ff
268.16701964 AVAX
828075222026-04-13 4:16:3316 hrs ago1776053793
0x7Caf521A...C037Fc3ff
63.01617949 AVAX
827895292026-04-12 23:04:0721 hrs ago1776035047
0x7Caf521A...C037Fc3ff
328.08502207 AVAX
827159232026-04-12 1:42:2043 hrs ago1775958140
0x7Caf521A...C037Fc3ff
11.4970249 AVAX
827116692026-04-12 0:28:0944 hrs ago1775953689
0x7Caf521A...C037Fc3ff
34.06090853 AVAX
826990032026-04-11 20:47:4147 hrs ago1775940461
0x7Caf521A...C037Fc3ff
229.91945511 AVAX
826448242026-04-11 5:09:582 days ago1775884198
0x7Caf521A...C037Fc3ff
40.49467787 AVAX
826327742026-04-11 1:42:032 days ago1775871723
0x7Caf521A...C037Fc3ff
783.31011038 AVAX
824806112026-04-09 5:09:434 days ago1775711383
0x7Caf521A...C037Fc3ff
19.2155568 AVAX
824755922026-04-09 3:39:104 days ago1775705950
0x7Caf521A...C037Fc3ff
197.34579559 AVAX
824363722026-04-08 16:10:365 days ago1775664636
0x7Caf521A...C037Fc3ff
343.128504 AVAX
823866812026-04-08 2:01:085 days ago1775613668
0x7Caf521A...C037Fc3ff
648.05247962 AVAX
822722162026-04-06 17:09:187 days ago1775495358
0x7Caf521A...C037Fc3ff
168.80006272 AVAX
822295232026-04-06 5:01:247 days ago1775451684
0x7Caf521A...C037Fc3ff
128.55534927 AVAX
821946552026-04-05 19:02:148 days ago1775415734
0x7Caf521A...C037Fc3ff
183.02272063 AVAX
821487392026-04-05 5:58:208 days ago1775368700
0x7Caf521A...C037Fc3ff
32.08317788 AVAX
821461722026-04-05 5:15:038 days ago1775366103
0x7Caf521A...C037Fc3ff
17.74227102 AVAX
821432342026-04-05 4:25:258 days ago1775363125
0x7Caf521A...C037Fc3ff
50.93532812 AVAX
821376982026-04-05 2:50:408 days ago1775357440
0x7Caf521A...C037Fc3ff
120.13558992 AVAX
821097872026-04-04 18:56:409 days ago1775329000
0x7Caf521A...C037Fc3ff
401.50177743 AVAX
820488382026-04-04 1:39:539 days ago1775266793
0x7Caf521A...C037Fc3ff
1,614.73833087 AVAX
818071872026-04-01 5:03:5212 days ago1775019832
0x7Caf521A...C037Fc3ff
22.00213463 AVAX
818048952026-04-01 4:24:3712 days ago1775017477
0x7Caf521A...C037Fc3ff
42.27275697 AVAX
817997012026-04-01 2:55:5312 days ago1775012153
0x7Caf521A...C037Fc3ff
33.67556423 AVAX
817953142026-04-01 1:39:5912 days ago1775007599
0x7Caf521A...C037Fc3ff
81.34951562 AVAX
View All Internal Transactions
Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
POPA_SUBMISSIONS

Compiler Version
v0.8.34+commit.80d5c536

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowscan.xyz on 2026-03-11
*/

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// File: @openzeppelin/contracts/utils/Pausable.sol


// OpenZeppelin Contracts (last updated v5.3.0) (utils/Pausable.sol)

pragma solidity ^0.8.20;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    bool private _paused;

    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    /**
     * @dev The operation failed because the contract is paused.
     */
    error EnforcedPause();

    /**
     * @dev The operation failed because the contract is not paused.
     */
    error ExpectedPause();

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        if (paused()) {
            revert EnforcedPause();
        }
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        if (!paused()) {
            revert ExpectedPause();
        }
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


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

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/access/Ownable2Step.sol


// OpenZeppelin Contracts (last updated v5.1.0) (access/Ownable2Step.sol)

pragma solidity ^0.8.20;


/**
 * @dev Contract module which provides access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This extension of the {Ownable} contract includes a two-step mechanism to transfer
 * ownership, where the new owner must call {acceptOwnership} in order to replace the
 * old one. This can help prevent common mistakes, such as transfers of ownership to
 * incorrect accounts, or to contracts that are unable to interact with the
 * permission system.
 *
 * The initial owner is specified at deployment time in the constructor for `Ownable`. This
 * can later be changed with {transferOwnership} and {acceptOwnership}.
 *
 * This module is used through inheritance. It will make available all functions
 * from parent (Ownable).
 */
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

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

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

    /**
     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
     * Can only be called by the current owner.
     *
     * Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.
     */
    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    /**
     * @dev The new owner accepts the ownership transfer.
     */
    function acceptOwnership() public virtual {
        address sender = _msgSender();
        if (pendingOwner() != sender) {
            revert OwnableUnauthorizedAccount(sender);
        }
        _transferOwnership(sender);
    }
}

// File: @openzeppelin/contracts/utils/ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)

pragma solidity ^0.8.20;

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

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

    uint256 private _status;

    /**
     * @dev Unauthorized reentrant call.
     */
    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be NOT_ENTERED
        if (_status == ENTERED) {
            revert ReentrancyGuardReentrantCall();
        }

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

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == ENTERED;
    }
}

// File: mining/WalletAuthorizable.sol


pragma solidity ^0.8.28;

abstract contract WalletAuthorizable {
    
    IWalletSecurePin public walletSecurePin;
    bool public authorizationCheckEnabled;
    
    error UnauthorizedWallet();
    error InvalidAddress();
    
    event WalletSecurePinUpdated(address indexed oldContract, address indexed newContract);
    event AuthorizationCheckToggled(bool enabled);
    
    

    constructor(address _walletSecurePin) {
        if (_walletSecurePin == address(0)) revert InvalidAddress();
        walletSecurePin = IWalletSecurePin(_walletSecurePin);
        authorizationCheckEnabled = true;
        emit WalletSecurePinUpdated(address(0), _walletSecurePin);
    }
    
    

    modifier onlyAuthorizedWallet(address owner) {
        _validateWalletAuthorization(owner);
        _;
    }
    
    

    modifier onlyOwnerOrAuthorized(address owner) {
        _validateWalletAuthorization(owner);
        _;
    }
    
    

    function _validateWalletAuthorization(address owner) internal view virtual {
        if (owner == address(0)) revert InvalidAddress();
        

        if (!authorizationCheckEnabled) return;
        

        if (msg.sender == owner) return;
        

        if (address(walletSecurePin) == address(0)) {
            revert UnauthorizedWallet();
        }
        

        bool authorized = false;
        try walletSecurePin.isAuthorizedWallet(owner, msg.sender) returns (bool result) {
            authorized = result;
        } catch {

        }
        
        if (!authorized) {
            revert UnauthorizedWallet();
        }
    }
    
    

    function _setWalletSecurePin(address _walletSecurePin) internal virtual {
        if (_walletSecurePin == address(0)) revert InvalidAddress();
        
        address oldContract = address(walletSecurePin);
        walletSecurePin = IWalletSecurePin(_walletSecurePin);
        
        emit WalletSecurePinUpdated(oldContract, _walletSecurePin);
    }
    
    

    function updateWalletSecurePin(address _walletSecurePin) public virtual {
        _setWalletSecurePin(_walletSecurePin);
    }
    
    

    function toggleAuthorizationCheck(bool enabled) public virtual {
        _setAuthorizationCheck(enabled);
    }
    
    

    function _setAuthorizationCheck(bool enabled) internal virtual {
        authorizationCheckEnabled = enabled;
        emit AuthorizationCheckToggled(enabled);
    }
    
    

    function getWalletSecurePinAddress() external view returns (address) {
        return address(walletSecurePin);
    }
    
    

    function isAuthorizationCheckEnabled() external view returns (bool) {
        return authorizationCheckEnabled;
    }
    
    

    function isWalletAuthorized(address owner, address wallet) external view returns (bool) {
        if (owner == address(0) || wallet == address(0)) return false;
        

        if (!authorizationCheckEnabled) return true;
        
        if (wallet == owner) return true;
        if (address(walletSecurePin) == address(0)) return false;
        
        try walletSecurePin.isAuthorizedWallet(owner, wallet) returns (bool result) {
            return result;
        } catch {
            return false;
        }
    }
}

interface IWalletSecurePin {
    function isAuthorizedWallet(address externalWallet, address internalWallet) external view returns (bool);
}

// File: mining/mining_stable_MQT.sol


pragma solidity ^0.8.34;




contract POPA_SUBMISSIONS is Pausable, Ownable2Step, ReentrancyGuard, WalletAuthorizable {
    mapping ( address => bool ) public  allowedContracts;
    mapping ( uint256 => uint256 ) public  totalDailyShares;
    mapping ( bytes => shareData ) public  submitted;
    mapping ( bytes => shareData ) public  claimed;
    mapping ( address => submittedData[] ) public  submittedByDock;
    mapping ( address => mapping(uint => bool) ) public  submittedByOwner;
    mapping ( uint => mapping(uint => address) ) public  submittedByMiner;
    mapping (bytes => bool) public usedData;
    mapping (uint => uint) public dailySubmissions;
    POPA_SUBMISSIONS public legacyCon;
    mapping (address => mapping ( uint=> bool)) public legacySubmittedByOwner;
    mapping (address => uint) public daysClaimed;
    mapping (address => mapping (uint => bool)) public dayClaimed;
    int public timeZoneOffset;
    uint public startingDate;
    uint public daysBuffer;

    bool public checkDataUnique;

    IDock public dockCon;
    IAirdrops public airdropsCon;
    IActivities public activitiesCon;
    IFees public feesCon;
    ILogs public logsCon;
    ILease public leaseCon;
    IPhantom public phantomCon;

    address public usdToken;
    address public wrappedCoin;
    address public mainToken;
    
    mapping(uint => address) public stableTkns;

    constructor(address _walletSecurePin) 
        Ownable(msg.sender) 
        WalletAuthorizable(_walletSecurePin) 
    {
        legacyCon = POPA_SUBMISSIONS(0xd14F01bfa5999E65780167A0EA530Ecf3D0AA24D);
        dockCon = IDock(0x836344e444d999FDdecb6E9CC2Feb08E16D38789);
        airdropsCon = IAirdrops(0x929b9A9f01E7E3A857A483011596EF98876f8830);
        activitiesCon = IActivities(0xAe10DA21826d1954FbBdb7165F90C3B135524245);
        phantomCon = IPhantom(0x36ae20f15BaDe66f9Ae22D1A3795cfe1310691d7);
        feesCon = IFees(0x30F536dcfd52fC57A2c6C32BDA1cf9D62826CCE1);
        usdToken = 0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7;
        wrappedCoin = 0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7;
        mainToken = 0xef0cdae2FfEEeFA539a244a16b3f46ba75b8c810;
        daysBuffer = 3;
        timeZoneOffset = -5;
        logsCon = ILogs(0xC2bae1d5950Afac275d7F0Cc8d10F62963C59b12);
        leaseCon = ILease(address(0));
        stableTkns[0] = 0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7;
        stableTkns[1] = 0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E;
        // Skip legacy import in constructor to avoid deployment issues
        // __importLegacyGlobalShares(19920, 20350);
    }
    struct shareData{address _owner;uint shares;uint day;}
    struct submittedData{uint shares;uint _day;}
    struct submittedPerDay{uint _day;uint _nbr;uint _shares;}
    struct removeSubmitData{uint tokenId;uint index;}
    struct dockCompData{uint _userSlots; uint _dockedNbr; uint[] _docked; uint _leasedNbr; uint[] _leased; uint[] _phantom;}
    

    event submitEvent(uint _shares,address _owner,uint _round);
    event claimEvent(address _owner,uint _totalDays,uint _totalShares);

    function pause() public onlyOwner {_pause();}
    function unpause() public onlyOwner {_unpause();}
    modifier onlyAllowedContract (){require(allowedContracts[msg.sender] == true);_;}
    function allowContract ( address _addr ) onlyOwner public {
        allowedContracts[_addr ] = true;
    }
    function disallowContract ( address _addr ) onlyOwner public  {
        allowedContracts[_addr ] = false;
    }

    function __importLegacyGlobalShares(uint _start, uint _end) public onlyOwner {
        uint totalImported = 0;
        for (uint i= _start; i<= _end; i++) {
            totalDailyShares[i] = legacyCon.totalDailyShares(i);
            unchecked { ++totalImported; }
        }
    }
    function getUserDockComposition(address _user) public view returns (dockCompData memory compData) {

        IDock.userDock memory dock = dockCon.getUserDock(_user);
        compData._userSlots = dock._userSlots;
        compData._docked = dock._userDock;
        compData._dockedNbr = compData._docked.length;
        

        if (address(leaseCon) != address(0)) {
            compData._leased = leaseCon.getLeased(_user);
        } else {
            compData._leased = new uint[](0);
        }
        compData._leasedNbr = compData._leased.length;
        

        if (address(phantomCon) != address(0)) {
            (uint tier, uint count) = phantomCon.getUserActivePhantom(_user);
            if (tier > 0 && count > 0) {
                compData._phantom = new uint[](count);

                for (uint i = 0; i < count; i++) {
                    compData._phantom[i] = tier;
                }
            } else {
                compData._phantom = new uint[](0);
            }
        } else {
            compData._phantom = new uint[](0);
        }
    }
    

    function getUserDockCompositionLit(address _user) public view returns (uint[] memory allMiners) {

        uint[] memory docked = dockCon.getUserDock(_user)._userDock;
        uint dockedCount = docked.length;
        

        uint[] memory leased;
        uint leasedCount = 0;
        if (address(leaseCon) != address(0)) {
            leased = leaseCon.getLeased(_user);
            leasedCount = leased.length;
        }
        

        uint phantomCount = 0;
        uint phantomTier = 0;
        if (address(phantomCon) != address(0)) {
            (phantomTier, phantomCount) = phantomCon.getUserActivePhantom(_user);
            if (phantomTier == 0) phantomCount = 0;
        }
        

        uint totalCount = dockedCount + leasedCount + phantomCount;
        if (totalCount == 0) {
            return new uint[](0);
        }
        
        allMiners = new uint[](totalCount);
        uint index = 0;
        

        for (uint i = 0; i < dockedCount;) {
            allMiners[index++] = docked[i];
            unchecked { ++i; }
        }
        

        for (uint i = 0; i < leasedCount;) {
            allMiners[index++] = leased[i];
            unchecked { ++i; }
        }
        

        if (phantomCount > 0) {
            for (uint i = 0; i < phantomCount;) {
                allMiners[index++] = phantomTier;
                unchecked { ++i; }
            }
        }
        return allMiners;
    }
    
    function submit (uint _currency,address _owner,uint[] calldata _tokensId,uint256[] calldata data,uint[] calldata workouts,uint _day)
        public 
        payable 
        whenNotPaused 
        nonReentrant 
        onlyAuthorizedWallet(_owner)
        returns ( bool ) 
    {   require(_owner != msg.sender, "Wallet not allowed");
        require( isValidDateToSubmit(_day), "Submission outdated");
        require(!submittedByOwner[_owner][_day], "Already submitted");
        
        uint[] memory tokensId = getUserDockCompositionLit(_owner);
        require(tokensId.length > 0, "No tokens to submit with");
        
        (uint _feeUsd, uint _fees) = feesCon.getSubFees(tokensId);
        _processFeePayment(_currency, _feeUsd, _fees);
        
        if (checkDataUnique) {
            bytes memory fPrint = dataFprint(_day,data,workouts);
            require(!usedData[fPrint], "Data already submitted");
            usedData[fPrint] = true;
        }
        
        _validateMinersNotSubmitted(tokensId, _day);
        
        uint _shares = activitiesCon.multiComputeAllSharesBoosted(_owner, _day, tokensId, data, workouts);
        require(_shares > 0, "Zero shares can't be submitted");
        
        _recordSubmission(_owner, _day, _shares, tokensId);
        _logSubmitAction(_owner, _day, _shares, tokensId);
        
        emit submitEvent(_shares, _owner, _day);
        return true;
    }
    
    function _logSubmitAction(address _owner, uint _day, uint _shares, uint[] memory tokensId) internal {
        if(address(logsCon) != address(0)){
            uint[] memory _values = new uint[](2);
            _values[0] = _day;
            _values[1] = _shares;
            logsCon.logAction(_owner, 1, _values, tokensId);
        }
    }
    
    function _validateMinersNotSubmitted(uint[] memory tokensId, uint _day) internal view {
        for (uint i = 0; i < tokensId.length;) {
            uint tokenId = tokensId[i];
            if(tokenId > 100){
                require(submittedByMiner[tokenId][_day] == address(0), "One or more miners already submitted");
            }
            unchecked { ++i; }
        }
    }
    
    function _recordSubmission(address _owner, uint _day, uint _shares, uint[] memory tokensId) internal {
        bytes memory track = trackId(_owner, _day);
        shareData memory fin_data = shareData(_owner, _shares, _day);
        
        for (uint i = 0; i < tokensId.length;) {
            uint tokenId = tokensId[i];
            if(tokenId > 100){
                submittedByMiner[tokenId][_day] = _owner;
            }
            unchecked { ++i; }
        }
        
        totalDailyShares[_day] += _shares;
        dailySubmissions[_day] += 1;
        submittedByDock[_owner].push(submittedData(_shares, _day));
        submittedByOwner[_owner][_day] = true;
        submitted[track] = fin_data;
    }
    function _claim (address _owner, uint _currency) internal returns ( IAirdrops.sharesData[] memory ) {
        submittedData[] memory allClaims = getPendingClaims(_owner);
        uint totalDays = _countValidDays(allClaims);
        
        (uint _feeUsd, uint _fees) = getClaimFees(totalDays);
        _processFeePayment(_currency, _feeUsd, _fees);
        
        return _processClaimData(_owner, allClaims, totalDays);
    }
    
    function _countValidDays(submittedData[] memory allClaims) internal view returns (uint) {
        uint claimsLength = allClaims.length;
        uint maxDays = getMaxClaimDays();
        uint totalDays = 0;
        
        for (uint i = 0; i < claimsLength && totalDays < maxDays; ) {
            if (isValidDateToMine(allClaims[i]._day)) {
                unchecked { ++totalDays; }
            }
            unchecked { ++i; }
        }
        
        return totalDays;
    }
    
    function _processClaimData(address _owner, submittedData[] memory allClaims, uint totalDays) internal returns (IAirdrops.sharesData[] memory) {
        uint32 RATIO_MULTIPLIER = 1000000;
        IAirdrops.sharesData[] memory array = new IAirdrops.sharesData[](totalDays);
        
        uint totalShares = 0;
        uint _processed = 0;
        uint claimsLength = allClaims.length;
        
        for (uint i = 0; i < claimsLength && _processed < totalDays; ) {
            if (isValidDateToMine(allClaims[i]._day)) {
                totalShares += _processSingleClaim(_owner, allClaims[i], array, _processed, RATIO_MULTIPLIER);
                unchecked { ++_processed; }
            }
            unchecked { ++i; }
        }
        
        _logClaimAction(_owner, totalDays, totalShares);
        emit claimEvent(_owner, totalDays, totalShares);
        return array;
    }
    
    function _processSingleClaim(address _owner, submittedData memory claimData, IAirdrops.sharesData[] memory array, uint arrayIndex, uint32 RATIO_MULTIPLIER) internal returns (uint) {
        uint dayShares = claimData.shares;
        uint dayTotal = totalDailyShares[claimData._day];
        
        uint32 ratio = uint32((dayShares * RATIO_MULTIPLIER) / dayTotal);
        array[arrayIndex] = IAirdrops.sharesData(ratio, claimData._day);
        
        _updateClaimRecords(_owner, claimData._day);
        
        return dayShares;
    }
    
    function _updateClaimRecords(address _owner, uint claimDay) internal {
        dayClaimed[_owner][claimDay] = true;
        bytes memory track = trackId(_owner, claimDay);
        claimed[track] = submitted[track];
        delete submitted[track];
        removeFromSubmitterByNft(_owner, claimDay);
    }
    
    function _logClaimAction(address _owner, uint totalDays, uint totalShares) internal {
        if(address(logsCon) != address(0)){
            uint[] memory _values = new uint[](2);
            _values[0] = totalDays;
            _values[1] = totalShares;
            logsCon.logAction(_owner, 2, _values, new uint[](0));
        }
    }
    function claim (uint _currency, address _owner)
        payable 
        whenNotPaused 
        nonReentrant 
        onlyAuthorizedWallet(_owner)
        public 
        returns ( bool ) 
    {
        IAirdrops.sharesData[] memory totalRatio = _claim(_owner, _currency);
        airdropsCon.claimTokens(_owner, totalRatio);
        return true;
    }
    function addDailyShares (uint32 _day, uint _shares) public onlyAllowedContract  {
        totalDailyShares[_day] += _shares;
    }
    function removeFromSubmitterByNft(address _owner, uint _day) private {
        submittedData[] storage submissions = submittedByDock[_owner];
        uint len = submissions.length;
        uint index = len;
        for (uint i = 0; i < len; i++) {
            if (submissions[i]._day == _day) {index = i;break;}
        }
        if (index == len) {return;}
        for (uint i = index; i < len - 1; i++) {submissions[i] = submissions[i + 1];}
        submissions.pop();
    }
    function isAlreadySubmitted (address _owner, uint _days) public view returns (bool) {
        bool legacySubmitted = false;
        if (address(legacyCon) != address(0)) {legacySubmitted = legacyCon.isAlreadySubmitted(_owner, _days);}
        return submittedByOwner[_owner][_days] || legacySubmitted;
    }
    function isAlreadySubmittedByMiner (uint _tkn, uint _day) public view returns (bool) {
        return submittedByMiner[_tkn][_day] != address(0);
    }
    function getInvalidMinersToSubmit(uint[] memory _tkns, uint _day) public view returns (uint[] memory _invalid) {
        uint count = 0;
        for (uint i = 0; i < _tkns.length; i++) {if (isAlreadySubmittedByMiner(_tkns[i], _day)) {count++;}}
        _invalid = new uint[](count);
        uint index = 0;
        for (uint i = 0; i < _tkns.length; i++) {if (isAlreadySubmittedByMiner(_tkns[i], _day)) {_invalid[index++] = _tkns[i];}}
        return _invalid;
    }
    function getPendingClaimsNbr(address _owner) public view returns(uint){return getPendingClaims(_owner).length;}
    function getPendingClaims(address _owner) public view returns (submittedData[] memory) {
        submittedData[] memory old;
        if (address(legacyCon) != address(0)) {old = legacyCon.getPendingClaims(_owner);} else {old = new submittedData[](0) ;}
        submittedData[] memory current = submittedByDock[_owner];
        submittedData[] memory combinedTemp = new submittedData[](old.length + current.length);
        uint count = 0;
        for (uint i = 0; i < old.length; i++) {if (!dayClaimed[_owner][old[i]._day]) {combinedTemp[count++] = old[i];}}
        for (uint j = 0; j < current.length; j++) {if (!dayClaimed[_owner][current[j]._day]) {combinedTemp[count++] = current[j];}}
        submittedData[] memory combined = new submittedData[](count);
        for (uint k = 0; k < count; k++) {combined[k] = combinedTemp[k];}
        return combined;
    }
    function getSubmissionsPerDay(uint _day, uint _length) public view returns (submittedPerDay[] memory) {
        submittedPerDay[] memory array = new submittedPerDay[](_length);
        for (uint i = 0; i < _length; i++) {
            array[i] = submittedPerDay(_day - i, dailySubmissions[_day - i], totalDailyShares[_day - i]);
        }
        return array;
    }
    function getSubPerDay (address _owner, uint32 _days) public view returns (shareData memory) {
        bytes memory ref = trackId(_owner, _days);
        shareData memory cur = submitted[ref];
        if (cur.shares == 0 && address(legacyCon) != address(0)) {
            return legacyCon.getSubPerDay(_owner, _days);
        }
        return cur;
    }
    function getClaimPerDay (address _owner, uint32 _days) public view returns (shareData memory) {
        bytes memory ref = trackId(_owner, _days);
        shareData memory cur = claimed[ref];
        if (cur.shares == 0 && address(legacyCon) != address(0)) {
            return legacyCon.getClaimPerDay(_owner, _days);
        }
        return cur;
    }
    
    function getDate() public view returns(uint){return getTime() / 1 days;}
    function getTime() public view virtual returns(uint){return uint(int(block.timestamp) + (timeZoneOffset * 1 hours));}
    function SetTimeZoneOffset(int _value) public onlyOwner {
        timeZoneOffset = _value;
    }

    function getDayShares (uint _day) public view returns (uint) {return totalDailyShares[_day];}
    function simulateShares(uint[] calldata tokensId,uint256[] calldata data,uint[] calldata workouts) public view returns(uint){return activitiesCon.multiComputeAllShares(tokensId, data, workouts);}
    function simulateSharesBoosted(address user, uint256 day, uint[] calldata tokensId,uint256[] calldata data,uint[] calldata workouts) public view returns(uint){return activitiesCon.multiComputeAllSharesBoosted(user, day, tokensId, data, workouts);}
    function isValidDateToSubmit (uint _days) public view returns (bool) {return (getDate() - _days) < daysBuffer;}
    function isValidDateToMine (uint _days) public view returns (bool) {if(_days > getDate()) return false;if(_days < startingDate) return false;return (getDate() - _days) > (daysBuffer - 1);}

    function getAirdropsPerDay() public view returns (IAirdrops.dailyDistribution[] memory){return airdropsCon.getAirdropsPerDay();}
    function getAirdropsActive() public view returns (address[] memory) {
        IAirdrops.dailyDistribution[] memory list = airdropsCon.getAirdropsPerDay();
        uint listLength = list.length;
        

        uint activeCount = 0;
        for (uint i = 0; i < listLength;) {
            (,,,,,,bool active) = airdropsCon.getTokenData(list[i]._addr);
            if (active) {
                unchecked { ++activeCount; }
            }
            unchecked { ++i; }
        }
        

        address[] memory array = new address[](activeCount);
        uint index = 0;
        for (uint i = 0; i < listLength;) {
            (,,,,,,bool active) = airdropsCon.getTokenData(list[i]._addr);
            if (active) {
                array[index] = list[i]._addr;
                unchecked { ++index; }
            }
            unchecked { ++i; }
        }
        return array;
    }
    function trackId (address _owner, uint _days) public pure returns (bytes memory) {return abi.encodePacked(_owner, _days);}
    function dataFprint(uint _days, uint256[] calldata data, uint[] calldata workouts) public pure returns (bytes memory) {return abi.encodePacked(_days, data, workouts);}

    function getMaxClaimDays () public view returns (uint){ return feesCon.getMaxClaimDays();}
    function getTokenValueTier () public view returns (uint){return feesCon.getTokenValueTier();}    
    function getSubFees (uint[] calldata tokensId) public view returns (uint _usd, uint _coin){return feesCon.getSubFees(tokensId);}
    function getClaimFees(uint _days) public view returns (uint _usd, uint _coin){return feesCon.getClaimFees(_days);}
    
    function convertToStable(uint _value6, address _tokenAddress) public view returns (uint) {
        require(_tokenAddress != address(0), "Invalid token address");
        uint8 decimals = ERC20(_tokenAddress).decimals();
        
        if (decimals == 6) {
            return _value6;
        } else if (decimals == 18) {
            return _value6 * 10**12;
        } else {
            uint decimalDifference = uint(decimals) - 6;
            return _value6 * (10 ** decimalDifference);
        }
    }
    
    function _processFeePayment(uint _currency, uint _feeUsd, uint _feeNative) internal {
        if (_currency == 0) {
            // Pay with native token (AVAX)
            require(msg.value >= _feeNative, "Not enough funds sent");
        } else if (_currency >= 1 && _currency <= 5) {
            // Pay with stable token
            uint stableIndex = _currency - 1;
            address stableToken = stableTkns[stableIndex];
            require(stableToken != address(0), "Invalid currency");
            
            uint stableAmount = convertToStable(_feeUsd, stableToken);
            require(ERC20(stableToken).transferFrom(msg.sender, address(this), stableAmount), "Token transfer failed");
        } else {
            revert("Invalid currency");
        }
    }

    function setusdTokenAddress(address _addr) public onlyOwner {
        usdToken = _addr;
    }
    function setwrappedCoinAddress(address _addr) public onlyOwner {
        wrappedCoin = _addr;
    }
    function setLegacyContract (address _addr) public onlyOwner {
        legacyCon = POPA_SUBMISSIONS(_addr);
    }
    function setActivitiesContract (address _addr) public onlyOwner {
        activitiesCon = IActivities(_addr);
    }
    function setdockContract (address _addr) public onlyOwner {
        dockCon = IDock(_addr);
    }
    function setFeesContract (address _addr) public onlyOwner {
        feesCon = IFees(_addr);
    }
    function setLogsContract (address _addr) public onlyOwner {
        logsCon = ILogs(_addr);
    }
    function setLeaseContract (address _addr) public onlyOwner {
        leaseCon = ILease(_addr);
    }
    function setPhantomContract (address _addr) public onlyOwner {
        phantomCon = IPhantom(_addr);
    }
    function setAirdropsContract (address _addr) public onlyOwner {
        airdropsCon = IAirdrops(_addr);
    }

    function setStableTkn(uint _index, address _tokenAddress) public onlyOwner {
        require(_index < 5, "Token index must be less than 5");
        stableTkns[_index] = _tokenAddress;
    }
    
    function getStableTkns() public view returns (address[] memory) {
        uint validCount = 0;
        
        for (uint i = 0; i < 5; i++) {
            if (stableTkns[i] != address(0)) {
                validCount++;
            }
        }
        
        address[] memory validTokens = new address[](validCount);
        uint index = 0;
        for (uint i = 0; i < 5; i++) {
            if (stableTkns[i] != address(0)) {
                validTokens[index++] = stableTkns[i];
            }
        }
        
        return validTokens;
    }
    
    function updateWalletSecurePin(address _walletSecurePin) 
        public 
        override 
        onlyOwner 
    {
        _setWalletSecurePin(_walletSecurePin);
    }
    
    function toggleAuthorizationCheck(bool enabled) 
        public 
        override 
        onlyOwner 
    {
        _setAuthorizationCheck(enabled);
    }
    function setStartingDate (uint _days) public onlyOwner {
        startingDate = _days;
    }
    function setUniqueCheck (bool _v) public onlyOwner {
        checkDataUnique = _v;
    }
    function setDaysBuffer (uint _days) public onlyOwner {
        daysBuffer = _days;
    }
    function getDaysBuffer () public view returns (uint) {return daysBuffer;}

    function adjustShares(uint _day, address[] calldata _wallets, uint[] calldata _correctShares) public onlyOwner {
        require(_wallets.length == _correctShares.length, "Arrays length mismatch");
        require(_wallets.length > 0, "Empty arrays");
        
        int totalDifference = 0;
        
        for (uint i = 0; i < _wallets.length; i++) {
            address wallet = _wallets[i];
            uint correctShares = _correctShares[i];
            
            // Get current submitted shares (handles legacy contract)
            shareData memory currentData = getSubPerDay(wallet, uint32(_day));
            
            require(currentData.shares > 0, "No submission found for wallet");
            require(currentData.day == _day, "Day mismatch");
            
            // Calculate difference (current - correct)
            int difference = int(currentData.shares) - int(correctShares);
            totalDifference += difference;
            
            // Update submitted shares to correct value in current contract
            bytes memory track = trackId(wallet, _day);
            submitted[track].shares = correctShares;
            submitted[track]._owner = wallet;
            submitted[track].day = _day;
        }
        
        // Adjust global daily shares
        // If totalDifference is positive, we over-counted, so subtract
        // If totalDifference is negative, we under-counted, so add
        if (totalDifference > 0) {
            totalDailyShares[_day] -= uint(totalDifference);
        } else if (totalDifference < 0) {
            totalDailyShares[_day] += uint(-totalDifference);
        }
    }

    function getBalance() public view returns(uint) {return address(this).balance;}
    function withdraw() public onlyOwner nonReentrant {
        uint amount = getBalance();
        (bool success, ) = payable(msg.sender).call{value: amount}("");
        require(success, "Transfer failed");
    }
    function withdrawAmount(uint _amount) public onlyOwner nonReentrant {
        require(_amount <= getBalance(), "err : Amount > Balance");
        (bool success, ) = payable(msg.sender).call{value: _amount}("");
        require(success, "Transfer failed");
    }
    function transferToken (address _tokenAddress, address addr, uint amount) public onlyOwner nonReentrant returns (uint256) {
        ERC20(_tokenAddress).transfer(addr, amount);
        return ERC20(_tokenAddress).balanceOf(address(this));
    }
    function withdrawAllStable() public onlyOwner nonReentrant {
        address payable to = payable(msg.sender);
        for (uint i = 0; i < 5; i++) {
            if (stableTkns[i] != address(0)) {
                uint balance = ERC20(stableTkns[i]).balanceOf(address(this));
                if (balance > 0) {
                    ERC20(stableTkns[i]).transfer(to, balance);
                }
            }
        }
    }
    function withdrawTokenAll(address _tokenAddress) public onlyOwner nonReentrant {
        require(_tokenAddress != address(0), "Invalid token address");
        uint balance = ERC20(_tokenAddress).balanceOf(address(this));
        require(balance > 0, "No balance to withdraw");
        address payable to = payable(msg.sender);
        ERC20(_tokenAddress).transfer(to, balance);
    }
    function withdrawAll() public onlyOwner nonReentrant {
        // Withdraw all native coin
        uint nativeAmount = getBalance();
        if (nativeAmount > 0) {
            (bool success, ) = payable(msg.sender).call{value: nativeAmount}("");
            require(success, "Native transfer failed");
        }
        // Withdraw all stable tokens
        for (uint i = 0; i < 5; i++) {
            if (stableTkns[i] != address(0)) {
                uint balance = ERC20(stableTkns[i]).balanceOf(address(this));
                if (balance > 0) {
                    ERC20(stableTkns[i]).transfer(msg.sender, balance);
                }
            }
        }
    }
}
interface IActivities {
    function nftType (uint tokenId) external pure returns(uint);
    function computeAllShares (uint tokenId,uint[] calldata data,uint[] calldata workouts_list) external view returns ( uint );
    function multiComputeAllShares(uint[] calldata tokensId,uint[] calldata data,uint[] calldata workouts_list) external view returns ( uint );
    function multiComputeAllSharesBoosted(address user, uint256 day, uint[] calldata tokensId, uint[] calldata data, uint[] calldata workouts_list) external view returns (uint);
    function getMiningLevelBonus(uint tknId) external view returns (uint);
}
interface IDock {
    struct userDock {uint _userSlots;uint[] _userDock;}
    function getUserDock(address user) external view returns (userDock memory);
    function isOwnerOfAll(address _owner, uint[] calldata _nfts) external view returns (bool);
    function maxSlots() external view returns (uint);
}
interface IAirdrops {
    struct dailyDistribution {address _addr; string _name;uint _perDay; uint _startingDay;}
    struct sharesData {uint32 _shares; uint _day;}
    function getAirdropsPerDay() external view returns (dailyDistribution[] memory);
    function getTokenData(address addr) external view returns (address _addr,string  memory _name,string memory _symbol,uint256 _supply,uint256 _perDay,uint256 _claimed,bool _active );
    function claimTokens (address addr, sharesData[] memory ratios) external returns (bool);
    function claimTokens (address addr, sharesData[] memory ratios, address[] calldata _tkns) external returns (bool);
}
interface ITokenPricing {
    function getPrice(address tokenIn, address tokenOut, uint amountIn) external view returns (uint amountOut);
}
interface ERC20 {
    function decimals() external view returns (uint8);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}
interface IFees {
    function getMaxClaimDays () external view returns (uint);
    function getTokenValueTier () external view returns (uint);
    function getSubFeesPerMiner (uint tknId) external view returns (uint _usd, uint _coin);
    function getSubFees (uint[] calldata tokensId) external view returns (uint _usd, uint _coin);
    function getClaimFees(uint _days) external view returns (uint _usd, uint _coin);
}
interface ILogs {
    function logAction (address _user, uint _type, uint[] memory _values, uint[] memory _values2) external;
}
interface ILease {
    function getLeased (address _user) external view returns (uint[] memory items);
}
interface IPhantom {
    function getUserActivePhantom (address _user) external view returns (uint tier, uint count);
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_walletSecurePin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"UnauthorizedWallet","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AuthorizationCheckToggled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldContract","type":"address"},{"indexed":true,"internalType":"address","name":"newContract","type":"address"}],"name":"WalletSecurePinUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_totalDays","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_totalShares","type":"uint256"}],"name":"claimEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_shares","type":"uint256"},{"indexed":false,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_round","type":"uint256"}],"name":"submitEvent","type":"event"},{"inputs":[{"internalType":"int256","name":"_value","type":"int256"}],"name":"SetTimeZoneOffset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_end","type":"uint256"}],"name":"__importLegacyGlobalShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activitiesCon","outputs":[{"internalType":"contract IActivities","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_day","type":"uint32"},{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"addDailyShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_day","type":"uint256"},{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"uint256[]","name":"_correctShares","type":"uint256[]"}],"name":"adjustShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airdropsCon","outputs":[{"internalType":"contract IAirdrops","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"allowContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"authorizationCheckEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkDataUnique","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_currency","type":"uint256"},{"internalType":"address","name":"_owner","type":"address"}],"name":"claim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"claimed","outputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"day","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value6","type":"uint256"},{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"convertToStable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dailySubmissions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"},{"internalType":"uint256[]","name":"data","type":"uint256[]"},{"internalType":"uint256[]","name":"workouts","type":"uint256[]"}],"name":"dataFprint","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"dayClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daysBuffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"daysClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"disallowContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dockCon","outputs":[{"internalType":"contract IDock","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesCon","outputs":[{"internalType":"contract IFees","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAirdropsActive","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAirdropsPerDay","outputs":[{"components":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"_perDay","type":"uint256"},{"internalType":"uint256","name":"_startingDay","type":"uint256"}],"internalType":"struct IAirdrops.dailyDistribution[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"getClaimFees","outputs":[{"internalType":"uint256","name":"_usd","type":"uint256"},{"internalType":"uint256","name":"_coin","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint32","name":"_days","type":"uint32"}],"name":"getClaimPerDay","outputs":[{"components":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"day","type":"uint256"}],"internalType":"struct POPA_SUBMISSIONS.shareData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"getDayShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDaysBuffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tkns","type":"uint256[]"},{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"getInvalidMinersToSubmit","outputs":[{"internalType":"uint256[]","name":"_invalid","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxClaimDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getPendingClaims","outputs":[{"components":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"_day","type":"uint256"}],"internalType":"struct POPA_SUBMISSIONS.submittedData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getPendingClaimsNbr","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableTkns","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokensId","type":"uint256[]"}],"name":"getSubFees","outputs":[{"internalType":"uint256","name":"_usd","type":"uint256"},{"internalType":"uint256","name":"_coin","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint32","name":"_days","type":"uint32"}],"name":"getSubPerDay","outputs":[{"components":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"day","type":"uint256"}],"internalType":"struct POPA_SUBMISSIONS.shareData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_day","type":"uint256"},{"internalType":"uint256","name":"_length","type":"uint256"}],"name":"getSubmissionsPerDay","outputs":[{"components":[{"internalType":"uint256","name":"_day","type":"uint256"},{"internalType":"uint256","name":"_nbr","type":"uint256"},{"internalType":"uint256","name":"_shares","type":"uint256"}],"internalType":"struct POPA_SUBMISSIONS.submittedPerDay[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenValueTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserDockComposition","outputs":[{"components":[{"internalType":"uint256","name":"_userSlots","type":"uint256"},{"internalType":"uint256","name":"_dockedNbr","type":"uint256"},{"internalType":"uint256[]","name":"_docked","type":"uint256[]"},{"internalType":"uint256","name":"_leasedNbr","type":"uint256"},{"internalType":"uint256[]","name":"_leased","type":"uint256[]"},{"internalType":"uint256[]","name":"_phantom","type":"uint256[]"}],"internalType":"struct POPA_SUBMISSIONS.dockCompData","name":"compData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserDockCompositionLit","outputs":[{"internalType":"uint256[]","name":"allMiners","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWalletSecurePinAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"isAlreadySubmitted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tkn","type":"uint256"},{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"isAlreadySubmittedByMiner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAuthorizationCheckEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"isValidDateToMine","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"isValidDateToSubmit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"wallet","type":"address"}],"name":"isWalletAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"leaseCon","outputs":[{"internalType":"contract ILease","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"legacyCon","outputs":[{"internalType":"contract POPA_SUBMISSIONS","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"legacySubmittedByOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"logsCon","outputs":[{"internalType":"contract ILogs","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phantomCon","outputs":[{"internalType":"contract IPhantom","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setActivitiesContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setAirdropsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"setDaysBuffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setFeesContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setLeaseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setLegacyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setLogsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setPhantomContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"setStableTkn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"setStartingDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_v","type":"bool"}],"name":"setUniqueCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setdockContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setusdTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setwrappedCoinAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokensId","type":"uint256[]"},{"internalType":"uint256[]","name":"data","type":"uint256[]"},{"internalType":"uint256[]","name":"workouts","type":"uint256[]"}],"name":"simulateShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"day","type":"uint256"},{"internalType":"uint256[]","name":"tokensId","type":"uint256[]"},{"internalType":"uint256[]","name":"data","type":"uint256[]"},{"internalType":"uint256[]","name":"workouts","type":"uint256[]"}],"name":"simulateSharesBoosted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stableTkns","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_currency","type":"uint256"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256[]","name":"_tokensId","type":"uint256[]"},{"internalType":"uint256[]","name":"data","type":"uint256[]"},{"internalType":"uint256[]","name":"workouts","type":"uint256[]"},{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"submit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"submitted","outputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"day","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"submittedByDock","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"_day","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"submittedByMiner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"submittedByOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeZoneOffset","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleAuthorizationCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalDailyShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"trackId","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletSecurePin","type":"address"}],"name":"updateWalletSecurePin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"usedData","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletSecurePin","outputs":[{"internalType":"contract IWalletSecurePin","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAllStable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"withdrawTokenAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wrappedCoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405234801561000f575f5ffd5b506040516162cd3803806162cd83398101604081905261002e9161031d565b80338061005457604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005d816102a9565b5060016002556001600160a01b03811661008a5760405163e6c4247b60e01b815260040160405180910390fd5b600380546001600160a81b0319166001600160a01b038316908117600160a01b179091556040515f907f958d75e6176f26b8dda305a07f2e6abbc057c250bec1e18cbdf586dc235154e6908290a35050600d80546001600160a01b031990811673d14f01bfa5999e65780167a0ea530ecf3d0aa24d179091556014805474836344e444d999fddecb6e9cc2feb08e16d3878900610100600160a81b031990911617905560158054821673929b9a9f01e7e3a857a483011596ef98876f883017905560168054821673ae10da21826d1954fbbdb7165f90c3b135524245179055601a805482167336ae20f15bade66f9ae22d1a3795cfe1310691d71790556017805482167330f536dcfd52fc57a2c6c32bda1cf9d62826cce1179055601b80548216739702230a8ea53601f5cd2dc00fdbc13d4df4a8c7908117909155601c8054831673b31f66aa3c1e785363f0875a1b74e27b85fd66c7179055601d8054831673ef0cdae2ffeeefa539a244a16b3f46ba75b8c810179055600360135560041960115560188054831673c2bae1d5950afac275d7f0cc8d10f62963c59b121790556019805483169055601e6020527f65ce8396b736f5da9d881cc6fbcb11ef9721292dc41ec8c40879fd9edea5744d80548316909117905560015f527f873299c6a6c39b8b92f01922bb622df4a3236ea2876aac2da76f6c092cf7e98f805490911673b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e17905561034a565b600180546001600160a01b03191690556102c2816102c5565b50565b5f80546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b5f6020828403121561032d575f5ffd5b81516001600160a01b0381168114610343575f5ffd5b9392505050565b615f76806103575f395ff3fe60806040526004361061057b575f3560e01c80638456cb59116102cd578063d01460ca1161017a578063ec45864e116100e3578063f6df80551161009d578063f897a22b11610078578063f897a22b1461125e578063f8fd09e41461127d578063ff62309c146112a1578063ffc345c6146112c0575f5ffd5b8063f6df8055146111c4578063f7f5ed6114611214578063f88c4d0214611233575f5ffd5b8063ec45864e146110fb578063ef62071f14611134578063f2fde38b14611153578063f30ea6be14611172578063f5537ede14611186578063f6bd02fa146111a5575f5ffd5b8063e30c397811610134578063e30c39781461102e578063e438005d1461104b578063e4542aae1461106a578063e5a82bf714611089578063e5b5462d146110bd578063e9a3ccfa146110dc575f5ffd5b8063d01460ca14610f80578063d2f9d45b14610f9f578063d9be4b3e14610fbe578063dac6b05014610fdd578063ddd5e1b214610ffc578063dfda09051461100f575f5ffd5b80639ea507f211610236578063b6907c93116101f0578063c0382c08116101cb578063c0382c0814610f04578063c1df5cc814610f23578063cb0e122a14610f42578063cef59a9e14610f61575f5ffd5b8063b6907c9314610e51578063b6b67d9e14610e70578063bbac408c14610e8f575f5ffd5b80639ea507f214610da25780639edbc24614610dc15780639ff7a39d14610de0578063a7a6296014610dff578063b246794914610e13578063b3b3adc114610e32575f5ffd5b80638f3277fe116102875780638f3277fe14610ce5578063925b506a14610cf957806394a4c34a14610d2457806399a5432a14610d4357806399f9140514610d575780639d2e7b3414610d83575f5ffd5b80638456cb5914610c3d57806384be319d14610c51578063853828b614610c705780638685343614610c845780638da5cb5b14610ca35780638e45870f14610cc4575f5ffd5b806349b89bd31161042b5780636371177e11610394578063715018a61161034e57806377646389116103295780637764638914610bcb57806379ba509714610bea57806379dd33c214610bfe57806381da45b214610c1e575f5ffd5b8063715018a614610b765780637231535a14610b8a5780637232ed2714610b9f575f5ffd5b80636371177e14610a785780636725cda114610a9557806367645bbb14610ab45780636a9f280714610af35780636d37eda514610b2c57806370f9cecf14610b57575f5ffd5b80635629d258116103e55780635629d258146109ac57806358a215b0146109cb57806359fa047d146109ea5780635c975abb14610a245780635e37fb0014610a3a5780636167227a14610a59575f5ffd5b806349b89bd3146108e15780634b6592cc1461090057806351e0e26b1461091f578063527ba9af1461094d57806353d09aac1461096c578063557ed1ba14610998575f5ffd5b80633b6567c6116104e75780633e0e44d0116104a15780633fc15f151161047c5780633fc15f15146108705780633fce59081461088f578063430fe9c1146108ae578063440f82c9146108c2575f5ffd5b80633e0e44d0146108285780633e3ff7b6146108475780633f4ba83a1461085c575f5ffd5b80633b6567c6146107325780633c010dc9146107515780633ccfd60b1461078a5780633d93e02e1461079e5780633db7aced146107ca5780633de2662c146107de575f5ffd5b806319174c231161053857806319174c231461065a5780631e5e99061461068657806323eab2c2146106b157806332cbe4c4146106c457806334dc8ea5146106dd5780633728040814610711575f5ffd5b806304a8d7071461057f5780630562b9f7146105a757806307e438e2146105c85780630966a6a5146105ff57806312065fe01461061e57806312bd43bd14610630575b5f5ffd5b34801561058a575f5ffd5b5061059460135481565b6040519081526020015b60405180910390f35b3480156105b2575f5ffd5b506105c66105c1366004614d38565b6112df565b005b3480156105d3575f5ffd5b50600d546105e7906001600160a01b031681565b6040516001600160a01b03909116815260200161059e565b34801561060a575f5ffd5b506105c6610619366004614d63565b6113d2565b348015610629575f5ffd5b5047610594565b34801561063b575f5ffd5b50600354600160a01b900460ff165b604051901515815260200161059e565b348015610665575f5ffd5b50610679610674366004614d7e565b6113fc565b60405161059e9190614d9e565b348015610691575f5ffd5b506105946106a0366004614d38565b5f9081526005602052604090205490565b61064a6106bf366004614e31565b611501565b3480156106cf575f5ffd5b5060145461064a9060ff1681565b3480156106e8575f5ffd5b506106fc6106f7366004614eef565b611924565b6040805192835260208301919091520161059e565b34801561071c575f5ffd5b506107256119a4565b60405161059e9190614f5b565b34801561073d575f5ffd5b506105c661074c366004614d63565b611a17565b34801561075c575f5ffd5b5061064a61076b366004614ff4565b600960209081525f928352604080842090915290825290205460ff1681565b348015610795575f5ffd5b506105c6611a28565b3480156107a9575f5ffd5b506107bd6107b83660046150ce565b611acf565b60405161059e91906151a5565b3480156107d5575f5ffd5b50610594611bea565b3480156107e9575f5ffd5b506107fd6107f83660046151cf565b611c55565b6040805182516001600160a01b0316815260208084015190820152918101519082015260600161059e565b348015610833575f5ffd5b506106fc610842366004614d38565b611d85565b348015610852575f5ffd5b5061059460125481565b348015610867575f5ffd5b506105c6611dfc565b34801561087b575f5ffd5b50601d546105e7906001600160a01b031681565b34801561089a575f5ffd5b506105946108a9366004615202565b611e0c565b3480156108b9575f5ffd5b50610594611e90565b3480156108cd575f5ffd5b506105946108dc366004614d63565b611ea7565b3480156108ec575f5ffd5b506105946108fb36600461529e565b611eb8565b34801561090b575f5ffd5b506018546105e7906001600160a01b031681565b34801561092a575f5ffd5b5061064a610939366004614d63565b60046020525f908152604090205460ff1681565b348015610958575f5ffd5b50601c546105e7906001600160a01b031681565b348015610977575f5ffd5b5061098b610986366004614d63565b611fcd565b60405161059e91906152cc565b3480156109a3575f5ffd5b50610594612282565b3480156109b7575f5ffd5b506105c66109c6366004614d63565b61229d565b3480156109d6575f5ffd5b506105c66109e5366004614d38565b61242b565b3480156109f5575f5ffd5b5061064a610a0436600461536f565b8051602081830181018051600b8252928201919093012091525460ff1681565b348015610a2f575f5ffd5b505f5460ff1661064a565b348015610a45575f5ffd5b506105c6610a54366004614d63565b612438565b348015610a64575f5ffd5b506003546105e7906001600160a01b031681565b348015610a83575f5ffd5b506003546001600160a01b03166105e7565b348015610aa0575f5ffd5b506105c6610aaf366004614d63565b612460565b348015610abf575f5ffd5b506105e7610ace366004614d7e565b600a60209081525f92835260408084209091529082529020546001600160a01b031681565b348015610afe575f5ffd5b5061064a610b0d366004614ff4565b601060209081525f928352604080842090915290825290205460ff1681565b348015610b37575f5ffd5b50610594610b46366004614d38565b60056020525f908152604090205481565b348015610b62575f5ffd5b5061064a610b71366004614ff4565b61248a565b348015610b81575f5ffd5b506105c6612548565b348015610b95575f5ffd5b5061059460115481565b348015610baa575f5ffd5b50610bbe610bb9366004614ff4565b612559565b60405161059e91906153e3565b348015610bd6575f5ffd5b506105c6610be536600461529e565b612597565b348015610bf5575f5ffd5b506105c661261c565b348015610c09575f5ffd5b5060035461064a90600160a01b900460ff1681565b348015610c29575f5ffd5b506105c6610c38366004615402565b61265d565b348015610c48575f5ffd5b506105c6612678565b348015610c5c575f5ffd5b50610594610c6b36600461541d565b612688565b348015610c7b575f5ffd5b506105c6612705565b348015610c8f575f5ffd5b506105c6610c9e366004614d63565b6128da565b348015610cae575f5ffd5b505f5461010090046001600160a01b03166105e7565b348015610ccf575f5ffd5b50610cd8612904565b60405161059e91906154d4565b348015610cf0575f5ffd5b50610594612bae565b348015610d04575f5ffd5b50610594610d13366004614d38565b600c6020525f908152604090205481565b348015610d2f575f5ffd5b506107fd610d3e3660046151cf565b612bf5565b348015610d4e575f5ffd5b50601354610594565b348015610d62575f5ffd5b50610d76610d71366004614d63565b612cd9565b60405161059e9190615514565b348015610d8e575f5ffd5b506107bd610d9d366004614d63565b613097565b348015610dad575f5ffd5b506106fc610dbc366004614ff4565b6133af565b348015610dcc575f5ffd5b506105c6610ddb366004614d7e565b6133e7565b348015610deb575f5ffd5b506105c6610dfa366004614d63565b613490565b348015610e0a575f5ffd5b50610cd86134c0565b348015610e1e575f5ffd5b506016546105e7906001600160a01b031681565b348015610e3d575f5ffd5b506105c6610e4c366004615402565b6135d4565b348015610e5c575f5ffd5b5061064a610e6b366004615557565b6135e5565b348015610e7b575f5ffd5b506105c6610e8a366004615583565b6136e0565b348015610e9a575f5ffd5b50610edf610ea936600461536f565b80516020818301810180516007825292820191909301209152805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b03909416845260208401929092529082015260600161059e565b348015610f0f575f5ffd5b506105c6610f1e36600461559d565b61372c565b348015610f2e575f5ffd5b5061064a610f3d366004614d38565b6139df565b348015610f4d575f5ffd5b506015546105e7906001600160a01b031681565b348015610f6c575f5ffd5b506105c6610f7b366004614d63565b613a30565b348015610f8b575f5ffd5b5061064a610f9a366004614d38565b613a5a565b348015610faa575f5ffd5b50610bbe610fb936600461559d565b613a78565b348015610fc9575f5ffd5b506017546105e7906001600160a01b031681565b348015610fe8575f5ffd5b506105c6610ff7366004614d63565b613aad565b61064a61100a36600461529e565b613ad7565b34801561101a575f5ffd5b506019546105e7906001600160a01b031681565b348015611039575f5ffd5b506001546001600160a01b03166105e7565b348015611056575f5ffd5b506105c6611065366004614d63565b613b80565b348015611075575f5ffd5b506105c6611084366004614d38565b613baa565b348015611094575f5ffd5b506105e76110a3366004614d38565b601e6020525f90815260409020546001600160a01b031681565b3480156110c8575f5ffd5b5061064a6110d7366004614d7e565b613bb7565b3480156110e7575f5ffd5b50601a546105e7906001600160a01b031681565b348015611106575f5ffd5b5061064a611115366004614ff4565b600e60209081525f928352604080842090915290825290205460ff1681565b34801561113f575f5ffd5b506105c661114e366004614d38565b613bde565b34801561115e575f5ffd5b506105c661116d366004614d63565b613beb565b34801561117d575f5ffd5b506105c6613c61565b348015611191575f5ffd5b506105946111a0366004615614565b613da2565b3480156111b0575f5ffd5b506105c66111bf366004614d63565b613e9d565b3480156111cf575f5ffd5b50610edf6111de36600461536f565b80516020818301810180516006825292820191909301209152805460018201546002909201546001600160a01b03909116919083565b34801561121f575f5ffd5b506105c661122e366004614d63565b613ec8565b34801561123e575f5ffd5b5061059461124d366004614d63565b600f6020525f908152604090205481565b348015611269575f5ffd5b50601b546105e7906001600160a01b031681565b348015611288575f5ffd5b506014546105e79061010090046001600160a01b031681565b3480156112ac575f5ffd5b506105c66112bb366004614d63565b613ef2565b3480156112cb575f5ffd5b506105c66112da366004614d63565b613f1c565b6112e7613f46565b6112ef613f78565b4781111561133d5760405162461bcd60e51b8152602060048201526016602482015275657272203a20416d6f756e74203e2042616c616e636560501b60448201526064015b60405180910390fd5b6040515f90339083908381818185875af1925050503d805f811461137c576040519150601f19603f3d011682016040523d82523d5f602084013e611381565b606091505b50509050806113c45760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401611334565b506113cf6001600255565b50565b6113da613f46565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b60605f826001600160401b038111156114175761141761501e565b60405190808252806020026020018201604052801561146957816020015b61145660405180606001604052805f81526020015f81526020015f81525090565b8152602001906001900390816114355790505b5090505f5b838110156114f7576040518060600160405280828761148d9190615666565b8152602001600c5f61149f858a615666565b81526020019081526020015f2054815260200160055f84896114c19190615666565b81526020019081526020015f20548152508282815181106114e4576114e4615679565b602090810291909101015260010161146e565b5090505b92915050565b5f61150a613fa0565b611512613f78565b8861151c81613fc3565b336001600160a01b038b16036115695760405162461bcd60e51b815260206004820152601260248201527115d85b1b195d081b9bdd08185b1b1bddd95960721b6044820152606401611334565b61157283613a5a565b6115b45760405162461bcd60e51b815260206004820152601360248201527214dd589b5a5cdcda5bdb881bdd5d19185d1959606a1b6044820152606401611334565b6001600160a01b038a165f90815260096020908152604080832086845290915290205460ff161561161b5760405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e481cdd589b5a5d1d1959607a1b6044820152606401611334565b5f6116258b613097565b90505f8151116116775760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320746f207375626d6974207769746800000000000000006044820152606401611334565b6017546040516334dc8ea560e01b81525f9182916001600160a01b03909116906334dc8ea5906116ab9086906004016151a5565b6040805180830381865afa1580156116c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e9919061568d565b915091506116f88e83836140d0565b60145460ff16156117b0575f611711878c8c8c8c613a78565b9050600b8160405161172391906156af565b9081526040519081900360200190205460ff161561177c5760405162461bcd60e51b815260206004820152601660248201527511185d1848185b1c9958591e481cdd589b5a5d1d195960521b6044820152606401611334565b6001600b8260405161178e91906156af565b908152604051908190036020019020805491151560ff19909216919091179055505b6117ba83876142a2565b5f60165f9054906101000a90046001600160a01b03166001600160a01b03166337d5b9eb8f89878f8f8f8f6040518863ffffffff1660e01b815260040161180797969594939291906156f5565b602060405180830381865afa158015611822573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118469190615751565b90505f81116118975760405162461bcd60e51b815260206004820152601e60248201527f5a65726f207368617265732063616e2774206265207375626d697474656400006044820152606401611334565b6118a38e888387614357565b6118af8e8883876144ff565b7f2dad5bc61871201926333cea2842b88a9e0b9e6dce31832196e80d8e810890f1818f896040516118fc939291909283526001600160a01b03919091166020830152604082015260600190565b60405180910390a16001955050505050506119176001600255565b9998505050505050505050565b6017546040516334dc8ea560e01b81525f9182916001600160a01b03909116906334dc8ea59061195a9087908790600401615768565b6040805180830381865afa158015611974573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611998919061568d565b915091505b9250929050565b601554604080516306e5008160e31b815290516060926001600160a01b0316916337280408916004808301925f9291908290030181865afa1580156119eb573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a1291908101906157c8565b905090565b611a1f613f46565b6113cf816145d9565b611a30613f46565b611a38613f78565b60405147905f90339083908381818185875af1925050503d805f8114611a79576040519150601f19603f3d011682016040523d82523d5f602084013e611a7e565b606091505b5050905080611ac15760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401611334565b5050611acd6001600255565b565b60605f805b8451811015611b1b57611b00858281518110611af257611af2615679565b602002602001015185613bb7565b15611b135781611b0f816158d0565b9250505b600101611ad4565b50806001600160401b03811115611b3457611b3461501e565b604051908082528060200260200182016040528015611b5d578160200160208202803683370190505b5091505f805b8551811015611be157611b8f868281518110611b8157611b81615679565b602002602001015186613bb7565b15611bd957858181518110611ba657611ba6615679565b6020026020010151848380611bba906158d0565b945081518110611bcc57611bcc615679565b6020026020010181815250505b600101611b63565b50505092915050565b60175460408051633db7aced60e01b815290515f926001600160a01b031691633db7aced9160048083019260209291908290030181865afa158015611c31573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a129190615751565b611c7f60405180606001604052805f6001600160a01b031681526020015f81526020015f81525090565b5f611c90848463ffffffff16612559565b90505f600782604051611ca391906156af565b908152604080516020928190038301812060608201835280546001600160a01b03168252600181015493820184905260020154918101919091529150158015611cf65750600d546001600160a01b031615155b15611d7d57600d54604051630f78998b60e21b81526001600160a01b03878116600483015263ffffffff8716602483015290911690633de2662c906044015b606060405180830381865afa158015611d50573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d7491906158e8565b925050506114fb565b949350505050565b6017546040516303e0e44d60e41b8152600481018390525f9182916001600160a01b0390911690633e0e44d0906024016040805180830381865afa158015611dcf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df3919061568d565b91509150915091565b611e04613f46565b611acd614651565b60165460405163d75ac32760e01b81525f916001600160a01b03169063d75ac32790611e46908a908a908a908a908a908a90600401615949565b602060405180830381865afa158015611e61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e859190615751565b979650505050505050565b5f62015180611e9d612282565b611a129190615984565b5f611eb182612cd9565b5192915050565b5f6001600160a01b038216611f075760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401611334565b5f826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f44573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f6891906159a3565b90508060ff16600603611f7e57839150506114fb565b8060ff16601203611fa057611f988464e8d4a510006159c3565b9150506114fb565b5f611faf600660ff8416615666565b9050611fbc81600a615abd565b611d7490866159c3565b5092915050565b6120036040518060c001604052805f81526020015f8152602001606081526020015f815260200160608152602001606081525090565b601454604051637539189960e11b81526001600160a01b0384811660048301525f926101009004169063ea723132906024015f60405180830381865afa15801561204f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120769190810190615b2d565b805183526020808201516040850181905251908401526019549091506001600160a01b031615612118576019546040516355682d0760e01b81526001600160a01b038581166004830152909116906355682d07906024015f60405180830381865afa1580156120e7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261210e9190810190615ba1565b608083015261212c565b604080515f81526020810190915260808301525b6080820151516060830152601a546001600160a01b03161561226857601a5460405162445ac960e21b81526001600160a01b0385811660048301525f9283929116906301116b24906024016040805180830381865afa158015612191573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b5919061568d565b915091505f821180156121c757505f81115b1561224d57806001600160401b038111156121e4576121e461501e565b60405190808252806020026020018201604052801561220d578160200160208202803683370190505b5060a08501525f5b8181101561224757828560a00151828151811061223457612234615679565b6020908102919091010152600101612215565b50612261565b604080515f81526020810190915260a08501525b505061227c565b604080515f81526020810190915260a08301525b50919050565b5f601154610e106122939190615bd2565b611a129042615c01565b6122a5613f46565b6122ad613f78565b6001600160a01b0381166122fb5760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401611334565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561233f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123639190615751565b90505f81116123ad5760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b6044820152606401611334565b60405163a9059cbb60e01b8152336004820181905260248201839052906001600160a01b0384169063a9059cbb906044016020604051808303815f875af11580156123fa573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061241e9190615c28565b5050506113cf6001600255565b612433613f46565b601355565b612440613f46565b6001600160a01b03165f908152600460205260409020805460ff19169055565b612468613f46565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b600d545f9081906001600160a01b03161561251557600d546040516370f9cecf60e01b81526001600160a01b03868116600483015260248201869052909116906370f9cecf90604401602060405180830381865afa1580156124ee573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125129190615c28565b90505b6001600160a01b0384165f90815260096020908152604080832086845290915290205460ff1680611d7d57509392505050565b612550613f46565b611acd5f6146a2565b604051606083811b6bffffffffffffffffffffffff191660208301526034820183905290605401604051602081830303815290604052905092915050565b61259f613f46565b600582106125ef5760405162461bcd60e51b815260206004820152601f60248201527f546f6b656e20696e646578206d757374206265206c657373207468616e2035006044820152606401611334565b5f918252601e602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b60015433906001600160a01b031681146126545760405163118cdaa760e01b81526001600160a01b0382166004820152602401611334565b6113cf816146a2565b612665613f46565b6014805460ff1916911515919091179055565b612680613f46565b611acd6146bb565b6016546040516337d5b9eb60e01b81525f916001600160a01b0316906337d5b9eb906126c6908c908c908c908c908c908c908c908c90600401615c43565b602060405180830381865afa1580156126e1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119179190615751565b61270d613f46565b612715613f78565b4780156127ac576040515f90339083908381818185875af1925050503d805f811461275b576040519150601f19603f3d011682016040523d82523d5f602084013e612760565b606091505b50509050806127aa5760405162461bcd60e51b815260206004820152601660248201527513985d1a5d99481d1c985b9cd9995c8819985a5b195960521b6044820152606401611334565b505b5f5b6005811015611ac1575f818152601e60205260409020546001600160a01b0316156128d2575f818152601e60205260408082205490516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612824573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128489190615751565b905080156128d0575f828152601e60205260409081902054905163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303815f875af11580156128aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ce9190615c28565b505b505b6001016127ae565b6128e2613f46565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b60605f60155f9054906101000a90046001600160a01b03166001600160a01b031663372804086040518163ffffffff1660e01b81526004015f60405180830381865afa158015612956573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261297d91908101906157c8565b80519091505f805b82811015612a485760155484515f916001600160a01b0316906313ff7e9f908790859081106129b6576129b6615679565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024015f60405180830381865afa158015612a03573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612a2a9190810190615ca1565b96505050505050508015612a3f578260010192505b50600101612985565b505f816001600160401b03811115612a6257612a6261501e565b604051908082528060200260200182016040528015612a8b578160200160208202803683370190505b5090505f805b84811015612ba35760155486515f916001600160a01b0316906313ff7e9f90899085908110612ac257612ac2615679565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024015f60405180830381865afa158015612b0f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612b369190810190615ca1565b96505050505050508015612b9a57868281518110612b5657612b56615679565b60200260200101515f0151848481518110612b7357612b73615679565b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b50600101612a91565b509095945050505050565b601754604080516347993bff60e11b815290515f926001600160a01b031691638f3277fe9160048083019260209291908290030181865afa158015611c31573d5f5f3e3d5ffd5b612c1f60405180606001604052805f6001600160a01b031681526020015f81526020015f81525090565b5f612c30848463ffffffff16612559565b90505f600682604051612c4391906156af565b908152604080516020928190038301812060608201835280546001600160a01b03168252600181015493820184905260020154918101919091529150158015612c965750600d546001600160a01b031615155b15611d7d57600d54604051634a5261a560e11b81526001600160a01b03878116600483015263ffffffff87166024830152909116906394a4c34a90604401611d35565b600d5460609081906001600160a01b031615612d6457600d546040516399f9140560e01b81526001600160a01b038581166004830152909116906399f91405906024015f60405180830381865afa158015612d36573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612d5d9190810190615d49565b9050612da3565b604080515f8082526020820190925290612d9f565b604080518082019091525f8082526020820152815260200190600190039081612d795790505b5090505b6001600160a01b0383165f90815260086020908152604080832080548251818502810185019093528083529192909190849084015b82821015612e1b578382905f5260205f2090600202016040518060400160405290815f820154815260200160018201548152505081526020019060010190612dd8565b5050505090505f81518351612e309190615dfe565b6001600160401b03811115612e4757612e4761501e565b604051908082528060200260200182016040528015612e8b57816020015b604080518082019091525f8082526020820152815260200190600190039081612e655790505b5090505f805b8451811015612f38576001600160a01b0387165f9081526010602052604081208651909190879084908110612ec857612ec8615679565b60209081029190910181015181015182528101919091526040015f205460ff16612f3057848181518110612efe57612efe615679565b6020026020010151838380612f12906158d0565b945081518110612f2457612f24615679565b60200260200101819052505b600101612e91565b505f5b8351811015612fe2576001600160a01b0387165f9081526010602052604081208551909190869084908110612f7257612f72615679565b60209081029190910181015181015182528101919091526040015f205460ff16612fda57838181518110612fa857612fa8615679565b6020026020010151838380612fbc906158d0565b945081518110612fce57612fce615679565b60200260200101819052505b600101612f3b565b505f816001600160401b03811115612ffc57612ffc61501e565b60405190808252806020026020018201604052801561304057816020015b604080518082019091525f808252602082015281526020019060019003908161301a5790505b5090505f5b8281101561308c5783818151811061305f5761305f615679565b602002602001015182828151811061307957613079615679565b6020908102919091010152600101613045565b509695505050505050565b601454604051637539189960e11b81526001600160a01b0383811660048301526060925f926101009091049091169063ea723132906024015f60405180830381865afa1580156130e9573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526131109190810190615b2d565b602001518051601954919250906060905f906001600160a01b0316156131a5576019546040516355682d0760e01b81526001600160a01b038881166004830152909116906355682d07906024015f60405180830381865afa158015613177573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261319e9190810190615ba1565b9150815190505b601a545f9081906001600160a01b03161561323457601a5460405162445ac960e21b81526001600160a01b038a81166004830152909116906301116b24906024016040805180830381865afa158015613200573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613224919061568d565b925090505f819003613234575f91505b5f826132408588615dfe565b61324a9190615dfe565b9050805f0361326e575050604080515f815260208101909152979650505050505050565b806001600160401b038111156132865761328661501e565b6040519080825280602002602001820160405280156132af578160200160208202803683370190505b5097505f805b87811015613308578881815181106132cf576132cf615679565b60200260200101518a83806132e3906158d0565b9450815181106132f5576132f5615679565b60209081029190910101526001016132b5565b505f5b8581101561335e5786818151811061332557613325615679565b60200260200101518a8380613339906158d0565b94508151811061334b5761334b615679565b602090810291909101015260010161330b565b5083156133a2575f5b848110156133a057838a8361337b816158d0565b94508151811061338d5761338d615679565b6020908102919091010152600101613367565b505b5050505050505050919050565b6008602052815f5260405f2081815481106133c8575f80fd5b5f91825260209091206002909102018054600190910154909250905082565b6133ef613f46565b5f825b82811161348a57600d54604051636d37eda560e01b8152600481018390526001600160a01b0390911690636d37eda590602401602060405180830381865afa158015613440573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134649190615751565b5f8281526005602052604090205560019091019080613482816158d0565b9150506133f2565b50505050565b613498613f46565b601480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60605f805b6005811015613500575f818152601e60205260409020546001600160a01b0316156134f857816134f4816158d0565b9250505b6001016134c5565b505f816001600160401b0381111561351a5761351a61501e565b604051908082528060200260200182016040528015613543578160200160208202803683370190505b5090505f805b60058110156135cb575f818152601e60205260409020546001600160a01b0316156135c3575f818152601e60205260409020546001600160a01b03168383613590816158d0565b9450815181106135a2576135a2615679565b60200260200101906001600160a01b031690816001600160a01b0316815250505b600101613549565b50909392505050565b6135dc613f46565b6113cf816146f7565b5f6001600160a01b038316158061360357506001600160a01b038216155b1561360f57505f6114fb565b600354600160a01b900460ff16613628575060016114fb565b826001600160a01b0316826001600160a01b031603613649575060016114fb565b6003546001600160a01b031661366057505f6114fb565b600354604051632305259560e01b81526001600160a01b038581166004830152848116602483015290911690632305259590604401602060405180830381865afa9250505080156136ce575060408051601f3d908101601f191682019092526136cb91810190615c28565b60015b6136d957505f6114fb565b90506114fb565b335f9081526004602052604090205460ff1615156001146136ff575f5ffd5b63ffffffff82165f9081526005602052604081208054839290613723908490615dfe565b90915550505050565b613734613f46565b82811461377c5760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401611334565b826137b85760405162461bcd60e51b815260206004820152600c60248201526b456d7074792061727261797360a01b6044820152606401611334565b5f805b84811015613972575f8686838181106137d6576137d6615679565b90506020020160208101906137eb9190614d63565b90505f85858481811061380057613800615679565b9050602002013590505f613814838b612bf5565b90505f8160200151116138695760405162461bcd60e51b815260206004820152601e60248201527f4e6f207375626d697373696f6e20666f756e6420666f722077616c6c657400006044820152606401611334565b898160400151146138ab5760405162461bcd60e51b815260206004820152600c60248201526b088c2f240dad2e6dac2e8c6d60a31b6044820152606401611334565b5f8282602001516138bc9190615e11565b90506138c88187615c01565b95505f6138d5858d612559565b9050836006826040516138e891906156af565b9081526020016040518091039020600101819055508460068260405161390e91906156af565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b0319909316929092179091558c9060069061394e9084906156af565b908152604051908190036020019020600201555050600190930192506137bb915050565b505f8113156139a3575f8681526005602052604081208054839290613998908490615666565b909155506139d79050565b5f8112156139d7576139b481615e30565b5f87815260056020526040812080549091906139d1908490615dfe565b90915550505b505050505050565b5f6139e8611e90565b8211156139f657505f919050565b601254821015613a0757505f919050565b6001601354613a169190615666565b82613a1f611e90565b613a299190615666565b1192915050565b613a38613f46565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b5f60135482613a67611e90565b613a719190615666565b1092915050565b60608585858585604051602001613a93959493929190615e71565b604051602081830303815290604052905095945050505050565b613ab5613f46565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b5f613ae0613fa0565b613ae8613f78565b81613af281613fc3565b5f613afd848661474f565b6015546040516264974560e91b81529192506001600160a01b03169063c92e8a0090613b2f9087908590600401615e8d565b6020604051808303815f875af1158015613b4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b6f9190615c28565b506001925050506114fb6001600255565b613b88613f46565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b613bb2613f46565b601155565b5f918252600a602090815260408084209284529190529020546001600160a01b0316151590565b613be6613f46565b601255565b613bf3613f46565b600180546001600160a01b0383166001600160a01b03199091168117909155613c295f546001600160a01b036101009091041690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b613c69613f46565b613c71613f78565b335f5b6005811015611ac1575f818152601e60205260409020546001600160a01b031615613d9a575f818152601e60205260408082205490516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613cea573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d0e9190615751565b90508015613d98575f828152601e60205260409081902054905163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015613d72573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d969190615c28565b505b505b600101613c74565b5f613dab613f46565b613db3613f78565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303815f875af1158015613dff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e239190615c28565b506040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015613e66573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8a9190615751565b9050613e966001600255565b9392505050565b613ea5613f46565b6001600160a01b03165f908152600460205260409020805460ff19166001179055565b613ed0613f46565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b613efa613f46565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b613f24613f46565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03610100909104163314611acd5760405163118cdaa760e01b8152336004820152602401611334565b6002805403613f9a57604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b5f5460ff1615611acd5760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b038116613fea5760405163e6c4247b60e01b815260040160405180910390fd5b600354600160a01b900460ff16613ffe5750565b6001600160a01b03811633036140115750565b6003546001600160a01b031661403a57604051634d7df47f60e01b815260040160405180910390fd5b600354604051632305259560e01b81526001600160a01b0383811660048301523360248301525f921690632305259590604401602060405180830381865afa9250505080156140a6575060408051601f3d908101601f191682019092526140a391810190615c28565b60015b156140ae5790505b806140cc57604051634d7df47f60e01b815260040160405180910390fd5b5050565b825f03614124578034101561411f5760405162461bcd60e51b8152602060048201526015602482015274139bdd08195b9bdd59da08199d5b991cc81cd95b9d605a1b6044820152606401611334565b505050565b60018310158015614136575060058311155b15614267575f614147600185615666565b5f818152601e60205260409020549091506001600160a01b0316806141a15760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642063757272656e637960801b6044820152606401611334565b5f6141ac8583611eb8565b6040516323b872dd60e01b8152336004820152306024820152604481018290529091506001600160a01b038316906323b872dd906064016020604051808303815f875af11580156141ff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142239190615c28565b6139d75760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401611334565b60405162461bcd60e51b815260206004820152601060248201526f496e76616c69642063757272656e637960801b6044820152606401611334565b5f5b825181101561411f575f8382815181106142c0576142c0615679565b60200260200101519050606481111561434e575f818152600a602090815260408083208684529091529020546001600160a01b03161561434e5760405162461bcd60e51b8152602060048201526024808201527f4f6e65206f72206d6f7265206d696e65727320616c7265616479207375626d696044820152631d1d195960e21b6064820152608401611334565b506001016142a4565b5f6143628585612559565b604080516060810182526001600160a01b0388168152602081018690529081018690529091505f5b83518110156143f4575f8482815181106143a6576143a6615679565b6020026020010151905060648111156143eb575f818152600a602090815260408083208a8452909152902080546001600160a01b0319166001600160a01b038a161790555b5060010161438a565b505f8581526005602052604081208054869290614412908490615dfe565b90915550505f858152600c60205260408120805460019290614435908490615dfe565b90915550506001600160a01b0386165f818152600860209081526040808320815180830183528981528084018b81528254600181810185559387528587209251600290910290920191825551908201559383526009825280832089845290915290819020805460ff19169092179091555181906006906144b69085906156af565b9081526040805160209281900383019020835181546001600160a01b0319166001600160a01b039091161781559183015160018301559190910151600290910155505050505050565b6018546001600160a01b03161561348a576040805160028082526060820183525f9260208301908036833701905050905083815f8151811061454357614543615679565b602002602001018181525050828160018151811061456357614563615679565b60209081029190910101526018546040516353dc3a9d60e01b81526001600160a01b03909116906353dc3a9d906145a590889060019086908890600401615ef4565b5f604051808303815f87803b1580156145bc575f5ffd5b505af11580156145ce573d5f5f3e3d5ffd5b505050505050505050565b6001600160a01b0381166146005760405163e6c4247b60e01b815260040160405180910390fd5b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f958d75e6176f26b8dda305a07f2e6abbc057c250bec1e18cbdf586dc235154e6905f90a35050565b61465961478e565b5f805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600180546001600160a01b03191690556113cf816147b0565b6146c3613fa0565b5f805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586146853390565b60038054821515600160a01b0260ff60a01b199091161790556040517f4e923f6d403856ede9e32222960f8ea845b4a9f5d00a799d3deb2db8a5af9c7c9061474490831515815260200190565b60405180910390a150565b60605f61475b84612cd9565b90505f61476782614808565b90505f5f61477483611d85565b915091506147838683836140d0565b611e85878585614870565b5f5460ff16611acd57604051638dfc202b60e01b815260040160405180910390fd5b5f80546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b80515f9081614815611bea565b90505f805b838110801561482857508282105b156148675761485386828151811061484257614842615679565b6020026020010151602001516139df565b1561485f578160010191505b60010161481a565b50949350505050565b6060620f42405f836001600160401b0381111561488f5761488f61501e565b6040519080825280602002602001820160405280156148d357816020015b604080518082019091525f80825260208201528152602001906001900390816148ad5790505b5085519091505f908190815b81811080156148ed57508783105b1561494d5761490789828151811061484257614842615679565b15614945576149328a8a838151811061492257614922615679565b602002602001015187868a6149b0565b61493c9085615dfe565b93508260010192505b6001016148df565b50614959898885614a3e565b604080516001600160a01b038b168152602081018990529081018490527f983bf7148e3e9ebde769e6a1d5b19b34b9c318555cfb03836448a9376bd68d459060600160405180910390a15091979650505050505050565b83516020808601515f9081526005909152604081205490919082816149db63ffffffff8716856159c3565b6149e59190615984565b905060405180604001604052808263ffffffff1681526020018960200151815250878781518110614a1857614a18615679565b6020026020010181905250614a31898960200151614b3f565b5090979650505050505050565b6018546001600160a01b03161561411f576040805160028082526060820183525f9260208301908036833701905050905082815f81518110614a8257614a82615679565b6020026020010181815250508181600181518110614aa257614aa2615679565b60209081029190910101526018546001600160a01b03166353dc3a9d856002845f604051908082528060200260200182016040528015614aec578160200160208202803683370190505b506040518563ffffffff1660e01b8152600401614b0c9493929190615ef4565b5f604051808303815f87803b158015614b23575f5ffd5b505af1158015614b35573d5f5f3e3d5ffd5b5050505050505050565b6001600160a01b0382165f9081526010602090815260408083208484529091528120805460ff19166001179055614b768383612559565b9050600681604051614b8891906156af565b9081526020016040518091039020600782604051614ba691906156af565b908152604051908190036020018120825481546001600160a01b0319166001600160a01b0390911617815560018084015490820155600292830154920191909155600690614bf59083906156af565b90815260405190819003602001902080546001600160a01b03191681555f6001820181905560029091015561411f83836001600160a01b0382165f9081526008602052604081208054909181905b82811015614c835784848281548110614c5e57614c5e615679565b905f5260205f2090600202016001015403614c7b57809150614c83565b600101614c43565b50818103614c92575050505050565b805b614c9f600184615666565b811015614d045783614cb2826001615dfe565b81548110614cc257614cc2615679565b905f5260205f209060020201848281548110614ce057614ce0615679565b5f918252602090912082546002909202019081556001918201549082015501614c94565b5082805480614d1557614d15615f2c565b5f8281526020812060025f19909301928302018181556001015590555050505050565b5f60208284031215614d48575f5ffd5b5035919050565b6001600160a01b03811681146113cf575f5ffd5b5f60208284031215614d73575f5ffd5b8135613e9681614d4f565b5f5f60408385031215614d8f575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b81811015612ba357835180518452602081015160208501526040810151604085015250606083019250602084019350600181019050614db7565b5f5f83601f840112614e01575f5ffd5b5081356001600160401b03811115614e17575f5ffd5b6020830191508360208260051b850101111561199d575f5ffd5b5f5f5f5f5f5f5f5f5f60c08a8c031215614e49575f5ffd5b8935985060208a0135614e5b81614d4f565b975060408a01356001600160401b03811115614e75575f5ffd5b614e818c828d01614df1565b90985096505060608a01356001600160401b03811115614e9f575f5ffd5b614eab8c828d01614df1565b90965094505060808a01356001600160401b03811115614ec9575f5ffd5b614ed58c828d01614df1565b9a9d999c50979a9699959894979660a00135949350505050565b5f5f60208385031215614f00575f5ffd5b82356001600160401b03811115614f15575f5ffd5b614f2185828601614df1565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015614fe857868503603f19018452815180516001600160a01b03168652602080820151608091880182905290614fbc90880182614f2d565b604083810151908901526060928301519290970191909152506020938401939190910190600101614f81565b50929695505050505050565b5f5f60408385031215615005575f5ffd5b823561501081614d4f565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156150545761505461501e565b60405290565b604080519081016001600160401b03811182821017156150545761505461501e565b604051601f8201601f191681016001600160401b03811182821017156150a4576150a461501e565b604052919050565b5f6001600160401b038211156150c4576150c461501e565b5060051b60200190565b5f5f604083850312156150df575f5ffd5b82356001600160401b038111156150f4575f5ffd5b8301601f81018513615104575f5ffd5b8035615117615112826150ac565b61507c565b8082825260208201915060208360051b850101925087831115615138575f5ffd5b6020840193505b8284101561515a57833582526020938401939091019061513f565b976020969096013596505050505050565b5f8151808452602084019350602083015f5b8281101561519b57815186526020958601959091019060010161517d565b5093949350505050565b602081525f613e96602083018461516b565b803563ffffffff811681146151ca575f5ffd5b919050565b5f5f604083850312156151e0575f5ffd5b82356151eb81614d4f565b91506151f9602084016151b7565b90509250929050565b5f5f5f5f5f5f60608789031215615217575f5ffd5b86356001600160401b0381111561522c575f5ffd5b61523889828a01614df1565b90975095505060208701356001600160401b03811115615256575f5ffd5b61526289828a01614df1565b90955093505060408701356001600160401b03811115615280575f5ffd5b61528c89828a01614df1565b979a9699509497509295939492505050565b5f5f604083850312156152af575f5ffd5b8235915060208301356152c181614d4f565b809150509250929050565b6020815281516020820152602082015160408201525f604083015160c060608401526152fb60e084018261516b565b9050606084015160808401526080840151601f198483030160a0850152615322828261516b565b91505060a0840151601f198483030160c0850152615340828261516b565b95945050505050565b5f6001600160401b038211156153615761536161501e565b50601f01601f191660200190565b5f6020828403121561537f575f5ffd5b81356001600160401b03811115615394575f5ffd5b8201601f810184136153a4575f5ffd5b80356153b261511282615349565b8181528560208385010111156153c6575f5ffd5b816020840160208301375f91810160200191909152949350505050565b602081525f613e966020830184614f2d565b80151581146113cf575f5ffd5b5f60208284031215615412575f5ffd5b8135613e96816153f5565b5f5f5f5f5f5f5f5f60a0898b031215615434575f5ffd5b883561543f81614d4f565b97506020890135965060408901356001600160401b03811115615460575f5ffd5b61546c8b828c01614df1565b90975095505060608901356001600160401b0381111561548a575f5ffd5b6154968b828c01614df1565b90955093505060808901356001600160401b038111156154b4575f5ffd5b6154c08b828c01614df1565b999c989b5096995094979396929594505050565b602080825282518282018190525f918401906040840190835b81811015612ba35783516001600160a01b03168352602093840193909201916001016154ed565b602080825282518282018190525f918401906040840190835b81811015612ba357835180518452602090810151818501529093019260409092019160010161552d565b5f5f60408385031215615568575f5ffd5b823561557381614d4f565b915060208301356152c181614d4f565b5f5f60408385031215615594575f5ffd5b615010836151b7565b5f5f5f5f5f606086880312156155b1575f5ffd5b8535945060208601356001600160401b038111156155cd575f5ffd5b6155d988828901614df1565b90955093505060408601356001600160401b038111156155f7575f5ffd5b61560388828901614df1565b969995985093965092949392505050565b5f5f5f60608486031215615626575f5ffd5b833561563181614d4f565b9250602084013561564181614d4f565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114fb576114fb615652565b634e487b7160e01b5f52603260045260245ffd5b5f5f6040838503121561569e575f5ffd5b505080516020909101519092909150565b5f82518060208501845e5f920191825250919050565b8183525f6001600160fb1b038311156156dc575f5ffd5b8260051b80836020870137939093016020019392505050565b60018060a01b038816815286602082015260a060408201525f61571b60a083018861516b565b828103606084015261572e8187896156c5565b905082810360808401526157438185876156c5565b9a9950505050505050505050565b5f60208284031215615761575f5ffd5b5051919050565b602081525f611d7d6020830184866156c5565b5f82601f83011261578a575f5ffd5b815161579861511282615349565b8181528460208386010111156157ac575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f602082840312156157d8575f5ffd5b81516001600160401b038111156157ed575f5ffd5b8201601f810184136157fd575f5ffd5b805161580b615112826150ac565b8082825260208201915060208360051b85010192508683111561582c575f5ffd5b602084015b8381101561308c5780516001600160401b0381111561584e575f5ffd5b85016080818a03601f19011215615863575f5ffd5b61586b615032565b602082015161587981614d4f565b815260408201516001600160401b03811115615893575f5ffd5b6158a28b60208386010161577b565b6020838101919091526060848101516040850152608090940151938301939093525084529283019201615831565b5f600182016158e1576158e1615652565b5060010190565b5f60608284031280156158f9575f5ffd5b50604051606081016001600160401b038111828210171561591c5761591c61501e565b604052825161592a81614d4f565b8152602083810151908201526040928301519281019290925250919050565b606081525f61595c60608301888a6156c5565b828103602084015261596f8187896156c5565b905082810360408401526119178185876156c5565b5f8261599e57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156159b3575f5ffd5b815160ff81168114613e96575f5ffd5b80820281158282048414176114fb576114fb615652565b6001815b6001841115615a15578085048111156159f9576159f9615652565b6001841615615a0757908102905b60019390931c9280026159de565b935093915050565b5f82615a2b575060016114fb565b81615a3757505f6114fb565b8160018114615a4d5760028114615a5757615a73565b60019150506114fb565b60ff841115615a6857615a68615652565b50506001821b6114fb565b5060208310610133831016604e8410600b8410161715615a96575081810a6114fb565b615aa25f1984846159da565b805f1904821115615ab557615ab5615652565b029392505050565b5f613e968383615a1d565b5f82601f830112615ad7575f5ffd5b8151615ae5615112826150ac565b8082825260208201915060208360051b860101925085831115615b06575f5ffd5b602085015b83811015615b23578051835260209283019201615b0b565b5095945050505050565b5f60208284031215615b3d575f5ffd5b81516001600160401b03811115615b52575f5ffd5b820160408185031215615b63575f5ffd5b615b6b61505a565b8151815260208201516001600160401b03811115615b87575f5ffd5b615b9386828501615ac8565b602083015250949350505050565b5f60208284031215615bb1575f5ffd5b81516001600160401b03811115615bc6575f5ffd5b611d7d84828501615ac8565b8082025f8212600160ff1b84141615615bed57615bed615652565b81810583148215176114fb576114fb615652565b8082018281125f831280158216821582161715615c2057615c20615652565b505092915050565b5f60208284031215615c38575f5ffd5b8151613e96816153f5565b60018060a01b038916815287602082015260a060408201525f615c6a60a08301888a6156c5565b8281036060840152615c7d8187896156c5565b90508281036080840152615c928185876156c5565b9b9a5050505050505050505050565b5f5f5f5f5f5f5f60e0888a031215615cb7575f5ffd5b8751615cc281614d4f565b60208901519097506001600160401b03811115615cdd575f5ffd5b615ce98a828b0161577b565b96505060408801516001600160401b03811115615d04575f5ffd5b615d108a828b0161577b565b60608a015160808b015160a08c015160c08d0151939950919750955093509050615d39816153f5565b8091505092959891949750929550565b5f60208284031215615d59575f5ffd5b81516001600160401b03811115615d6e575f5ffd5b8201601f81018413615d7e575f5ffd5b8051615d8c615112826150ac565b8082825260208201915060208360061b850101925086831115615dad575f5ffd5b6020840193505b82841015615df45760408488031215615dcb575f5ffd5b615dd361505a565b84518152602080860151818301529083526040909401939190910190615db4565b9695505050505050565b808201808211156114fb576114fb615652565b8181035f831280158383131683831282161715611fc657611fc6615652565b5f600160ff1b8201615e4457615e44615652565b505f0390565b5f6001600160fb1b03831115615e5e575f5ffd5b8260051b80838637939093019392505050565b8581525f611e85615e86602084018789615e4a565b8486615e4a565b6001600160a01b03831681526040602080830182905283519183018290525f91908401906060840190835b81811015615ee8578351805163ffffffff1684526020908101518185015290930192604090920191600101615eb8565b50909695505050505050565b60018060a01b0385168152836020820152608060408201525f615f1a608083018561516b565b8281036060840152611e85818561516b565b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220412a6aad9b489fc3059470ff469d67fb7371573b44eaadaea22b2f37c70402a064736f6c634300082200330000000000000000000000001864a44ea59d2ce58c88c9e65fc66e031ff1d70d

Deployed Bytecode

0x60806040526004361061057b575f3560e01c80638456cb59116102cd578063d01460ca1161017a578063ec45864e116100e3578063f6df80551161009d578063f897a22b11610078578063f897a22b1461125e578063f8fd09e41461127d578063ff62309c146112a1578063ffc345c6146112c0575f5ffd5b8063f6df8055146111c4578063f7f5ed6114611214578063f88c4d0214611233575f5ffd5b8063ec45864e146110fb578063ef62071f14611134578063f2fde38b14611153578063f30ea6be14611172578063f5537ede14611186578063f6bd02fa146111a5575f5ffd5b8063e30c397811610134578063e30c39781461102e578063e438005d1461104b578063e4542aae1461106a578063e5a82bf714611089578063e5b5462d146110bd578063e9a3ccfa146110dc575f5ffd5b8063d01460ca14610f80578063d2f9d45b14610f9f578063d9be4b3e14610fbe578063dac6b05014610fdd578063ddd5e1b214610ffc578063dfda09051461100f575f5ffd5b80639ea507f211610236578063b6907c93116101f0578063c0382c08116101cb578063c0382c0814610f04578063c1df5cc814610f23578063cb0e122a14610f42578063cef59a9e14610f61575f5ffd5b8063b6907c9314610e51578063b6b67d9e14610e70578063bbac408c14610e8f575f5ffd5b80639ea507f214610da25780639edbc24614610dc15780639ff7a39d14610de0578063a7a6296014610dff578063b246794914610e13578063b3b3adc114610e32575f5ffd5b80638f3277fe116102875780638f3277fe14610ce5578063925b506a14610cf957806394a4c34a14610d2457806399a5432a14610d4357806399f9140514610d575780639d2e7b3414610d83575f5ffd5b80638456cb5914610c3d57806384be319d14610c51578063853828b614610c705780638685343614610c845780638da5cb5b14610ca35780638e45870f14610cc4575f5ffd5b806349b89bd31161042b5780636371177e11610394578063715018a61161034e57806377646389116103295780637764638914610bcb57806379ba509714610bea57806379dd33c214610bfe57806381da45b214610c1e575f5ffd5b8063715018a614610b765780637231535a14610b8a5780637232ed2714610b9f575f5ffd5b80636371177e14610a785780636725cda114610a9557806367645bbb14610ab45780636a9f280714610af35780636d37eda514610b2c57806370f9cecf14610b57575f5ffd5b80635629d258116103e55780635629d258146109ac57806358a215b0146109cb57806359fa047d146109ea5780635c975abb14610a245780635e37fb0014610a3a5780636167227a14610a59575f5ffd5b806349b89bd3146108e15780634b6592cc1461090057806351e0e26b1461091f578063527ba9af1461094d57806353d09aac1461096c578063557ed1ba14610998575f5ffd5b80633b6567c6116104e75780633e0e44d0116104a15780633fc15f151161047c5780633fc15f15146108705780633fce59081461088f578063430fe9c1146108ae578063440f82c9146108c2575f5ffd5b80633e0e44d0146108285780633e3ff7b6146108475780633f4ba83a1461085c575f5ffd5b80633b6567c6146107325780633c010dc9146107515780633ccfd60b1461078a5780633d93e02e1461079e5780633db7aced146107ca5780633de2662c146107de575f5ffd5b806319174c231161053857806319174c231461065a5780631e5e99061461068657806323eab2c2146106b157806332cbe4c4146106c457806334dc8ea5146106dd5780633728040814610711575f5ffd5b806304a8d7071461057f5780630562b9f7146105a757806307e438e2146105c85780630966a6a5146105ff57806312065fe01461061e57806312bd43bd14610630575b5f5ffd5b34801561058a575f5ffd5b5061059460135481565b6040519081526020015b60405180910390f35b3480156105b2575f5ffd5b506105c66105c1366004614d38565b6112df565b005b3480156105d3575f5ffd5b50600d546105e7906001600160a01b031681565b6040516001600160a01b03909116815260200161059e565b34801561060a575f5ffd5b506105c6610619366004614d63565b6113d2565b348015610629575f5ffd5b5047610594565b34801561063b575f5ffd5b50600354600160a01b900460ff165b604051901515815260200161059e565b348015610665575f5ffd5b50610679610674366004614d7e565b6113fc565b60405161059e9190614d9e565b348015610691575f5ffd5b506105946106a0366004614d38565b5f9081526005602052604090205490565b61064a6106bf366004614e31565b611501565b3480156106cf575f5ffd5b5060145461064a9060ff1681565b3480156106e8575f5ffd5b506106fc6106f7366004614eef565b611924565b6040805192835260208301919091520161059e565b34801561071c575f5ffd5b506107256119a4565b60405161059e9190614f5b565b34801561073d575f5ffd5b506105c661074c366004614d63565b611a17565b34801561075c575f5ffd5b5061064a61076b366004614ff4565b600960209081525f928352604080842090915290825290205460ff1681565b348015610795575f5ffd5b506105c6611a28565b3480156107a9575f5ffd5b506107bd6107b83660046150ce565b611acf565b60405161059e91906151a5565b3480156107d5575f5ffd5b50610594611bea565b3480156107e9575f5ffd5b506107fd6107f83660046151cf565b611c55565b6040805182516001600160a01b0316815260208084015190820152918101519082015260600161059e565b348015610833575f5ffd5b506106fc610842366004614d38565b611d85565b348015610852575f5ffd5b5061059460125481565b348015610867575f5ffd5b506105c6611dfc565b34801561087b575f5ffd5b50601d546105e7906001600160a01b031681565b34801561089a575f5ffd5b506105946108a9366004615202565b611e0c565b3480156108b9575f5ffd5b50610594611e90565b3480156108cd575f5ffd5b506105946108dc366004614d63565b611ea7565b3480156108ec575f5ffd5b506105946108fb36600461529e565b611eb8565b34801561090b575f5ffd5b506018546105e7906001600160a01b031681565b34801561092a575f5ffd5b5061064a610939366004614d63565b60046020525f908152604090205460ff1681565b348015610958575f5ffd5b50601c546105e7906001600160a01b031681565b348015610977575f5ffd5b5061098b610986366004614d63565b611fcd565b60405161059e91906152cc565b3480156109a3575f5ffd5b50610594612282565b3480156109b7575f5ffd5b506105c66109c6366004614d63565b61229d565b3480156109d6575f5ffd5b506105c66109e5366004614d38565b61242b565b3480156109f5575f5ffd5b5061064a610a0436600461536f565b8051602081830181018051600b8252928201919093012091525460ff1681565b348015610a2f575f5ffd5b505f5460ff1661064a565b348015610a45575f5ffd5b506105c6610a54366004614d63565b612438565b348015610a64575f5ffd5b506003546105e7906001600160a01b031681565b348015610a83575f5ffd5b506003546001600160a01b03166105e7565b348015610aa0575f5ffd5b506105c6610aaf366004614d63565b612460565b348015610abf575f5ffd5b506105e7610ace366004614d7e565b600a60209081525f92835260408084209091529082529020546001600160a01b031681565b348015610afe575f5ffd5b5061064a610b0d366004614ff4565b601060209081525f928352604080842090915290825290205460ff1681565b348015610b37575f5ffd5b50610594610b46366004614d38565b60056020525f908152604090205481565b348015610b62575f5ffd5b5061064a610b71366004614ff4565b61248a565b348015610b81575f5ffd5b506105c6612548565b348015610b95575f5ffd5b5061059460115481565b348015610baa575f5ffd5b50610bbe610bb9366004614ff4565b612559565b60405161059e91906153e3565b348015610bd6575f5ffd5b506105c6610be536600461529e565b612597565b348015610bf5575f5ffd5b506105c661261c565b348015610c09575f5ffd5b5060035461064a90600160a01b900460ff1681565b348015610c29575f5ffd5b506105c6610c38366004615402565b61265d565b348015610c48575f5ffd5b506105c6612678565b348015610c5c575f5ffd5b50610594610c6b36600461541d565b612688565b348015610c7b575f5ffd5b506105c6612705565b348015610c8f575f5ffd5b506105c6610c9e366004614d63565b6128da565b348015610cae575f5ffd5b505f5461010090046001600160a01b03166105e7565b348015610ccf575f5ffd5b50610cd8612904565b60405161059e91906154d4565b348015610cf0575f5ffd5b50610594612bae565b348015610d04575f5ffd5b50610594610d13366004614d38565b600c6020525f908152604090205481565b348015610d2f575f5ffd5b506107fd610d3e3660046151cf565b612bf5565b348015610d4e575f5ffd5b50601354610594565b348015610d62575f5ffd5b50610d76610d71366004614d63565b612cd9565b60405161059e9190615514565b348015610d8e575f5ffd5b506107bd610d9d366004614d63565b613097565b348015610dad575f5ffd5b506106fc610dbc366004614ff4565b6133af565b348015610dcc575f5ffd5b506105c6610ddb366004614d7e565b6133e7565b348015610deb575f5ffd5b506105c6610dfa366004614d63565b613490565b348015610e0a575f5ffd5b50610cd86134c0565b348015610e1e575f5ffd5b506016546105e7906001600160a01b031681565b348015610e3d575f5ffd5b506105c6610e4c366004615402565b6135d4565b348015610e5c575f5ffd5b5061064a610e6b366004615557565b6135e5565b348015610e7b575f5ffd5b506105c6610e8a366004615583565b6136e0565b348015610e9a575f5ffd5b50610edf610ea936600461536f565b80516020818301810180516007825292820191909301209152805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b03909416845260208401929092529082015260600161059e565b348015610f0f575f5ffd5b506105c6610f1e36600461559d565b61372c565b348015610f2e575f5ffd5b5061064a610f3d366004614d38565b6139df565b348015610f4d575f5ffd5b506015546105e7906001600160a01b031681565b348015610f6c575f5ffd5b506105c6610f7b366004614d63565b613a30565b348015610f8b575f5ffd5b5061064a610f9a366004614d38565b613a5a565b348015610faa575f5ffd5b50610bbe610fb936600461559d565b613a78565b348015610fc9575f5ffd5b506017546105e7906001600160a01b031681565b348015610fe8575f5ffd5b506105c6610ff7366004614d63565b613aad565b61064a61100a36600461529e565b613ad7565b34801561101a575f5ffd5b506019546105e7906001600160a01b031681565b348015611039575f5ffd5b506001546001600160a01b03166105e7565b348015611056575f5ffd5b506105c6611065366004614d63565b613b80565b348015611075575f5ffd5b506105c6611084366004614d38565b613baa565b348015611094575f5ffd5b506105e76110a3366004614d38565b601e6020525f90815260409020546001600160a01b031681565b3480156110c8575f5ffd5b5061064a6110d7366004614d7e565b613bb7565b3480156110e7575f5ffd5b50601a546105e7906001600160a01b031681565b348015611106575f5ffd5b5061064a611115366004614ff4565b600e60209081525f928352604080842090915290825290205460ff1681565b34801561113f575f5ffd5b506105c661114e366004614d38565b613bde565b34801561115e575f5ffd5b506105c661116d366004614d63565b613beb565b34801561117d575f5ffd5b506105c6613c61565b348015611191575f5ffd5b506105946111a0366004615614565b613da2565b3480156111b0575f5ffd5b506105c66111bf366004614d63565b613e9d565b3480156111cf575f5ffd5b50610edf6111de36600461536f565b80516020818301810180516006825292820191909301209152805460018201546002909201546001600160a01b03909116919083565b34801561121f575f5ffd5b506105c661122e366004614d63565b613ec8565b34801561123e575f5ffd5b5061059461124d366004614d63565b600f6020525f908152604090205481565b348015611269575f5ffd5b50601b546105e7906001600160a01b031681565b348015611288575f5ffd5b506014546105e79061010090046001600160a01b031681565b3480156112ac575f5ffd5b506105c66112bb366004614d63565b613ef2565b3480156112cb575f5ffd5b506105c66112da366004614d63565b613f1c565b6112e7613f46565b6112ef613f78565b4781111561133d5760405162461bcd60e51b8152602060048201526016602482015275657272203a20416d6f756e74203e2042616c616e636560501b60448201526064015b60405180910390fd5b6040515f90339083908381818185875af1925050503d805f811461137c576040519150601f19603f3d011682016040523d82523d5f602084013e611381565b606091505b50509050806113c45760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401611334565b506113cf6001600255565b50565b6113da613f46565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b60605f826001600160401b038111156114175761141761501e565b60405190808252806020026020018201604052801561146957816020015b61145660405180606001604052805f81526020015f81526020015f81525090565b8152602001906001900390816114355790505b5090505f5b838110156114f7576040518060600160405280828761148d9190615666565b8152602001600c5f61149f858a615666565b81526020019081526020015f2054815260200160055f84896114c19190615666565b81526020019081526020015f20548152508282815181106114e4576114e4615679565b602090810291909101015260010161146e565b5090505b92915050565b5f61150a613fa0565b611512613f78565b8861151c81613fc3565b336001600160a01b038b16036115695760405162461bcd60e51b815260206004820152601260248201527115d85b1b195d081b9bdd08185b1b1bddd95960721b6044820152606401611334565b61157283613a5a565b6115b45760405162461bcd60e51b815260206004820152601360248201527214dd589b5a5cdcda5bdb881bdd5d19185d1959606a1b6044820152606401611334565b6001600160a01b038a165f90815260096020908152604080832086845290915290205460ff161561161b5760405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e481cdd589b5a5d1d1959607a1b6044820152606401611334565b5f6116258b613097565b90505f8151116116775760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320746f207375626d6974207769746800000000000000006044820152606401611334565b6017546040516334dc8ea560e01b81525f9182916001600160a01b03909116906334dc8ea5906116ab9086906004016151a5565b6040805180830381865afa1580156116c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e9919061568d565b915091506116f88e83836140d0565b60145460ff16156117b0575f611711878c8c8c8c613a78565b9050600b8160405161172391906156af565b9081526040519081900360200190205460ff161561177c5760405162461bcd60e51b815260206004820152601660248201527511185d1848185b1c9958591e481cdd589b5a5d1d195960521b6044820152606401611334565b6001600b8260405161178e91906156af565b908152604051908190036020019020805491151560ff19909216919091179055505b6117ba83876142a2565b5f60165f9054906101000a90046001600160a01b03166001600160a01b03166337d5b9eb8f89878f8f8f8f6040518863ffffffff1660e01b815260040161180797969594939291906156f5565b602060405180830381865afa158015611822573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118469190615751565b90505f81116118975760405162461bcd60e51b815260206004820152601e60248201527f5a65726f207368617265732063616e2774206265207375626d697474656400006044820152606401611334565b6118a38e888387614357565b6118af8e8883876144ff565b7f2dad5bc61871201926333cea2842b88a9e0b9e6dce31832196e80d8e810890f1818f896040516118fc939291909283526001600160a01b03919091166020830152604082015260600190565b60405180910390a16001955050505050506119176001600255565b9998505050505050505050565b6017546040516334dc8ea560e01b81525f9182916001600160a01b03909116906334dc8ea59061195a9087908790600401615768565b6040805180830381865afa158015611974573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611998919061568d565b915091505b9250929050565b601554604080516306e5008160e31b815290516060926001600160a01b0316916337280408916004808301925f9291908290030181865afa1580156119eb573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a1291908101906157c8565b905090565b611a1f613f46565b6113cf816145d9565b611a30613f46565b611a38613f78565b60405147905f90339083908381818185875af1925050503d805f8114611a79576040519150601f19603f3d011682016040523d82523d5f602084013e611a7e565b606091505b5050905080611ac15760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401611334565b5050611acd6001600255565b565b60605f805b8451811015611b1b57611b00858281518110611af257611af2615679565b602002602001015185613bb7565b15611b135781611b0f816158d0565b9250505b600101611ad4565b50806001600160401b03811115611b3457611b3461501e565b604051908082528060200260200182016040528015611b5d578160200160208202803683370190505b5091505f805b8551811015611be157611b8f868281518110611b8157611b81615679565b602002602001015186613bb7565b15611bd957858181518110611ba657611ba6615679565b6020026020010151848380611bba906158d0565b945081518110611bcc57611bcc615679565b6020026020010181815250505b600101611b63565b50505092915050565b60175460408051633db7aced60e01b815290515f926001600160a01b031691633db7aced9160048083019260209291908290030181865afa158015611c31573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a129190615751565b611c7f60405180606001604052805f6001600160a01b031681526020015f81526020015f81525090565b5f611c90848463ffffffff16612559565b90505f600782604051611ca391906156af565b908152604080516020928190038301812060608201835280546001600160a01b03168252600181015493820184905260020154918101919091529150158015611cf65750600d546001600160a01b031615155b15611d7d57600d54604051630f78998b60e21b81526001600160a01b03878116600483015263ffffffff8716602483015290911690633de2662c906044015b606060405180830381865afa158015611d50573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d7491906158e8565b925050506114fb565b949350505050565b6017546040516303e0e44d60e41b8152600481018390525f9182916001600160a01b0390911690633e0e44d0906024016040805180830381865afa158015611dcf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df3919061568d565b91509150915091565b611e04613f46565b611acd614651565b60165460405163d75ac32760e01b81525f916001600160a01b03169063d75ac32790611e46908a908a908a908a908a908a90600401615949565b602060405180830381865afa158015611e61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e859190615751565b979650505050505050565b5f62015180611e9d612282565b611a129190615984565b5f611eb182612cd9565b5192915050565b5f6001600160a01b038216611f075760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401611334565b5f826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f44573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f6891906159a3565b90508060ff16600603611f7e57839150506114fb565b8060ff16601203611fa057611f988464e8d4a510006159c3565b9150506114fb565b5f611faf600660ff8416615666565b9050611fbc81600a615abd565b611d7490866159c3565b5092915050565b6120036040518060c001604052805f81526020015f8152602001606081526020015f815260200160608152602001606081525090565b601454604051637539189960e11b81526001600160a01b0384811660048301525f926101009004169063ea723132906024015f60405180830381865afa15801561204f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120769190810190615b2d565b805183526020808201516040850181905251908401526019549091506001600160a01b031615612118576019546040516355682d0760e01b81526001600160a01b038581166004830152909116906355682d07906024015f60405180830381865afa1580156120e7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261210e9190810190615ba1565b608083015261212c565b604080515f81526020810190915260808301525b6080820151516060830152601a546001600160a01b03161561226857601a5460405162445ac960e21b81526001600160a01b0385811660048301525f9283929116906301116b24906024016040805180830381865afa158015612191573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b5919061568d565b915091505f821180156121c757505f81115b1561224d57806001600160401b038111156121e4576121e461501e565b60405190808252806020026020018201604052801561220d578160200160208202803683370190505b5060a08501525f5b8181101561224757828560a00151828151811061223457612234615679565b6020908102919091010152600101612215565b50612261565b604080515f81526020810190915260a08501525b505061227c565b604080515f81526020810190915260a08301525b50919050565b5f601154610e106122939190615bd2565b611a129042615c01565b6122a5613f46565b6122ad613f78565b6001600160a01b0381166122fb5760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401611334565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561233f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123639190615751565b90505f81116123ad5760405162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b6044820152606401611334565b60405163a9059cbb60e01b8152336004820181905260248201839052906001600160a01b0384169063a9059cbb906044016020604051808303815f875af11580156123fa573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061241e9190615c28565b5050506113cf6001600255565b612433613f46565b601355565b612440613f46565b6001600160a01b03165f908152600460205260409020805460ff19169055565b612468613f46565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b600d545f9081906001600160a01b03161561251557600d546040516370f9cecf60e01b81526001600160a01b03868116600483015260248201869052909116906370f9cecf90604401602060405180830381865afa1580156124ee573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125129190615c28565b90505b6001600160a01b0384165f90815260096020908152604080832086845290915290205460ff1680611d7d57509392505050565b612550613f46565b611acd5f6146a2565b604051606083811b6bffffffffffffffffffffffff191660208301526034820183905290605401604051602081830303815290604052905092915050565b61259f613f46565b600582106125ef5760405162461bcd60e51b815260206004820152601f60248201527f546f6b656e20696e646578206d757374206265206c657373207468616e2035006044820152606401611334565b5f918252601e602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b60015433906001600160a01b031681146126545760405163118cdaa760e01b81526001600160a01b0382166004820152602401611334565b6113cf816146a2565b612665613f46565b6014805460ff1916911515919091179055565b612680613f46565b611acd6146bb565b6016546040516337d5b9eb60e01b81525f916001600160a01b0316906337d5b9eb906126c6908c908c908c908c908c908c908c908c90600401615c43565b602060405180830381865afa1580156126e1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119179190615751565b61270d613f46565b612715613f78565b4780156127ac576040515f90339083908381818185875af1925050503d805f811461275b576040519150601f19603f3d011682016040523d82523d5f602084013e612760565b606091505b50509050806127aa5760405162461bcd60e51b815260206004820152601660248201527513985d1a5d99481d1c985b9cd9995c8819985a5b195960521b6044820152606401611334565b505b5f5b6005811015611ac1575f818152601e60205260409020546001600160a01b0316156128d2575f818152601e60205260408082205490516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612824573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128489190615751565b905080156128d0575f828152601e60205260409081902054905163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303815f875af11580156128aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ce9190615c28565b505b505b6001016127ae565b6128e2613f46565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b60605f60155f9054906101000a90046001600160a01b03166001600160a01b031663372804086040518163ffffffff1660e01b81526004015f60405180830381865afa158015612956573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261297d91908101906157c8565b80519091505f805b82811015612a485760155484515f916001600160a01b0316906313ff7e9f908790859081106129b6576129b6615679565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024015f60405180830381865afa158015612a03573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612a2a9190810190615ca1565b96505050505050508015612a3f578260010192505b50600101612985565b505f816001600160401b03811115612a6257612a6261501e565b604051908082528060200260200182016040528015612a8b578160200160208202803683370190505b5090505f805b84811015612ba35760155486515f916001600160a01b0316906313ff7e9f90899085908110612ac257612ac2615679565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024015f60405180830381865afa158015612b0f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612b369190810190615ca1565b96505050505050508015612b9a57868281518110612b5657612b56615679565b60200260200101515f0151848481518110612b7357612b73615679565b60200260200101906001600160a01b031690816001600160a01b0316815250508260010192505b50600101612a91565b509095945050505050565b601754604080516347993bff60e11b815290515f926001600160a01b031691638f3277fe9160048083019260209291908290030181865afa158015611c31573d5f5f3e3d5ffd5b612c1f60405180606001604052805f6001600160a01b031681526020015f81526020015f81525090565b5f612c30848463ffffffff16612559565b90505f600682604051612c4391906156af565b908152604080516020928190038301812060608201835280546001600160a01b03168252600181015493820184905260020154918101919091529150158015612c965750600d546001600160a01b031615155b15611d7d57600d54604051634a5261a560e11b81526001600160a01b03878116600483015263ffffffff87166024830152909116906394a4c34a90604401611d35565b600d5460609081906001600160a01b031615612d6457600d546040516399f9140560e01b81526001600160a01b038581166004830152909116906399f91405906024015f60405180830381865afa158015612d36573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612d5d9190810190615d49565b9050612da3565b604080515f8082526020820190925290612d9f565b604080518082019091525f8082526020820152815260200190600190039081612d795790505b5090505b6001600160a01b0383165f90815260086020908152604080832080548251818502810185019093528083529192909190849084015b82821015612e1b578382905f5260205f2090600202016040518060400160405290815f820154815260200160018201548152505081526020019060010190612dd8565b5050505090505f81518351612e309190615dfe565b6001600160401b03811115612e4757612e4761501e565b604051908082528060200260200182016040528015612e8b57816020015b604080518082019091525f8082526020820152815260200190600190039081612e655790505b5090505f805b8451811015612f38576001600160a01b0387165f9081526010602052604081208651909190879084908110612ec857612ec8615679565b60209081029190910181015181015182528101919091526040015f205460ff16612f3057848181518110612efe57612efe615679565b6020026020010151838380612f12906158d0565b945081518110612f2457612f24615679565b60200260200101819052505b600101612e91565b505f5b8351811015612fe2576001600160a01b0387165f9081526010602052604081208551909190869084908110612f7257612f72615679565b60209081029190910181015181015182528101919091526040015f205460ff16612fda57838181518110612fa857612fa8615679565b6020026020010151838380612fbc906158d0565b945081518110612fce57612fce615679565b60200260200101819052505b600101612f3b565b505f816001600160401b03811115612ffc57612ffc61501e565b60405190808252806020026020018201604052801561304057816020015b604080518082019091525f808252602082015281526020019060019003908161301a5790505b5090505f5b8281101561308c5783818151811061305f5761305f615679565b602002602001015182828151811061307957613079615679565b6020908102919091010152600101613045565b509695505050505050565b601454604051637539189960e11b81526001600160a01b0383811660048301526060925f926101009091049091169063ea723132906024015f60405180830381865afa1580156130e9573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526131109190810190615b2d565b602001518051601954919250906060905f906001600160a01b0316156131a5576019546040516355682d0760e01b81526001600160a01b038881166004830152909116906355682d07906024015f60405180830381865afa158015613177573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261319e9190810190615ba1565b9150815190505b601a545f9081906001600160a01b03161561323457601a5460405162445ac960e21b81526001600160a01b038a81166004830152909116906301116b24906024016040805180830381865afa158015613200573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613224919061568d565b925090505f819003613234575f91505b5f826132408588615dfe565b61324a9190615dfe565b9050805f0361326e575050604080515f815260208101909152979650505050505050565b806001600160401b038111156132865761328661501e565b6040519080825280602002602001820160405280156132af578160200160208202803683370190505b5097505f805b87811015613308578881815181106132cf576132cf615679565b60200260200101518a83806132e3906158d0565b9450815181106132f5576132f5615679565b60209081029190910101526001016132b5565b505f5b8581101561335e5786818151811061332557613325615679565b60200260200101518a8380613339906158d0565b94508151811061334b5761334b615679565b602090810291909101015260010161330b565b5083156133a2575f5b848110156133a057838a8361337b816158d0565b94508151811061338d5761338d615679565b6020908102919091010152600101613367565b505b5050505050505050919050565b6008602052815f5260405f2081815481106133c8575f80fd5b5f91825260209091206002909102018054600190910154909250905082565b6133ef613f46565b5f825b82811161348a57600d54604051636d37eda560e01b8152600481018390526001600160a01b0390911690636d37eda590602401602060405180830381865afa158015613440573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134649190615751565b5f8281526005602052604090205560019091019080613482816158d0565b9150506133f2565b50505050565b613498613f46565b601480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60605f805b6005811015613500575f818152601e60205260409020546001600160a01b0316156134f857816134f4816158d0565b9250505b6001016134c5565b505f816001600160401b0381111561351a5761351a61501e565b604051908082528060200260200182016040528015613543578160200160208202803683370190505b5090505f805b60058110156135cb575f818152601e60205260409020546001600160a01b0316156135c3575f818152601e60205260409020546001600160a01b03168383613590816158d0565b9450815181106135a2576135a2615679565b60200260200101906001600160a01b031690816001600160a01b0316815250505b600101613549565b50909392505050565b6135dc613f46565b6113cf816146f7565b5f6001600160a01b038316158061360357506001600160a01b038216155b1561360f57505f6114fb565b600354600160a01b900460ff16613628575060016114fb565b826001600160a01b0316826001600160a01b031603613649575060016114fb565b6003546001600160a01b031661366057505f6114fb565b600354604051632305259560e01b81526001600160a01b038581166004830152848116602483015290911690632305259590604401602060405180830381865afa9250505080156136ce575060408051601f3d908101601f191682019092526136cb91810190615c28565b60015b6136d957505f6114fb565b90506114fb565b335f9081526004602052604090205460ff1615156001146136ff575f5ffd5b63ffffffff82165f9081526005602052604081208054839290613723908490615dfe565b90915550505050565b613734613f46565b82811461377c5760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f2e640d8cadccee8d040dad2e6dac2e8c6d60531b6044820152606401611334565b826137b85760405162461bcd60e51b815260206004820152600c60248201526b456d7074792061727261797360a01b6044820152606401611334565b5f805b84811015613972575f8686838181106137d6576137d6615679565b90506020020160208101906137eb9190614d63565b90505f85858481811061380057613800615679565b9050602002013590505f613814838b612bf5565b90505f8160200151116138695760405162461bcd60e51b815260206004820152601e60248201527f4e6f207375626d697373696f6e20666f756e6420666f722077616c6c657400006044820152606401611334565b898160400151146138ab5760405162461bcd60e51b815260206004820152600c60248201526b088c2f240dad2e6dac2e8c6d60a31b6044820152606401611334565b5f8282602001516138bc9190615e11565b90506138c88187615c01565b95505f6138d5858d612559565b9050836006826040516138e891906156af565b9081526020016040518091039020600101819055508460068260405161390e91906156af565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b0319909316929092179091558c9060069061394e9084906156af565b908152604051908190036020019020600201555050600190930192506137bb915050565b505f8113156139a3575f8681526005602052604081208054839290613998908490615666565b909155506139d79050565b5f8112156139d7576139b481615e30565b5f87815260056020526040812080549091906139d1908490615dfe565b90915550505b505050505050565b5f6139e8611e90565b8211156139f657505f919050565b601254821015613a0757505f919050565b6001601354613a169190615666565b82613a1f611e90565b613a299190615666565b1192915050565b613a38613f46565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b5f60135482613a67611e90565b613a719190615666565b1092915050565b60608585858585604051602001613a93959493929190615e71565b604051602081830303815290604052905095945050505050565b613ab5613f46565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b5f613ae0613fa0565b613ae8613f78565b81613af281613fc3565b5f613afd848661474f565b6015546040516264974560e91b81529192506001600160a01b03169063c92e8a0090613b2f9087908590600401615e8d565b6020604051808303815f875af1158015613b4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b6f9190615c28565b506001925050506114fb6001600255565b613b88613f46565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b613bb2613f46565b601155565b5f918252600a602090815260408084209284529190529020546001600160a01b0316151590565b613be6613f46565b601255565b613bf3613f46565b600180546001600160a01b0383166001600160a01b03199091168117909155613c295f546001600160a01b036101009091041690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b613c69613f46565b613c71613f78565b335f5b6005811015611ac1575f818152601e60205260409020546001600160a01b031615613d9a575f818152601e60205260408082205490516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613cea573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d0e9190615751565b90508015613d98575f828152601e60205260409081902054905163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015613d72573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d969190615c28565b505b505b600101613c74565b5f613dab613f46565b613db3613f78565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303815f875af1158015613dff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e239190615c28565b506040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015613e66573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e8a9190615751565b9050613e966001600255565b9392505050565b613ea5613f46565b6001600160a01b03165f908152600460205260409020805460ff19166001179055565b613ed0613f46565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b613efa613f46565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b613f24613f46565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03610100909104163314611acd5760405163118cdaa760e01b8152336004820152602401611334565b6002805403613f9a57604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b5f5460ff1615611acd5760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b038116613fea5760405163e6c4247b60e01b815260040160405180910390fd5b600354600160a01b900460ff16613ffe5750565b6001600160a01b03811633036140115750565b6003546001600160a01b031661403a57604051634d7df47f60e01b815260040160405180910390fd5b600354604051632305259560e01b81526001600160a01b0383811660048301523360248301525f921690632305259590604401602060405180830381865afa9250505080156140a6575060408051601f3d908101601f191682019092526140a391810190615c28565b60015b156140ae5790505b806140cc57604051634d7df47f60e01b815260040160405180910390fd5b5050565b825f03614124578034101561411f5760405162461bcd60e51b8152602060048201526015602482015274139bdd08195b9bdd59da08199d5b991cc81cd95b9d605a1b6044820152606401611334565b505050565b60018310158015614136575060058311155b15614267575f614147600185615666565b5f818152601e60205260409020549091506001600160a01b0316806141a15760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642063757272656e637960801b6044820152606401611334565b5f6141ac8583611eb8565b6040516323b872dd60e01b8152336004820152306024820152604481018290529091506001600160a01b038316906323b872dd906064016020604051808303815f875af11580156141ff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142239190615c28565b6139d75760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401611334565b60405162461bcd60e51b815260206004820152601060248201526f496e76616c69642063757272656e637960801b6044820152606401611334565b5f5b825181101561411f575f8382815181106142c0576142c0615679565b60200260200101519050606481111561434e575f818152600a602090815260408083208684529091529020546001600160a01b03161561434e5760405162461bcd60e51b8152602060048201526024808201527f4f6e65206f72206d6f7265206d696e65727320616c7265616479207375626d696044820152631d1d195960e21b6064820152608401611334565b506001016142a4565b5f6143628585612559565b604080516060810182526001600160a01b0388168152602081018690529081018690529091505f5b83518110156143f4575f8482815181106143a6576143a6615679565b6020026020010151905060648111156143eb575f818152600a602090815260408083208a8452909152902080546001600160a01b0319166001600160a01b038a161790555b5060010161438a565b505f8581526005602052604081208054869290614412908490615dfe565b90915550505f858152600c60205260408120805460019290614435908490615dfe565b90915550506001600160a01b0386165f818152600860209081526040808320815180830183528981528084018b81528254600181810185559387528587209251600290910290920191825551908201559383526009825280832089845290915290819020805460ff19169092179091555181906006906144b69085906156af565b9081526040805160209281900383019020835181546001600160a01b0319166001600160a01b039091161781559183015160018301559190910151600290910155505050505050565b6018546001600160a01b03161561348a576040805160028082526060820183525f9260208301908036833701905050905083815f8151811061454357614543615679565b602002602001018181525050828160018151811061456357614563615679565b60209081029190910101526018546040516353dc3a9d60e01b81526001600160a01b03909116906353dc3a9d906145a590889060019086908890600401615ef4565b5f604051808303815f87803b1580156145bc575f5ffd5b505af11580156145ce573d5f5f3e3d5ffd5b505050505050505050565b6001600160a01b0381166146005760405163e6c4247b60e01b815260040160405180910390fd5b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f958d75e6176f26b8dda305a07f2e6abbc057c250bec1e18cbdf586dc235154e6905f90a35050565b61465961478e565b5f805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600180546001600160a01b03191690556113cf816147b0565b6146c3613fa0565b5f805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586146853390565b60038054821515600160a01b0260ff60a01b199091161790556040517f4e923f6d403856ede9e32222960f8ea845b4a9f5d00a799d3deb2db8a5af9c7c9061474490831515815260200190565b60405180910390a150565b60605f61475b84612cd9565b90505f61476782614808565b90505f5f61477483611d85565b915091506147838683836140d0565b611e85878585614870565b5f5460ff16611acd57604051638dfc202b60e01b815260040160405180910390fd5b5f80546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b80515f9081614815611bea565b90505f805b838110801561482857508282105b156148675761485386828151811061484257614842615679565b6020026020010151602001516139df565b1561485f578160010191505b60010161481a565b50949350505050565b6060620f42405f836001600160401b0381111561488f5761488f61501e565b6040519080825280602002602001820160405280156148d357816020015b604080518082019091525f80825260208201528152602001906001900390816148ad5790505b5085519091505f908190815b81811080156148ed57508783105b1561494d5761490789828151811061484257614842615679565b15614945576149328a8a838151811061492257614922615679565b602002602001015187868a6149b0565b61493c9085615dfe565b93508260010192505b6001016148df565b50614959898885614a3e565b604080516001600160a01b038b168152602081018990529081018490527f983bf7148e3e9ebde769e6a1d5b19b34b9c318555cfb03836448a9376bd68d459060600160405180910390a15091979650505050505050565b83516020808601515f9081526005909152604081205490919082816149db63ffffffff8716856159c3565b6149e59190615984565b905060405180604001604052808263ffffffff1681526020018960200151815250878781518110614a1857614a18615679565b6020026020010181905250614a31898960200151614b3f565b5090979650505050505050565b6018546001600160a01b03161561411f576040805160028082526060820183525f9260208301908036833701905050905082815f81518110614a8257614a82615679565b6020026020010181815250508181600181518110614aa257614aa2615679565b60209081029190910101526018546001600160a01b03166353dc3a9d856002845f604051908082528060200260200182016040528015614aec578160200160208202803683370190505b506040518563ffffffff1660e01b8152600401614b0c9493929190615ef4565b5f604051808303815f87803b158015614b23575f5ffd5b505af1158015614b35573d5f5f3e3d5ffd5b5050505050505050565b6001600160a01b0382165f9081526010602090815260408083208484529091528120805460ff19166001179055614b768383612559565b9050600681604051614b8891906156af565b9081526020016040518091039020600782604051614ba691906156af565b908152604051908190036020018120825481546001600160a01b0319166001600160a01b0390911617815560018084015490820155600292830154920191909155600690614bf59083906156af565b90815260405190819003602001902080546001600160a01b03191681555f6001820181905560029091015561411f83836001600160a01b0382165f9081526008602052604081208054909181905b82811015614c835784848281548110614c5e57614c5e615679565b905f5260205f2090600202016001015403614c7b57809150614c83565b600101614c43565b50818103614c92575050505050565b805b614c9f600184615666565b811015614d045783614cb2826001615dfe565b81548110614cc257614cc2615679565b905f5260205f209060020201848281548110614ce057614ce0615679565b5f918252602090912082546002909202019081556001918201549082015501614c94565b5082805480614d1557614d15615f2c565b5f8281526020812060025f19909301928302018181556001015590555050505050565b5f60208284031215614d48575f5ffd5b5035919050565b6001600160a01b03811681146113cf575f5ffd5b5f60208284031215614d73575f5ffd5b8135613e9681614d4f565b5f5f60408385031215614d8f575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b81811015612ba357835180518452602081015160208501526040810151604085015250606083019250602084019350600181019050614db7565b5f5f83601f840112614e01575f5ffd5b5081356001600160401b03811115614e17575f5ffd5b6020830191508360208260051b850101111561199d575f5ffd5b5f5f5f5f5f5f5f5f5f60c08a8c031215614e49575f5ffd5b8935985060208a0135614e5b81614d4f565b975060408a01356001600160401b03811115614e75575f5ffd5b614e818c828d01614df1565b90985096505060608a01356001600160401b03811115614e9f575f5ffd5b614eab8c828d01614df1565b90965094505060808a01356001600160401b03811115614ec9575f5ffd5b614ed58c828d01614df1565b9a9d999c50979a9699959894979660a00135949350505050565b5f5f60208385031215614f00575f5ffd5b82356001600160401b03811115614f15575f5ffd5b614f2185828601614df1565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015614fe857868503603f19018452815180516001600160a01b03168652602080820151608091880182905290614fbc90880182614f2d565b604083810151908901526060928301519290970191909152506020938401939190910190600101614f81565b50929695505050505050565b5f5f60408385031215615005575f5ffd5b823561501081614d4f565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156150545761505461501e565b60405290565b604080519081016001600160401b03811182821017156150545761505461501e565b604051601f8201601f191681016001600160401b03811182821017156150a4576150a461501e565b604052919050565b5f6001600160401b038211156150c4576150c461501e565b5060051b60200190565b5f5f604083850312156150df575f5ffd5b82356001600160401b038111156150f4575f5ffd5b8301601f81018513615104575f5ffd5b8035615117615112826150ac565b61507c565b8082825260208201915060208360051b850101925087831115615138575f5ffd5b6020840193505b8284101561515a57833582526020938401939091019061513f565b976020969096013596505050505050565b5f8151808452602084019350602083015f5b8281101561519b57815186526020958601959091019060010161517d565b5093949350505050565b602081525f613e96602083018461516b565b803563ffffffff811681146151ca575f5ffd5b919050565b5f5f604083850312156151e0575f5ffd5b82356151eb81614d4f565b91506151f9602084016151b7565b90509250929050565b5f5f5f5f5f5f60608789031215615217575f5ffd5b86356001600160401b0381111561522c575f5ffd5b61523889828a01614df1565b90975095505060208701356001600160401b03811115615256575f5ffd5b61526289828a01614df1565b90955093505060408701356001600160401b03811115615280575f5ffd5b61528c89828a01614df1565b979a9699509497509295939492505050565b5f5f604083850312156152af575f5ffd5b8235915060208301356152c181614d4f565b809150509250929050565b6020815281516020820152602082015160408201525f604083015160c060608401526152fb60e084018261516b565b9050606084015160808401526080840151601f198483030160a0850152615322828261516b565b91505060a0840151601f198483030160c0850152615340828261516b565b95945050505050565b5f6001600160401b038211156153615761536161501e565b50601f01601f191660200190565b5f6020828403121561537f575f5ffd5b81356001600160401b03811115615394575f5ffd5b8201601f810184136153a4575f5ffd5b80356153b261511282615349565b8181528560208385010111156153c6575f5ffd5b816020840160208301375f91810160200191909152949350505050565b602081525f613e966020830184614f2d565b80151581146113cf575f5ffd5b5f60208284031215615412575f5ffd5b8135613e96816153f5565b5f5f5f5f5f5f5f5f60a0898b031215615434575f5ffd5b883561543f81614d4f565b97506020890135965060408901356001600160401b03811115615460575f5ffd5b61546c8b828c01614df1565b90975095505060608901356001600160401b0381111561548a575f5ffd5b6154968b828c01614df1565b90955093505060808901356001600160401b038111156154b4575f5ffd5b6154c08b828c01614df1565b999c989b5096995094979396929594505050565b602080825282518282018190525f918401906040840190835b81811015612ba35783516001600160a01b03168352602093840193909201916001016154ed565b602080825282518282018190525f918401906040840190835b81811015612ba357835180518452602090810151818501529093019260409092019160010161552d565b5f5f60408385031215615568575f5ffd5b823561557381614d4f565b915060208301356152c181614d4f565b5f5f60408385031215615594575f5ffd5b615010836151b7565b5f5f5f5f5f606086880312156155b1575f5ffd5b8535945060208601356001600160401b038111156155cd575f5ffd5b6155d988828901614df1565b90955093505060408601356001600160401b038111156155f7575f5ffd5b61560388828901614df1565b969995985093965092949392505050565b5f5f5f60608486031215615626575f5ffd5b833561563181614d4f565b9250602084013561564181614d4f565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b818103818111156114fb576114fb615652565b634e487b7160e01b5f52603260045260245ffd5b5f5f6040838503121561569e575f5ffd5b505080516020909101519092909150565b5f82518060208501845e5f920191825250919050565b8183525f6001600160fb1b038311156156dc575f5ffd5b8260051b80836020870137939093016020019392505050565b60018060a01b038816815286602082015260a060408201525f61571b60a083018861516b565b828103606084015261572e8187896156c5565b905082810360808401526157438185876156c5565b9a9950505050505050505050565b5f60208284031215615761575f5ffd5b5051919050565b602081525f611d7d6020830184866156c5565b5f82601f83011261578a575f5ffd5b815161579861511282615349565b8181528460208386010111156157ac575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f602082840312156157d8575f5ffd5b81516001600160401b038111156157ed575f5ffd5b8201601f810184136157fd575f5ffd5b805161580b615112826150ac565b8082825260208201915060208360051b85010192508683111561582c575f5ffd5b602084015b8381101561308c5780516001600160401b0381111561584e575f5ffd5b85016080818a03601f19011215615863575f5ffd5b61586b615032565b602082015161587981614d4f565b815260408201516001600160401b03811115615893575f5ffd5b6158a28b60208386010161577b565b6020838101919091526060848101516040850152608090940151938301939093525084529283019201615831565b5f600182016158e1576158e1615652565b5060010190565b5f60608284031280156158f9575f5ffd5b50604051606081016001600160401b038111828210171561591c5761591c61501e565b604052825161592a81614d4f565b8152602083810151908201526040928301519281019290925250919050565b606081525f61595c60608301888a6156c5565b828103602084015261596f8187896156c5565b905082810360408401526119178185876156c5565b5f8261599e57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156159b3575f5ffd5b815160ff81168114613e96575f5ffd5b80820281158282048414176114fb576114fb615652565b6001815b6001841115615a15578085048111156159f9576159f9615652565b6001841615615a0757908102905b60019390931c9280026159de565b935093915050565b5f82615a2b575060016114fb565b81615a3757505f6114fb565b8160018114615a4d5760028114615a5757615a73565b60019150506114fb565b60ff841115615a6857615a68615652565b50506001821b6114fb565b5060208310610133831016604e8410600b8410161715615a96575081810a6114fb565b615aa25f1984846159da565b805f1904821115615ab557615ab5615652565b029392505050565b5f613e968383615a1d565b5f82601f830112615ad7575f5ffd5b8151615ae5615112826150ac565b8082825260208201915060208360051b860101925085831115615b06575f5ffd5b602085015b83811015615b23578051835260209283019201615b0b565b5095945050505050565b5f60208284031215615b3d575f5ffd5b81516001600160401b03811115615b52575f5ffd5b820160408185031215615b63575f5ffd5b615b6b61505a565b8151815260208201516001600160401b03811115615b87575f5ffd5b615b9386828501615ac8565b602083015250949350505050565b5f60208284031215615bb1575f5ffd5b81516001600160401b03811115615bc6575f5ffd5b611d7d84828501615ac8565b8082025f8212600160ff1b84141615615bed57615bed615652565b81810583148215176114fb576114fb615652565b8082018281125f831280158216821582161715615c2057615c20615652565b505092915050565b5f60208284031215615c38575f5ffd5b8151613e96816153f5565b60018060a01b038916815287602082015260a060408201525f615c6a60a08301888a6156c5565b8281036060840152615c7d8187896156c5565b90508281036080840152615c928185876156c5565b9b9a5050505050505050505050565b5f5f5f5f5f5f5f60e0888a031215615cb7575f5ffd5b8751615cc281614d4f565b60208901519097506001600160401b03811115615cdd575f5ffd5b615ce98a828b0161577b565b96505060408801516001600160401b03811115615d04575f5ffd5b615d108a828b0161577b565b60608a015160808b015160a08c015160c08d0151939950919750955093509050615d39816153f5565b8091505092959891949750929550565b5f60208284031215615d59575f5ffd5b81516001600160401b03811115615d6e575f5ffd5b8201601f81018413615d7e575f5ffd5b8051615d8c615112826150ac565b8082825260208201915060208360061b850101925086831115615dad575f5ffd5b6020840193505b82841015615df45760408488031215615dcb575f5ffd5b615dd361505a565b84518152602080860151818301529083526040909401939190910190615db4565b9695505050505050565b808201808211156114fb576114fb615652565b8181035f831280158383131683831282161715611fc657611fc6615652565b5f600160ff1b8201615e4457615e44615652565b505f0390565b5f6001600160fb1b03831115615e5e575f5ffd5b8260051b80838637939093019392505050565b8581525f611e85615e86602084018789615e4a565b8486615e4a565b6001600160a01b03831681526040602080830182905283519183018290525f91908401906060840190835b81811015615ee8578351805163ffffffff1684526020908101518185015290930192604090920191600101615eb8565b50909695505050505050565b60018060a01b0385168152836020820152608060408201525f615f1a608083018561516b565b8281036060840152611e85818561516b565b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220412a6aad9b489fc3059470ff469d67fb7371573b44eaadaea22b2f37c70402a064736f6c63430008220033

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

0000000000000000000000001864a44ea59d2ce58c88c9e65fc66e031ff1d70d

-----Decoded View---------------
Arg [0] : _walletSecurePin (address): 0x1864a44eA59d2cE58C88C9e65FC66E031Ff1D70D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000001864a44ea59d2ce58c88c9e65fc66e031ff1d70d


Deployed Bytecode Sourcemap

16632:27536:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17579:22;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;17579:22:0;;;;;;;;42122:265;;;;;;;;;;-1:-1:-1;42122:265:0;;;;;:::i;:::-;;:::i;:::-;;17277:33;;;;;;;;;;-1:-1:-1;17277:33:0;;;;-1:-1:-1;;;;;17277:33:0;;;;;;-1:-1:-1;;;;;616:32:1;;;598:51;;586:2;571:18;17277:33:0;427:228:1;38063:99:0;;;;;;;;;;-1:-1:-1;38063:99:0;;;;;:::i;:::-;;:::i;41817:79::-;;;;;;;;;;-1:-1:-1;41873:21:0;41817:79;;15727:119;;;;;;;;;;-1:-1:-1;15813:25:0;;-1:-1:-1;;;15813:25:0;;;;15727:119;;;1213:14:1;;1206:22;1188:41;;1176:2;1161:18;15727:119:0;1048:187:1;32081:371:0;;;;;;;;;;-1:-1:-1;32081:371:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33503:93::-;;;;;;;;;;-1:-1:-1;33503:93:0;;;;;:::i;:::-;33558:4;33572:22;;;:16;:22;;;;;;;33503:93;23067:1454;;;;;;:::i;:::-;;:::i;17610:27::-;;;;;;;;;;-1:-1:-1;17610:27:0;;;;;;;;35923:128;;;;;;;;;;-1:-1:-1;35923:128:0;;;;;:::i;:::-;;:::i;:::-;;;;4881:25:1;;;4937:2;4922:18;;4915:34;;;;4854:18;35923:128:0;4707:248:1;34369:128:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;39398:175::-;;;;;;;;;;-1:-1:-1;39398:175:0;;;;;:::i;:::-;;:::i;17026:69::-;;;;;;;;;;-1:-1:-1;17026:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;41902:214;;;;;;;;;;;;;:::i;30603:473::-;;;;;;;;;;-1:-1:-1;30603:473:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35724:90::-;;;;;;;;;;;;;:::i;32823:361::-;;;;;;;;;;-1:-1:-1;32823:361:0;;;;;:::i;:::-;;:::i;:::-;;;;10415:13:1;;-1:-1:-1;;;;;10411:39:1;10393:58;;10507:4;10495:17;;;10489:24;10467:20;;;10460:54;10558:17;;;10552:24;10530:20;;;10523:54;10381:2;10366:18;32823:361:0;10195:388:1;36057:114:0;;;;;;;;;;-1:-1:-1;36057:114:0;;;;;:::i;:::-;;:::i;17548:24::-;;;;;;;;;;;;;;;;19789:49;;;;;;;;;;;;;:::i;17928:24::-;;;;;;;;;;-1:-1:-1;17928:24:0;;;;-1:-1:-1;;;;;17928:24:0;;;33602:195;;;;;;;;;;-1:-1:-1;33602:195:0;;;;;:::i;:::-;;:::i;33196:72::-;;;;;;;;;;;;;:::i;31082:111::-;;;;;;;;;;-1:-1:-1;31082:111:0;;;;;:::i;:::-;;:::i;36183:517::-;;;;;;;;;;-1:-1:-1;36183:517:0;;;;;:::i;:::-;;:::i;17774:20::-;;;;;;;;;;-1:-1:-1;17774:20:0;;;;-1:-1:-1;;;;;17774:20:0;;;16728:52;;;;;;;;;;-1:-1:-1;16728:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17895:26;;;;;;;;;;-1:-1:-1;17895:26:0;;;;-1:-1:-1;;;;;17895:26:0;;;20458:1101;;;;;;;;;;-1:-1:-1;20458:1101:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33274:117::-;;;;;;;;;;;;;:::i;43083:391::-;;;;;;;;;;-1:-1:-1;43083:391:0;;;;;:::i;:::-;;:::i;39947:90::-;;;;;;;;;;-1:-1:-1;39947:90:0;;;;;:::i;:::-;;:::i;17178:39::-;;;;;;;;;;-1:-1:-1;17178:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2785:86;;;;;;;;;;-1:-1:-1;2832:4:0;2856:7;;;2785:86;;20045:113;;;;;;;;;;-1:-1:-1;20045:113:0;;;;;:::i;:::-;;:::i;13154:39::-;;;;;;;;;;-1:-1:-1;13154:39:0;;;;-1:-1:-1;;;;;13154:39:0;;;15588:119;;;;;;;;;;-1:-1:-1;15683:15:0;;-1:-1:-1;;;;;15683:15:0;15588:119;;37507:95;;;;;;;;;;-1:-1:-1;37507:95:0;;;;;:::i;:::-;;:::i;17102:69::-;;;;;;;;;;-1:-1:-1;17102:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17102:69:0;;;17448:61;;;;;;;;;;-1:-1:-1;17448:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;16787:55;;;;;;;;;;-1:-1:-1;16787:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;30127:311;;;;;;;;;;-1:-1:-1;30127:311:0;;;;;:::i;:::-;;:::i;6158:103::-;;;;;;;;;;;;;:::i;17516:25::-;;;;;;;;;;;;;;;;35421:122;;;;;;;;;;-1:-1:-1;35421:122:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;38614:193::-;;;;;;;;;;-1:-1:-1;38614:193:0;;;;;:::i;:::-;;:::i;9286:235::-;;;;;;;;;;;;;:::i;13200:37::-;;;;;;;;;;-1:-1:-1;13200:37:0;;;;-1:-1:-1;;;13200:37:0;;;;;;39851:90;;;;;;;;;;-1:-1:-1;39851:90:0;;;;;:::i;:::-;;:::i;19738:45::-;;;;;;;;;;;;;:::i;33803:247::-;;;;;;;;;;-1:-1:-1;33803:247:0;;;;;:::i;:::-;;:::i;43480:685::-;;;;;;;;;;;;;:::i;38168:99::-;;;;;;;;;;-1:-1:-1;38168:99:0;;;;;:::i;:::-;;:::i;5483:87::-;;;;;;;;;;-1:-1:-1;5529:7:0;5556:6;;;;-1:-1:-1;;;;;5556:6:0;5483:87;;34503:912;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35820:93::-;;;;;;;;;;;;;:::i;17224:46::-;;;;;;;;;;-1:-1:-1;17224:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;32458:359;;;;;;;;;;-1:-1:-1;32458:359:0;;;;;:::i;:::-;;:::i;40043:73::-;;;;;;;;;;-1:-1:-1;40104:10:0;;40043:73;;31199:876;;;;;;;;;;-1:-1:-1;31199:876:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21573:1482::-;;;;;;;;;;-1:-1:-1;21573:1482:0;;;;;:::i;:::-;;:::i;16957:62::-;;;;;;;;;;-1:-1:-1;16957:62:0;;;;;:::i;:::-;;:::i;20166:286::-;;;;;;;;;;-1:-1:-1;20166:286:0;;;;;:::i;:::-;;:::i;37958:99::-;;;;;;;;;;-1:-1:-1;37958:99:0;;;;;:::i;:::-;;:::i;38819:567::-;;;;;;;;;;;;;:::i;17708:32::-;;;;;;;;;;-1:-1:-1;17708:32:0;;;;-1:-1:-1;;;;;17708:32:0;;;39585:160;;;;;;;;;;-1:-1:-1;39585:160:0;;;;;:::i;:::-;;:::i;15866:536::-;;;;;;;;;;-1:-1:-1;15866:536:0;;;;;:::i;:::-;;:::i;29497:132::-;;;;;;;;;;-1:-1:-1;29497:132:0;;;;;:::i;:::-;;:::i;16904:46::-;;;;;;;;;;-1:-1:-1;16904:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16904:46:0;;;;;;;;;;;-1:-1:-1;;;;;19246:32:1;;;19228:51;;19310:2;19295:18;;19288:34;;;;19338:18;;;19331:34;19216:2;19201:18;16904:46:0;19026:345:1;40124:1685:0;;;;;;;;;;-1:-1:-1;40124:1685:0;;;;;:::i;:::-;;:::i;34173:188::-;;;;;;;;;;-1:-1:-1;34173:188:0;;;;;:::i;:::-;;:::i;17673:28::-;;;;;;;;;;-1:-1:-1;17673:28:0;;;;-1:-1:-1;;;;;17673:28:0;;;38381:108;;;;;;;;;;-1:-1:-1;38381:108:0;;;;;:::i;:::-;;:::i;34056:111::-;;;;;;;;;;-1:-1:-1;34056:111:0;;;;;:::i;:::-;;:::i;35549:167::-;;;;;;;;;;-1:-1:-1;35549:167:0;;;;;:::i;:::-;;:::i;17747:20::-;;;;;;;;;;-1:-1:-1;17747:20:0;;;;-1:-1:-1;;;;;17747:20:0;;;38495:111;;;;;;;;;;-1:-1:-1;38495:111:0;;;;;:::i;:::-;;:::i;29128:363::-;;;;;;:::i;:::-;;:::i;17801:22::-;;;;;;;;;;-1:-1:-1;17801:22:0;;;;-1:-1:-1;;;;;17801:22:0;;;8247:101;;;;;;;;;;-1:-1:-1;8327:13:0;;-1:-1:-1;;;;;8327:13:0;8247:101;;38273:102;;;;;;;;;;-1:-1:-1;38273:102:0;;;;;:::i;:::-;;:::i;33397:98::-;;;;;;;;;;-1:-1:-1;33397:98:0;;;;;:::i;:::-;;:::i;17965:42::-;;;;;;;;;;-1:-1:-1;17965:42:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;17965:42:0;;;30444:153;;;;;;;;;;-1:-1:-1;30444:153:0;;;;;:::i;:::-;;:::i;17830:26::-;;;;;;;;;;-1:-1:-1;17830:26:0;;;;-1:-1:-1;;;;;17830:26:0;;;17317:73;;;;;;;;;;-1:-1:-1;17317:73:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;39751:94;;;;;;;;;;-1:-1:-1;39751:94:0;;;;;:::i;:::-;;:::i;8674:181::-;;;;;;;;;;-1:-1:-1;8674:181:0;;;;;:::i;:::-;;:::i;42646:431::-;;;;;;;;;;;;;:::i;42393:247::-;;;;;;;;;;-1:-1:-1;42393:247:0;;;;;:::i;:::-;;:::i;19931:108::-;;;;;;;;;;-1:-1:-1;19931:108:0;;;;;:::i;:::-;;:::i;16849:48::-;;;;;;;;;;-1:-1:-1;16849:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16849:48:0;;;;;;;37608:101;;;;;;;;;;-1:-1:-1;37608:101:0;;;;;:::i;:::-;;:::i;17397:44::-;;;;;;;;;;-1:-1:-1;17397:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;17865:23;;;;;;;;;;-1:-1:-1;17865:23:0;;;;-1:-1:-1;;;;;17865:23:0;;;17646:20;;;;;;;;;;-1:-1:-1;17646:20:0;;;;;;;-1:-1:-1;;;;;17646:20:0;;;37715:114;;;;;;;;;;-1:-1:-1;37715:114:0;;;;;:::i;:::-;;:::i;37835:117::-;;;;;;;;;;-1:-1:-1;37835:117:0;;;;;:::i;:::-;;:::i;42122:265::-;5369:13;:11;:13::i;:::-;12117:21:::1;:19;:21::i;:::-;41873::::0;42209:7:::2;:23;;42201:58;;;::::0;-1:-1:-1;;;42201:58:0;;23167:2:1;42201:58:0::2;::::0;::::2;23149:21:1::0;23206:2;23186:18;;;23179:30;-1:-1:-1;;;23225:18:1;;;23218:52;23287:18;;42201:58:0::2;;;;;;;;;42289:44;::::0;42271:12:::2;::::0;42297:10:::2;::::0;42321:7;;42271:12;42289:44;42271:12;42289:44;42321:7;42297:10;42289:44:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42270:63;;;42352:7;42344:35;;;::::0;-1:-1:-1;;;42344:35:0;;23728:2:1;42344:35:0::2;::::0;::::2;23710:21:1::0;23767:2;23747:18;;;23740:30;-1:-1:-1;;;23786:18:1;;;23779:45;23841:18;;42344:35:0::2;23526:339:1::0;42344:35:0::2;42190:197;12161:20:::1;11452:1:::0;12703:7;:21;12520:212;12161:20:::1;42122:265:::0;:::o;38063:99::-;5369:13;:11;:13::i;:::-;38132:7:::1;:22:::0;;-1:-1:-1;;;;;;38132:22:0::1;-1:-1:-1::0;;;;;38132:22:0;;;::::1;::::0;;;::::1;::::0;;38063:99::o;32081:371::-;32157:24;32194:30;32249:7;-1:-1:-1;;;;;32227:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;32227:30:0;;;;;;;;;;;;;;;;-1:-1:-1;32194:63:0;-1:-1:-1;32273:6:0;32268:154;32289:7;32285:1;:11;32268:154;;;32329:81;;;;;;;;32352:1;32345:4;:8;;;;:::i;:::-;32329:81;;;;32355:16;:26;32372:8;32379:1;32372:4;:8;:::i;:::-;32355:26;;;;;;;;;;;;32329:81;;;;32383:16;:26;32407:1;32400:4;:8;;;;:::i;:::-;32383:26;;;;;;;;;;;;32329:81;;;32318:5;32324:1;32318:8;;;;;;;;:::i;:::-;;;;;;;;;;:92;32298:3;;32268:154;;;-1:-1:-1;32439:5:0;-1:-1:-1;32081:371:0;;;;;:::o;23067:1454::-;23339:4;2390:19;:17;:19::i;:::-;12117:21:::1;:19;:21::i;:::-;23312:6:::2;13843:35;13872:5;13843:28;:35::i;:::-;23374:10:::3;-1:-1:-1::0;;;;;23364:20:0;::::3;::::0;23356:51:::3;;;::::0;-1:-1:-1;;;23356:51:0;;24469:2:1;23356:51:0::3;::::0;::::3;24451:21:1::0;24508:2;24488:18;;;24481:30;-1:-1:-1;;;24527:18:1;;;24520:48;24585:18;;23356:51:0::3;24267:342:1::0;23356:51:0::3;23427:25;23447:4;23427:19;:25::i;:::-;23418:58;;;::::0;-1:-1:-1;;;23418:58:0;;24816:2:1;23418:58:0::3;::::0;::::3;24798:21:1::0;24855:2;24835:18;;;24828:30;-1:-1:-1;;;24874:18:1;;;24867:49;24933:18;;23418:58:0::3;24614:343:1::0;23418:58:0::3;-1:-1:-1::0;;;;;23496:24:0;::::3;;::::0;;;:16:::3;:24;::::0;;;;;;;:30;;;;;;;;;::::3;;23495:31;23487:61;;;::::0;-1:-1:-1;;;23487:61:0;;25164:2:1;23487:61:0::3;::::0;::::3;25146:21:1::0;25203:2;25183:18;;;25176:30;-1:-1:-1;;;25222:18:1;;;25215:47;25279:18;;23487:61:0::3;24962:341:1::0;23487:61:0::3;23569:22;23594:33;23620:6;23594:25;:33::i;:::-;23569:58;;23664:1;23646:8;:15;:19;23638:56;;;::::0;-1:-1:-1;;;23638:56:0;;25510:2:1;23638:56:0::3;::::0;::::3;25492:21:1::0;25549:2;25529:18;;;25522:30;25588:26;25568:18;;;25561:54;25632:18;;23638:56:0::3;25308:348:1::0;23638:56:0::3;23744:7;::::0;:28:::3;::::0;-1:-1:-1;;;23744:28:0;;23716:12:::3;::::0;;;-1:-1:-1;;;;;23744:7:0;;::::3;::::0;:18:::3;::::0;:28:::3;::::0;23763:8;;23744:28:::3;;;:::i;:::-;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23715:57;;;;23783:45;23802:9;23813:7;23822:5;23783:18;:45::i;:::-;23853:15;::::0;::::3;;23849:205;;;23885:19;23907:30;23918:4;23923;;23928:8;;23907:10;:30::i;:::-;23885:52;;23961:8;23970:6;23961:16;;;;;;:::i;:::-;::::0;;;::::3;::::0;;;;;::::3;::::0;;;;::::3;;23960:17;23952:52;;;::::0;-1:-1:-1;;;23952:52:0;;26517:2:1;23952:52:0::3;::::0;::::3;26499:21:1::0;26556:2;26536:18;;;26529:30;-1:-1:-1;;;26575:18:1;;;26568:52;26637:18;;23952:52:0::3;26315:346:1::0;23952:52:0::3;24038:4;24019:8;24028:6;24019:16;;;;;;:::i;:::-;::::0;;;::::3;::::0;;;;;::::3;::::0;;;:23;;;::::3;;-1:-1:-1::0;;24019:23:0;;::::3;::::0;;;::::3;::::0;;-1:-1:-1;23849:205:0::3;24074:43;24102:8;24112:4;24074:27;:43::i;:::-;24138:12;24153:13;;;;;;;;;-1:-1:-1::0;;;;;24153:13:0::3;-1:-1:-1::0;;;;;24153:42:0::3;;24196:6;24204:4;24210:8;24220:4;;24226:8;;24153:82;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24138:97;;24264:1;24254:7;:11;24246:54;;;::::0;-1:-1:-1;;;24246:54:0;;28330:2:1;24246:54:0::3;::::0;::::3;28312:21:1::0;28369:2;28349:18;;;28342:30;28408:32;28388:18;;;28381:60;28458:18;;24246:54:0::3;28128:354:1::0;24246:54:0::3;24321:50;24339:6;24347:4;24353:7;24362:8;24321:17;:50::i;:::-;24382:49;24399:6;24407:4;24413:7;24422:8;24382:16;:49::i;:::-;24457:34;24469:7;24478:6;24486:4;24457:34;;;;;;;28689:25:1::0;;;-1:-1:-1;;;;;28750:32:1;;;;28745:2;28730:18;;28723:60;28814:2;28799:18;;28792:34;28677:2;28662:18;;28487:345;24457:34:0::3;;;;;;;;24509:4;24502:11;;;;;;12149:1:::2;12161:20:::1;11452:1:::0;12703:7;:21;12520:212;12161:20:::1;23067:1454:::0;;;;;;;;;;;:::o;35923:128::-;36021:7;;:28;;-1:-1:-1;;;36021:28:0;;35991:9;;;;-1:-1:-1;;;;;36021:7:0;;;;:18;;:28;;36040:8;;;;36021:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36014:35;;;;35923:128;;;;;;:::o;34369:::-;34464:11;;:31;;;-1:-1:-1;;;34464:31:0;;;;34419:36;;-1:-1:-1;;;;;34464:11:0;;:29;;:31;;;;;:11;;:31;;;;;;;:11;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34464:31:0;;;;;;;;;;;;:::i;:::-;34457:38;;34369:128;:::o;39398:175::-;5369:13;:11;:13::i;:::-;39528:37:::1;39548:16;39528:19;:37::i;41902:214::-:0;5369:13;:11;:13::i;:::-;12117:21:::1;:19;:21::i;:::-;42019:43:::2;::::0;41873:21;;41963:11:::2;::::0;42027:10:::2;::::0;41873:21;;41963:11;42019:43;41963:11;42019:43;41873:21;42027:10;42019:43:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42000:62;;;42081:7;42073:35;;;::::0;-1:-1:-1;;;42073:35:0;;23728:2:1;42073:35:0::2;::::0;::::2;23710:21:1::0;23767:2;23747:18;;;23740:30;-1:-1:-1;;;23786:18:1;;;23779:45;23841:18;;42073:35:0::2;23526:339:1::0;42073:35:0::2;41952:164;;12161:20:::1;11452:1:::0;12703:7;:21;12520:212;12161:20:::1;41902:214::o:0;30603:473::-;30690:22;30725:10;;30750:99;30771:5;:12;30767:1;:16;30750:99;;;30795:41;30821:5;30827:1;30821:8;;;;;;;;:::i;:::-;;;;;;;30831:4;30795:25;:41::i;:::-;30791:57;;;30839:7;;;;:::i;:::-;;;;30791:57;30785:3;;30750:99;;;;30881:5;-1:-1:-1;;;;;30870:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30870:17:0;-1:-1:-1;30859:28:0;-1:-1:-1;30898:10:0;;30923:120;30944:5;:12;30940:1;:16;30923:120;;;30968:41;30994:5;31000:1;30994:8;;;;;;;;:::i;:::-;;;;;;;31004:4;30968:25;:41::i;:::-;30964:78;;;31032:5;31038:1;31032:8;;;;;;;;:::i;:::-;;;;;;;31012;31021:7;;;;;:::i;:::-;;;31012:17;;;;;;;;:::i;:::-;;;;;;:28;;;;;30964:78;30958:3;;30923:120;;;;31053:15;;30603:473;;;;:::o;35724:90::-;35787:7;;:25;;;-1:-1:-1;;;35787:25:0;;;;35773:4;;-1:-1:-1;;;;;35787:7:0;;:23;;:25;;;;;;;;;;;;;;:7;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32823:361::-;32899:16;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32899:16:0;32928;32947:22;32955:6;32963:5;32947:22;;:7;:22::i;:::-;32928:41;;32980:20;33003:7;33011:3;33003:12;;;;;;:::i;:::-;;;;;;;;;;;;;;;;32980:35;;;;;;;-1:-1:-1;;;;;32980:35:0;;;;;;;;;;;;;;;;;;;;;;;33003:12;-1:-1:-1;33030:15:0;:51;;;;-1:-1:-1;33057:9:0;;-1:-1:-1;;;;;33057:9:0;33049:32;;33030:51;33026:130;;;33105:9;;:39;;-1:-1:-1;;;33105:39:0;;-1:-1:-1;;;;;31712:32:1;;;33105:39:0;;;31694:51:1;31793:10;31781:23;;31761:18;;;31754:51;33105:9:0;;;;:24;;31667:18:1;;33105:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33098:46;;;;;;33026:130;33173:3;32823:361;-1:-1:-1;;;;32823:361:0:o;36057:114::-;36142:7;;:27;;-1:-1:-1;;;36142:27:0;;;;;160:25:1;;;36112:9:0;;;;-1:-1:-1;;;;;36142:7:0;;;;:20;;133:18:1;;36142:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36135:34;;;;36057:114;;;:::o;19789:49::-;5369:13;:11;:13::i;:::-;19826:10:::1;:8;:10::i;33602:195::-:0;33734:13;;:61;;-1:-1:-1;;;33734:61:0;;33721:4;;-1:-1:-1;;;;;33734:13:0;;:35;;:61;;33770:8;;;;33780:4;;;;33786:8;;;;33734:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33727:68;33602:195;-1:-1:-1;;;;;;;33602:195:0:o;33196:72::-;33235:4;33260:6;33248:9;:7;:9::i;:::-;:18;;;;:::i;31082:111::-;31147:4;31160:24;31177:6;31160:16;:24::i;:::-;:31;;31082:111;-1:-1:-1;;31082:111:0:o;36183:517::-;36266:4;-1:-1:-1;;;;;36291:27:0;;36283:61;;;;-1:-1:-1;;;36283:61:0;;33801:2:1;36283:61:0;;;33783:21:1;33840:2;33820:18;;;33813:30;-1:-1:-1;;;33859:18:1;;;33852:51;33920:18;;36283:61:0;33599:345:1;36283:61:0;36355:14;36378:13;-1:-1:-1;;;;;36372:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36355:48;;36428:8;:13;;36440:1;36428:13;36424:269;;36465:7;36458:14;;;;;36424:269;36494:8;:14;;36506:2;36494:14;36490:203;;36532:16;:7;36542:6;36532:16;:::i;:::-;36525:23;;;;;36490:203;36581:22;36606:18;36623:1;36606:14;;;:18;:::i;:::-;36581:43;-1:-1:-1;36657:23:0;36581:43;36657:2;:23;:::i;:::-;36646:35;;:7;:35;:::i;36490:203::-;36272:428;36183:517;;;;:::o;20458:1101::-;20526:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20526:28:0;20598:7;;:26;;-1:-1:-1;;;20598:26:0;;-1:-1:-1;;;;;616:32:1;;;20598:26:0;;;598:51:1;20569:26:0;;20598:7;;;;;:19;;571:18:1;;20598:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20598:26:0;;;;;;;;;;;;:::i;:::-;20657:15;;20635:37;;20702:14;;;;;20683:16;;;:33;;;20749:23;20727:19;;;:45;20807:8;;20569:55;;-1:-1:-1;;;;;;20807:8:0;20799:31;20795:173;;20866:8;;:25;;-1:-1:-1;;;20866:25:0;;-1:-1:-1;;;;;616:32:1;;;20866:25:0;;;598:51:1;20866:8:0;;;;:18;;571::1;;20866:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20866:25:0;;;;;;;;;;;;:::i;:::-;20847:16;;;:44;20795:173;;;20943:13;;;20954:1;20943:13;;;;;;;;20924:16;;;:32;20795:173;21000:16;;;;:23;20978:19;;;:45;21058:10;;-1:-1:-1;;;;;21058:10:0;21050:33;21046:506;;21126:10;;:38;;-1:-1:-1;;;21126:38:0;;-1:-1:-1;;;;;616:32:1;;;21126:38:0;;;598:51:1;21101:9:0;;;;21126:10;;;:31;;571:18:1;;21126:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21100:64;;;;21190:1;21183:4;:8;:21;;;;;21203:1;21195:5;:9;21183:21;21179:296;;;21256:5;-1:-1:-1;;;;;21245:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21245:17:0;-1:-1:-1;21225:17:0;;;:37;21288:6;21283:103;21304:5;21300:1;:9;21283:103;;;21362:4;21339:8;:17;;;21357:1;21339:20;;;;;;;;:::i;:::-;;;;;;;;;;:27;21311:3;;21283:103;;;;21179:296;;;21446:13;;;21457:1;21446:13;;;;;;;;21426:17;;;:33;21179:296;21085:401;;21046:506;;;21527:13;;;21538:1;21527:13;;;;;;;;21507:17;;;:33;21046:506;20556:1003;20458:1101;;;:::o;33274:117::-;33321:4;33363:14;;33380:7;33363:24;;;;:::i;:::-;33339:49;;33343:15;33339:49;:::i;43083:391::-;5369:13;:11;:13::i;:::-;12117:21:::1;:19;:21::i;:::-;-1:-1:-1::0;;;;;43181:27:0;::::2;43173:61;;;::::0;-1:-1:-1;;;43173:61:0;;33801:2:1;43173:61:0::2;::::0;::::2;33783:21:1::0;33840:2;33820:18;;;33813:30;-1:-1:-1;;;33859:18:1;;;33852:51;33920:18;;43173:61:0::2;33599:345:1::0;43173:61:0::2;43260:45;::::0;-1:-1:-1;;;43260:45:0;;43299:4:::2;43260:45;::::0;::::2;598:51:1::0;43245:12:0::2;::::0;-1:-1:-1;;;;;43260:30:0;::::2;::::0;::::2;::::0;571:18:1;;43260:45:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43245:60;;43334:1;43324:7;:11;43316:46;;;::::0;-1:-1:-1;;;43316:46:0;;38313:2:1;43316:46:0::2;::::0;::::2;38295:21:1::0;38352:2;38332:18;;;38325:30;-1:-1:-1;;;38371:18:1;;;38364:52;38433:18;;43316:46:0::2;38111:346:1::0;43316:46:0::2;43424:42;::::0;-1:-1:-1;;;43424:42:0;;43402:10:::2;43424:42;::::0;::::2;38644:51:1::0;;;38711:18;;;38704:34;;;43402:10:0;-1:-1:-1;;;;;43424:29:0;::::2;::::0;::::2;::::0;38617:18:1;;43424:42:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43162:312;;12161:20:::1;11452:1:::0;12703:7;:21;12520:212;39947:90;5369:13;:11;:13::i;:::-;40011:10:::1;:18:::0;39947:90::o;20045:113::-;5369:13;:11;:13::i;:::-;-1:-1:-1;;;;;20118:24:0::1;20145:5;20118:24:::0;;;:16:::1;:24;::::0;;;;:32;;-1:-1:-1;;20118:32:0::1;::::0;;20045:113::o;37507:95::-;5369:13;:11;:13::i;:::-;37578:8:::1;:16:::0;;-1:-1:-1;;;;;;37578:16:0::1;-1:-1:-1::0;;;;;37578:16:0;;;::::1;::::0;;;::::1;::::0;;37507:95::o;30127:311::-;30273:9;;30205:4;;;;-1:-1:-1;;;;;30273:9:0;30265:32;30261:102;;30318:9;;:43;;-1:-1:-1;;;30318:43:0;;-1:-1:-1;;;;;38662:32:1;;;30318:43:0;;;38644:51:1;38711:18;;;38704:34;;;30318:9:0;;;;:28;;38617:18:1;;30318:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30300:61;;30261:102;-1:-1:-1;;;;;30380:24:0;;;;;;:16;:24;;;;;;;;:31;;;;;;;;;;;;:50;;-1:-1:-1;30415:15:0;30373:57;-1:-1:-1;;;30127:311:0:o;6158:103::-;5369:13;:11;:13::i;:::-;6223:30:::1;6250:1;6223:18;:30::i;35421:122::-:0;35510:31;;35488:12;39451:15:1;;;-1:-1:-1;;39447:53:1;35510:31:0;;;39435:66:1;39517:12;;;39510:28;;;35488:12:0;39554::1;;35510:31:0;;;;;;;;;;;;35503:38;;35421:122;;;;:::o;38614:193::-;5369:13;:11;:13::i;:::-;38717:1:::1;38708:6;:10;38700:54;;;::::0;-1:-1:-1;;;38700:54:0;;39779:2:1;38700:54:0::1;::::0;::::1;39761:21:1::0;39818:2;39798:18;;;39791:30;39857:33;39837:18;;;39830:61;39908:18;;38700:54:0::1;39577:355:1::0;38700:54:0::1;38765:18;::::0;;;:10:::1;:18;::::0;;;;;:34;;-1:-1:-1;;;;;;38765:34:0::1;-1:-1:-1::0;;;;;38765:34:0;;::::1;::::0;;;::::1;::::0;;38614:193::o;9286:235::-;8327:13;;775:10;;-1:-1:-1;;;;;8327:13:0;9383:24;;9379:98;;9431:34;;-1:-1:-1;;;9431:34:0;;-1:-1:-1;;;;;616:32:1;;9431:34:0;;;598:51:1;571:18;;9431:34:0;427:228:1;9379:98:0;9487:26;9506:6;9487:18;:26::i;39851:90::-;5369:13;:11;:13::i;:::-;39913:15:::1;:20:::0;;-1:-1:-1;;39913:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39851:90::o;19738:45::-;5369:13;:11;:13::i;:::-;19773:8:::1;:6;:8::i;33803:247::-:0;33969:13;;:79;;-1:-1:-1;;;33969:79:0;;33956:4;;-1:-1:-1;;;;;33969:13:0;;:42;;:79;;34012:4;;34018:3;;34023:8;;;;34033:4;;;;34039:8;;;;33969:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;43480:685::-;5369:13;:11;:13::i;:::-;12117:21:::1;:19;:21::i;:::-;41873::::0;43628:16;;43624:174:::2;;43680:49;::::0;43662:12:::2;::::0;43688:10:::2;::::0;43712:12;;43662;43680:49;43662:12;43680:49;43712:12;43688:10;43680:49:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43661:68;;;43752:7;43744:42;;;::::0;-1:-1:-1;;;43744:42:0;;41077:2:1;43744:42:0::2;::::0;::::2;41059:21:1::0;41116:2;41096:18;;;41089:30;-1:-1:-1;;;41135:18:1;;;41128:52;41197:18;;43744:42:0::2;40875:346:1::0;43744:42:0::2;43646:152;43624:174;43852:6;43847:311;43868:1;43864;:5;43847:311;;;43920:1;43895:13:::0;;;:10:::2;:13;::::0;;;;;-1:-1:-1;;;;;43895:13:0::2;:27:::0;43891:256:::2;;43943:12;43964:13:::0;;;:10:::2;:13;::::0;;;;;;43958:45;;-1:-1:-1;;;43958:45:0;;43997:4:::2;43958:45;::::0;::::2;598:51:1::0;-1:-1:-1;;;;;43964:13:0;;::::2;::::0;43958:30:::2;::::0;571:18:1;;43958:45:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43943:60:::0;-1:-1:-1;44026:11:0;;44022:110:::2;;44068:13;::::0;;;:10:::2;:13;::::0;;;;;;;44062:50;;-1:-1:-1;;;44062:50:0;;44092:10:::2;44062:50;::::0;::::2;38644:51:1::0;38711:18;;;38704:34;;;-1:-1:-1;;;;;44068:13:0;;::::2;::::0;44062:29:::2;::::0;38617:18:1;;44062:50:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44022:110;43924:223;43891:256;43871:3;;43847:311;;38168:99:::0;5369:13;:11;:13::i;:::-;38237:7:::1;:22:::0;;-1:-1:-1;;;;;;38237:22:0::1;-1:-1:-1::0;;;;;38237:22:0;;;::::1;::::0;;;::::1;::::0;;38168:99::o;34503:912::-;34553:16;34582:41;34626:11;;;;;;;;;-1:-1:-1;;;;;34626:11:0;-1:-1:-1;;;;;34626:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34626:31:0;;;;;;;;;;;;:::i;:::-;34686:11;;34582:75;;-1:-1:-1;34668:15:0;;34751:242;34772:10;34768:1;:14;34751:242;;;34822:11;;34847:7;;34807:11;;-1:-1:-1;;;;;34822:11:0;;:24;;34847:4;;34852:1;;34847:7;;;;;;:::i;:::-;;;;;;;;;;;:13;34822:39;;-1:-1:-1;;;;;;34822:39:0;;;;;;;-1:-1:-1;;;;;616:32:1;;;34822:39:0;;;598:51:1;571:18;;34822:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34822:39:0;;;;;;;;;;;;:::i;:::-;34800:61;;;;;;;;34880:6;34876:74;;;34919:13;;;;;34876:74;-1:-1:-1;34976:3:0;;34751:242;;;;35015:22;35054:11;-1:-1:-1;;;;;35040:26:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35040:26:0;-1:-1:-1;35015:51:0;-1:-1:-1;35077:10:0;;35102:283;35123:10;35119:1;:14;35102:283;;;35173:11;;35198:7;;35158:11;;-1:-1:-1;;;;;35173:11:0;;:24;;35198:4;;35203:1;;35198:7;;;;;;:::i;:::-;;;;;;;;;;;:13;35173:39;;-1:-1:-1;;;;;;35173:39:0;;;;;;;-1:-1:-1;;;;;616:32:1;;;35173:39:0;;;598:51:1;571:18;;35173:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35173:39:0;;;;;;;;;;;;:::i;:::-;35151:61;;;;;;;;35231:6;35227:115;;;35273:4;35278:1;35273:7;;;;;;;;:::i;:::-;;;;;;;:13;;;35258:5;35264;35258:12;;;;;;;;:::i;:::-;;;;;;:28;-1:-1:-1;;;;;35258:28:0;;;-1:-1:-1;;;;;35258:28:0;;;;;35317:7;;;;;35227:115;-1:-1:-1;35368:3:0;;35102:283;;;-1:-1:-1;35402:5:0;;34503:912;-1:-1:-1;;;;;34503:912:0:o;35820:93::-;35884:7;;:27;;;-1:-1:-1;;;35884:27:0;;;;35871:4;;-1:-1:-1;;;;;35884:7:0;;:25;;:27;;;;;;;;;;;;;;:7;:27;;;;;;;;;;;;;;32458:359;32532:16;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32532:16:0;32561;32580:22;32588:6;32596:5;32580:22;;:7;:22::i;:::-;32561:41;;32613:20;32636:9;32646:3;32636:14;;;;;;:::i;:::-;;;;;;;;;;;;;;;;32613:37;;;;;;;-1:-1:-1;;;;;32613:37:0;;;;;;;;;;;;;;;;;;;;;;;32636:14;-1:-1:-1;32665:15:0;:51;;;;-1:-1:-1;32692:9:0;;-1:-1:-1;;;;;32692:9:0;32684:32;;32665:51;32661:128;;;32740:9;;:37;;-1:-1:-1;;;32740:37:0;;-1:-1:-1;;;;;31712:32:1;;;32740:37:0;;;31694:51:1;31793:10;31781:23;;31761:18;;;31754:51;32740:9:0;;;;:22;;31667:18:1;;32740:37:0;31522:289:1;31199:876:0;31346:9;;31262:22;;;;-1:-1:-1;;;;;31346:9:0;31338:32;31334:119;;31379:9;;:34;;-1:-1:-1;;;31379:34:0;;-1:-1:-1;;;;;616:32:1;;;31379:34:0;;;598:51:1;31379:9:0;;;;:26;;571:18:1;;31379:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31379:34:0;;;;;;;;;;;;:::i;:::-;31373:40;;31334:119;;;31428:22;;;31448:1;31428:22;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;31428:22:0;;;;;;;;;;;;;;;;31422:28;;31334:119;-1:-1:-1;;;;;31496:23:0;;31463:30;31496:23;;;:15;:23;;;;;;;;31463:56;;;;;;;;;;;;;;;;;;;31496:23;;31463:56;:30;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31530:35;31601:7;:14;31588:3;:10;:27;;;;:::i;:::-;-1:-1:-1;;;;;31568:48:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;31568:48:0;;;;;;;;;;;;;;;-1:-1:-1;31530:86:0;-1:-1:-1;31627:10:0;;31652:111;31673:3;:10;31669:1;:14;31652:111;;;-1:-1:-1;;;;;31696:18:0;;;;;;:10;:18;;;;;31715:6;;31696:18;;;31715:3;;31719:1;;31715:6;;;;;;:::i;:::-;;;;;;;;;;;;:11;;;31696:31;;;;;;;;;;-1:-1:-1;31696:31:0;;;;31691:71;;31754:3;31758:1;31754:6;;;;;;;;:::i;:::-;;;;;;;31730:12;31743:7;;;;;:::i;:::-;;;31730:21;;;;;;;;:::i;:::-;;;;;;:30;;;;31691:71;31685:3;;31652:111;;;-1:-1:-1;31778:6:0;31773:123;31794:7;:14;31790:1;:18;31773:123;;;-1:-1:-1;;;;;31821:18:0;;;;;;:10;:18;;;;;31840:10;;31821:18;;;31840:7;;31848:1;;31840:10;;;;;;:::i;:::-;;;;;;;;;;;;:15;;;31821:35;;;;;;;;;;-1:-1:-1;31821:35:0;;;;31816:79;;31883:7;31891:1;31883:10;;;;;;;;:::i;:::-;;;;;;;31859:12;31872:7;;;;;:::i;:::-;;;31859:21;;;;;;;;:::i;:::-;;;;;;:34;;;;31816:79;31810:3;;31773:123;;;;31906:31;31960:5;-1:-1:-1;;;;;31940:26:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;31940:26:0;;;;;;;;;;;;;;;-1:-1:-1;31906:60:0;-1:-1:-1;31982:6:0;31977:65;31998:5;31994:1;:9;31977:65;;;32025:12;32038:1;32025:15;;;;;;;;:::i;:::-;;;;;;;32011:8;32020:1;32011:11;;;;;;;;:::i;:::-;;;;;;;;;;:29;32005:3;;31977:65;;;-1:-1:-1;32059:8:0;31199:876;-1:-1:-1;;;;;;31199:876:0:o;21573:1482::-;21705:7;;:26;;-1:-1:-1;;;21705:26:0;;-1:-1:-1;;;;;616:32:1;;;21705:26:0;;;598:51:1;21644:23:0;;21682:20;;21705:7;;;;;;;;:19;;571:18:1;;21705:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21705:26:0;;;;;;;;;;;;:::i;:::-;:36;;;21771:13;;21881:8;;21705:36;;-1:-1:-1;21771:13:0;21807:20;;21752:16;;-1:-1:-1;;;;;21881:8:0;21873:31;21869:140;;21930:8;;:25;;-1:-1:-1;;;21930:25:0;;-1:-1:-1;;;;;616:32:1;;;21930:25:0;;;598:51:1;21930:8:0;;;;:18;;571::1;;21930:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21930:25:0;;;;;;;;;;;;:::i;:::-;21921:34;;21984:6;:13;21970:27;;21869:140;22106:10;;22031:17;;;;-1:-1:-1;;;;;22106:10:0;22098:33;22094:187;;22178:10;;:38;;-1:-1:-1;;;22178:38:0;;-1:-1:-1;;;;;616:32:1;;;22178:38:0;;;598:51:1;22178:10:0;;;;:31;;571:18:1;;22178:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22148:68;-1:-1:-1;22148:68:0;-1:-1:-1;22250:1:0;22235:16;;;22231:38;;22268:1;22253:16;;22231:38;22303:15;22349:12;22321:25;22335:11;22321;:25;:::i;:::-;:40;;;;:::i;:::-;22303:58;;22376:10;22390:1;22376:15;22372:68;;-1:-1:-1;;22415:13:0;;;22426:1;22415:13;;;;;;;;;22408:20;-1:-1:-1;;;;;;;21573:1482:0:o;22372:68::-;22483:10;-1:-1:-1;;;;;22472:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22472:22:0;-1:-1:-1;22460:34:0;-1:-1:-1;22505:10:0;;22542:124;22563:11;22559:1;:15;22542:124;;;22613:6;22620:1;22613:9;;;;;;;;:::i;:::-;;;;;;;22592;22602:7;;;;;:::i;:::-;;;22592:18;;;;;;;;:::i;:::-;;;;;;;;;;:30;22649:3;;22542:124;;;-1:-1:-1;22693:6:0;22688:124;22709:11;22705:1;:15;22688:124;;;22759:6;22766:1;22759:9;;;;;;;;:::i;:::-;;;;;;;22738;22748:7;;;;;:::i;:::-;;;22738:18;;;;;;;;:::i;:::-;;;;;;;;;;:30;22795:3;;22688:124;;;-1:-1:-1;22838:16:0;;22834:187;;22876:6;22871:139;22892:12;22888:1;:16;22871:139;;;22947:11;22926:9;22936:7;;;;:::i;:::-;;;22926:18;;;;;;;;:::i;:::-;;;;;;;;;;:32;22989:3;;22871:139;;;;22834:187;23031:16;;;;;;;;21573:1482;;;:::o;16957:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16957:62:0;-1:-1:-1;16957:62:0;:::o;20166:286::-;5369:13;:11;:13::i;:::-;20254:18:::1;20300:6:::0;20287:158:::1;20312:4;20308:1;:8;20287:158;;20360:9;::::0;:29:::1;::::0;-1:-1:-1;;;20360:29:0;;::::1;::::0;::::1;160:25:1::0;;;-1:-1:-1;;;;;20360:9:0;;::::1;::::0;:26:::1;::::0;133:18:1;;20360:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20338:19;::::0;;;:16:::1;:19;::::0;;;;:51;20416:15:::1;::::0;;::::1;::::0;20355:1;20318:3:::1;20355:1:::0;20318:3:::1;:::i;:::-;;;;20287:158;;;;20243:209;20166:286:::0;;:::o;37958:99::-;5369:13;:11;:13::i;:::-;38027:7:::1;:22:::0;;-1:-1:-1;;;;;38027:22:0;;::::1;;;-1:-1:-1::0;;;;;;38027:22:0;;::::1;::::0;;;::::1;::::0;;37958:99::o;38819:567::-;38865:16;38894:15;;38934:135;38955:1;38951;:5;38934:135;;;39007:1;38982:13;;;:10;:13;;;;;;-1:-1:-1;;;;;38982:13:0;:27;38978:80;;39030:12;;;;:::i;:::-;;;;38978:80;38958:3;;38934:135;;;;39089:28;39134:10;-1:-1:-1;;;;;39120:25:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39120:25:0;-1:-1:-1;39089:56:0;-1:-1:-1;39156:10:0;;39181:159;39202:1;39198;:5;39181:159;;;39254:1;39229:13;;;:10;:13;;;;;;-1:-1:-1;;;;;39229:13:0;:27;39225:104;;39300:13;;;;:10;:13;;;;;;-1:-1:-1;;;;;39300:13:0;39277:11;39289:7;;;;:::i;:::-;;;39277:20;;;;;;;;:::i;:::-;;;;;;:36;-1:-1:-1;;;;;39277:36:0;;;-1:-1:-1;;;;;39277:36:0;;;;;39225:104;39205:3;;39181:159;;;-1:-1:-1;39367:11:0;;38819:567;-1:-1:-1;;;38819:567:0:o;39585:160::-;5369:13;:11;:13::i;:::-;39706:31:::1;39729:7;39706:22;:31::i;15866:536::-:0;15948:4;-1:-1:-1;;;;;15969:19:0;;;;:43;;-1:-1:-1;;;;;;15992:20:0;;;15969:43;15965:61;;;-1:-1:-1;16021:5:0;16014:12;;15965:61;16054:25;;-1:-1:-1;;;16054:25:0;;;;16049:43;;-1:-1:-1;16088:4:0;16081:11;;16049:43;16127:5;-1:-1:-1;;;;;16117:15:0;:6;-1:-1:-1;;;;;16117:15:0;;16113:32;;-1:-1:-1;16141:4:0;16134:11;;16113:32;16168:15;;-1:-1:-1;;;;;16168:15:0;16156:56;;-1:-1:-1;16207:5:0;16200:12;;16156:56;16237:15;;:49;;-1:-1:-1;;;16237:49:0;;-1:-1:-1;;;;;43940:32:1;;;16237:49:0;;;43922:51:1;44009:32;;;43989:18;;;43982:60;16237:15:0;;;;:34;;43895:18:1;;16237:49:0;;;;;;;;;;;;;;;;;;-1:-1:-1;16237:49:0;;;;;;;;-1:-1:-1;;16237:49:0;;;;;;;;;;;;:::i;:::-;;;16233:162;;-1:-1:-1;16378:5:0;16371:12;;16233:162;16331:6;-1:-1:-1;16324:13:0;;29497:132;19901:10;19884:28;;;;:16;:28;;;;;;;;:36;;:28;:36;19876:45;;;;;;29588:22:::1;::::0;::::1;;::::0;;;:16:::1;:22;::::0;;;;:33;;29614:7;;29588:22;:33:::1;::::0;29614:7;;29588:33:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;29497:132:0:o;40124:1685::-;5369:13;:11;:13::i;:::-;40254:40;;::::1;40246:75;;;::::0;-1:-1:-1;;;40246:75:0;;44255:2:1;40246:75:0::1;::::0;::::1;44237:21:1::0;44294:2;44274:18;;;44267:30;-1:-1:-1;;;44313:18:1;;;44306:52;44375:18;;40246:75:0::1;44053:346:1::0;40246:75:0::1;40340:19:::0;40332:44:::1;;;::::0;-1:-1:-1;;;40332:44:0;;44606:2:1;40332:44:0::1;::::0;::::1;44588:21:1::0;44645:2;44625:18;;;44618:30;-1:-1:-1;;;44664:18:1;;;44657:42;44716:18;;40332:44:0::1;44404:336:1::0;40332:44:0::1;40397:19;::::0;40441:955:::1;40458:19:::0;;::::1;40441:955;;;40499:14;40516:8;;40525:1;40516:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;40499:28;;40542:18;40563:14;;40578:1;40563:17;;;;;;;:::i;:::-;;;;;;;40542:38;;40680:28;40711:34;40724:6;40739:4;40711:12;:34::i;:::-;40680:65;;40803:1;40782:11;:18;;;:22;40774:65;;;::::0;-1:-1:-1;;;40774:65:0;;44947:2:1;40774:65:0::1;::::0;::::1;44929:21:1::0;44986:2;44966:18;;;44959:30;45025:32;45005:18;;;44998:60;45075:18;;40774:65:0::1;44745:354:1::0;40774:65:0::1;40881:4;40862:11;:15;;;:23;40854:48;;;::::0;-1:-1:-1;;;40854:48:0;;45306:2:1;40854:48:0::1;::::0;::::1;45288:21:1::0;45345:2;45325:18;;;45318:30;-1:-1:-1;;;45364:18:1;;;45357:42;45416:18;;40854:48:0::1;45104:336:1::0;40854:48:0::1;40988:14;41035:13;41009:11;:18;;;41005:44;;;;:::i;:::-;40988:61:::0;-1:-1:-1;41064:29:0::1;40988:61:::0;41064:29;::::1;:::i;:::-;;;41199:18;41220:21;41228:6;41236:4;41220:7;:21::i;:::-;41199:42;;41282:13;41256:9;41266:5;41256:16;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;:39;;;;41336:6;41310:9;41320:5;41310:16;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:32;;-1:-1:-1;;;;;41310:32:0;;;::::1;-1:-1:-1::0;;;;;;41310:32:0;;::::1;::::0;;;::::1;::::0;;;41380:4;;41357:9:::1;::::0;:16:::1;::::0;41367:5;;41357:16:::1;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:20:::1;;:27:::0;-1:-1:-1;;40479:3:0::1;::::0;;::::1;::::0;-1:-1:-1;40441:955:0::1;::::0;-1:-1:-1;;40441:955:0::1;;;41619:1;41601:15;:19;41597:205;;;41637:22;::::0;;;:16:::1;:22;::::0;;;;:47;;41668:15;;41637:22;:47:::1;::::0;41668:15;;41637:47:::1;:::i;:::-;::::0;;;-1:-1:-1;41597:205:0::1;::::0;-1:-1:-1;41597:205:0::1;;41724:1;41706:15;:19;41702:100;;;41773:16;41774:15:::0;41773:16:::1;:::i;:::-;41742:22;::::0;;;:16:::1;:22;::::0;;;;:48;;:22;;;:48:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;41702:100:0::1;40235:1574;40124:1685:::0;;;;;:::o;34173:188::-;34234:4;34252:9;:7;:9::i;:::-;34244:5;:17;34241:34;;;-1:-1:-1;34270:5:0;;34173:188;-1:-1:-1;34173:188:0:o;34241:34::-;34287:12;;34279:5;:20;34276:37;;;-1:-1:-1;34308:5:0;;34173:188;-1:-1:-1;34173:188:0:o;34276:37::-;34357:1;34344:10;;:14;;;;:::i;:::-;34334:5;34322:9;:7;:9::i;:::-;:17;;;;:::i;:::-;34321:38;;34173:188;-1:-1:-1;;34173:188:0:o;38381:108::-;5369:13;:11;:13::i;:::-;38453:10:::1;:28:::0;;-1:-1:-1;;;;;;38453:28:0::1;-1:-1:-1::0;;;;;38453:28:0;;;::::1;::::0;;;::::1;::::0;;38381:108::o;34056:111::-;34119:4;34155:10;;34146:5;34134:9;:7;:9::i;:::-;:17;;;;:::i;:::-;34133:32;;34056:111;-1:-1:-1;;34056:111:0:o;35549:167::-;35653:12;35692:5;35699:4;;35705:8;;35675:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35668:46;;35549:167;;;;;;;:::o;38495:111::-;5369:13;:11;:13::i;:::-;38568:11:::1;:30:::0;;-1:-1:-1;;;;;;38568:30:0::1;-1:-1:-1::0;;;;;38568:30:0;;;::::1;::::0;;;::::1;::::0;;38495:111::o;29128:363::-;29315:4;2390:19;:17;:19::i;:::-;12117:21:::1;:19;:21::i;:::-;29271:6:::2;13843:35;13872:5;13843:28;:35::i;:::-;29339:40:::3;29382:25;29389:6;29397:9;29382:6;:25::i;:::-;29418:11;::::0;:43:::3;::::0;-1:-1:-1;;;29418:43:0;;29339:68;;-1:-1:-1;;;;;;29418:11:0::3;::::0;:23:::3;::::0;:43:::3;::::0;29442:6;;29339:68;;29418:43:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29479:4;29472:11;;;12149:1:::2;12161:20:::1;11452:1:::0;12703:7;:21;12520:212;38273:102;5369:13;:11;:13::i;:::-;38343:8:::1;:24:::0;;-1:-1:-1;;;;;;38343:24:0::1;-1:-1:-1::0;;;;;38343:24:0;;;::::1;::::0;;;::::1;::::0;;38273:102::o;33397:98::-;5369:13;:11;:13::i;:::-;33464:14:::1;:23:::0;33397:98::o;30444:153::-;30523:4;30547:22;;;:16;:22;;;;;;;;:28;;;;;;;;;-1:-1:-1;;;;;30547:28:0;:42;;;30444:153::o;39751:94::-;5369:13;:11;:13::i;:::-;39817:12:::1;:20:::0;39751:94::o;8674:181::-;5369:13;:11;:13::i;:::-;8764::::1;:24:::0;;-1:-1:-1;;;;;8764:24:0;::::1;-1:-1:-1::0;;;;;;8764:24:0;;::::1;::::0;::::1;::::0;;;8829:7:::1;5529::::0;5556:6;-1:-1:-1;;;;;5556:6:0;;;;;;5483:87;8829:7:::1;-1:-1:-1::0;;;;;8804:43:0::1;;;;;;;;;;;8674:181:::0;:::o;42646:431::-;5369:13;:11;:13::i;:::-;12117:21:::1;:19;:21::i;:::-;42745:10:::2;42716:18;42767:303;42788:1;42784;:5;42767:303;;;42840:1;42815:13:::0;;;:10:::2;:13;::::0;;;;;-1:-1:-1;;;;;42815:13:0::2;:27:::0;42811:248:::2;;42863:12;42884:13:::0;;;:10:::2;:13;::::0;;;;;;42878:45;;-1:-1:-1;;;42878:45:0;;42917:4:::2;42878:45;::::0;::::2;598:51:1::0;-1:-1:-1;;;;;42884:13:0;;::::2;::::0;42878:30:::2;::::0;571:18:1;;42878:45:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42863:60:::0;-1:-1:-1;42946:11:0;;42942:102:::2;;42988:13;::::0;;;:10:::2;:13;::::0;;;;;;;42982:42;;-1:-1:-1;;;42982:42:0;;-1:-1:-1;;;;;38662:32:1;;;42982:42:0::2;::::0;::::2;38644:51:1::0;38711:18;;;38704:34;;;42988:13:0;;::::2;::::0;42982:29:::2;::::0;38617:18:1;;42982:42:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42942:102;42844:215;42811:248;42791:3;;42767:303;;42393:247:::0;42506:7;5369:13;:11;:13::i;:::-;12117:21:::1;:19;:21::i;:::-;42526:43:::2;::::0;-1:-1:-1;;;42526:43:0;;-1:-1:-1;;;;;38662:32:1;;;42526:43:0::2;::::0;::::2;38644:51:1::0;38711:18;;;38704:34;;;42526:29:0;::::2;::::0;::::2;::::0;38617:18:1;;42526:43:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;42587:45:0::2;::::0;-1:-1:-1;;;42587:45:0;;42626:4:::2;42587:45;::::0;::::2;598:51:1::0;-1:-1:-1;;;;;42587:30:0;::::2;::::0;::::2;::::0;571:18:1;;42587:45:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42580:52;;12161:20:::1;11452:1:::0;12703:7;:21;12520:212;12161:20:::1;42393:247:::0;;;;;:::o;19931:108::-;5369:13;:11;:13::i;:::-;-1:-1:-1;;;;;20000:24:0::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;20000:31:0::1;20027:4;20000:31;::::0;;19931:108::o;37608:101::-;5369:13;:11;:13::i;:::-;37682:11:::1;:19:::0;;-1:-1:-1;;;;;;37682:19:0::1;-1:-1:-1::0;;;;;37682:19:0;;;::::1;::::0;;;::::1;::::0;;37608:101::o;37715:114::-;5369:13;:11;:13::i;:::-;37786:9:::1;:35:::0;;-1:-1:-1;;;;;;37786:35:0::1;-1:-1:-1::0;;;;;37786:35:0;;;::::1;::::0;;;::::1;::::0;;37715:114::o;37835:117::-;5369:13;:11;:13::i;:::-;37910::::1;:34:::0;;-1:-1:-1;;;;;;37910:34:0::1;-1:-1:-1::0;;;;;37910:34:0;;;::::1;::::0;;;::::1;::::0;;37835:117::o;5648:166::-;5529:7;5556:6;-1:-1:-1;;;;;5556:6:0;;;;;775:10;5708:23;5704:103;;5755:40;;-1:-1:-1;;;5755:40:0;;775:10;5755:40;;;598:51:1;571:18;;5755:40:0;427:228:1;12197:315:0;11495:1;12326:7;;:18;12322:88;;12368:30;;-1:-1:-1;;;12368:30:0;;;;;;;;;;;12322:88;11495:1;12487:17;;12197:315::o;2944:132::-;2832:4;2856:7;;;3006:63;;;3042:15;;-1:-1:-1;;;3042:15:0;;;;;;;;;;;14050:671;-1:-1:-1;;;;;14140:19:0;;14136:48;;14168:16;;-1:-1:-1;;;14168:16:0;;;;;;;;;;;14136:48;14212:25;;-1:-1:-1;;;14212:25:0;;;;14207:39;;14050:671;:::o;14207:39::-;-1:-1:-1;;;;;14272:19:0;;:10;:19;14268:32;;14050:671;:::o;14268:32::-;14334:15;;-1:-1:-1;;;;;14334:15:0;14322:98;;14388:20;;-1:-1:-1;;;14388:20:0;;;;;;;;;;;14322:98;14480:15;;:53;;-1:-1:-1;;;14480:53:0;;-1:-1:-1;;;;;43940:32:1;;;14480:53:0;;;43922:51:1;14522:10:0;43989:18:1;;;43982:60;14442:15:0;;14480;;:34;;43895:18:1;;14480:53:0;;;;;;;;;;;;;;;;;;-1:-1:-1;14480:53:0;;;;;;;;-1:-1:-1;;14480:53:0;;;;;;;;;;;;:::i;:::-;;;14476:147;;;14584:6;-1:-1:-1;14476:147:0;14648:10;14643:71;;14682:20;;-1:-1:-1;;;14682:20:0;;;;;;;;;;;14643:71;14125:596;14050:671;:::o;36712:787::-;36811:9;36824:1;36811:14;36807:685;;36908:10;36895:9;:23;;36887:57;;;;-1:-1:-1;;;36887:57:0;;47603:2:1;36887:57:0;;;47585:21:1;47642:2;47622:18;;;47615:30;-1:-1:-1;;;47661:18:1;;;47654:51;47722:18;;36887:57:0;47401:345:1;36887:57:0;36712:787;;;:::o;36807:685::-;36979:1;36966:9;:14;;:32;;;;;36997:1;36984:9;:14;;36966:32;36962:530;;;37053:16;37072:13;37084:1;37072:9;:13;:::i;:::-;37100:19;37122:23;;;:10;:23;;;;;;37053:32;;-1:-1:-1;;;;;;37122:23:0;;37160:54;;;;-1:-1:-1;;;37160:54:0;;47953:2:1;37160:54:0;;;47935:21:1;47992:2;47972:18;;;47965:30;-1:-1:-1;;;48011:18:1;;;48004:46;48067:18;;37160:54:0;47751:340:1;37160:54:0;37243:17;37263:37;37279:7;37288:11;37263:15;:37::i;:::-;37323:72;;-1:-1:-1;;;37323:72:0;;37355:10;37323:72;;;48298:51:1;37375:4:0;48365:18:1;;;48358:60;48434:18;;;48427:34;;;37243:57:0;;-1:-1:-1;;;;;;37323:31:0;;;;;48271:18:1;;37323:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37315:106;;;;-1:-1:-1;;;37315:106:0;;48674:2:1;37315:106:0;;;48656:21:1;48713:2;48693:18;;;48686:30;-1:-1:-1;;;48732:18:1;;;48725:51;48793:18;;37315:106:0;48472:345:1;36962:530:0;37454:26;;-1:-1:-1;;;37454:26:0;;47953:2:1;37454:26:0;;;47935:21:1;47992:2;47972:18;;;47965:30;-1:-1:-1;;;48011:18:1;;;48004:46;48067:18;;37454:26:0;47751:340:1;24890:388:0;24992:6;24987:284;25008:8;:15;25004:1;:19;24987:284;;;25041:12;25056:8;25065:1;25056:11;;;;;;;;:::i;:::-;;;;;;;25041:26;;25095:3;25085:7;:13;25082:146;;;25169:1;25126:25;;;:16;:25;;;;;;;;:31;;;;;;;;;-1:-1:-1;;;;;25126:31:0;:45;25118:94;;;;-1:-1:-1;;;25118:94:0;;49024:2:1;25118:94:0;;;49006:21:1;49063:2;49043:18;;;49036:30;49102:34;49082:18;;;49075:62;-1:-1:-1;;;49153:18:1;;;49146:34;49197:19;;25118:94:0;48822:400:1;25118:94:0;-1:-1:-1;25254:3:0;;24987:284;;25290:730;25402:18;25423:21;25431:6;25439:4;25423:7;:21::i;:::-;25483:32;;;;;;;;-1:-1:-1;;;;;25483:32:0;;;;;;;;;;;;;;;;25402:42;;-1:-1:-1;25455:25:0;25536:230;25557:8;:15;25553:1;:19;25536:230;;;25590:12;25605:8;25614:1;25605:11;;;;;;;;:::i;:::-;;;;;;;25590:26;;25644:3;25634:7;:13;25631:92;;;25667:25;;;;:16;:25;;;;;;;;:31;;;;;;;;:40;;-1:-1:-1;;;;;;25667:40:0;-1:-1:-1;;;;;25667:40:0;;;;;25631:92;-1:-1:-1;25749:3:0;;25536:230;;;-1:-1:-1;25786:22:0;;;;:16;:22;;;;;:33;;25812:7;;25786:22;:33;;25812:7;;25786:33;:::i;:::-;;;;-1:-1:-1;;25830:22:0;;;;:16;:22;;;;;:27;;25856:1;;25830:22;:27;;25856:1;;25830:27;:::i;:::-;;;;-1:-1:-1;;;;;;;25868:23:0;;;;;;:15;:23;;;;;;;;25897:28;;;;;;;;;;;;;;;;25868:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25937:24;;;:16;:24;;;;;:30;;;;;;;;;;:37;;-1:-1:-1;;25937:37:0;;;;;;;25985:16;26004:8;;25985:9;;:16;;25995:5;;25985:16;:::i;:::-;;;;;;;;;;;;;;;;:27;;;;-1:-1:-1;;;;;;25985:27:0;-1:-1:-1;;;;;25985:27:0;;;;;;;;;;-1:-1:-1;25985:27:0;;;;;;;;;;;;;-1:-1:-1;;;;;;25290:730:0:o;24533:345::-;24655:7;;-1:-1:-1;;;;;24655:7:0;24647:30;24644:227;;24717:13;;;24728:1;24717:13;;;;;;;;24693:21;;24717:13;;;;;;;;;;-1:-1:-1;24717:13:0;24693:37;;24758:4;24745:7;24753:1;24745:10;;;;;;;;:::i;:::-;;;;;;:17;;;;;24790:7;24777;24785:1;24777:10;;;;;;;;:::i;:::-;;;;;;;;;;:20;24812:7;;:47;;-1:-1:-1;;;24812:47:0;;-1:-1:-1;;;;;24812:7:0;;;;:17;;:47;;24830:6;;24812:7;;24841;;24850:8;;24812:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24678:193;24533:345;;;;:::o;14741:359::-;-1:-1:-1;;;;;14828:30:0;;14824:59;;14867:16;;-1:-1:-1;;;14867:16:0;;;;;;;;;;;14824:59;14934:15;;;-1:-1:-1;;;;;14961:52:0;;;-1:-1:-1;;;;;;14961:52:0;;;;;;;15039:53;;14934:15;;;14961:52;14934:15;;15039:53;;14904:19;;15039:53;14813:287;14741:359;:::o;3686:120::-;2649:16;:14;:16::i;:::-;3755:5:::1;3745:15:::0;;-1:-1:-1;;3745:15:0::1;::::0;;3776:22:::1;775:10:::0;3785:12:::1;3776:22;::::0;-1:-1:-1;;;;;616:32:1;;;598:51;;586:2;571:18;3776:22:0::1;;;;;;;3686:120::o:0;9045:156::-;9135:13;9128:20;;-1:-1:-1;;;;;;9128:20:0;;;9159:34;9184:8;9159:24;:34::i;3427:118::-;2390:19;:17;:19::i;:::-;3487:7:::1;:14:::0;;-1:-1:-1;;3487:14:0::1;3497:4;3487:14;::::0;;3517:20:::1;3524:12;775:10:::0;;695:98;15401:167;15475:25;:35;;;;;-1:-1:-1;;;15475:35:0;-1:-1:-1;;;;15475:35:0;;;;;;15526:34;;;;;;15503:7;1213:14:1;1206:22;1188:41;;1176:2;1161:18;;1048:187;15526:34:0;;;;;;;;15401:167;:::o;26026:436::-;26094:29;26137:32;26172:24;26189:6;26172:16;:24::i;:::-;26137:59;;26207:14;26224:26;26240:9;26224:15;:26::i;:::-;26207:43;;26272:12;26286:10;26300:23;26313:9;26300:12;:23::i;:::-;26271:52;;;;26334:45;26353:9;26364:7;26373:5;26334:18;:45::i;:::-;26407:47;26425:6;26433:9;26444;26407:17;:47::i;3153:130::-;2832:4;2856:7;;;3212:64;;3249:15;;-1:-1:-1;;;3249:15:0;;;;;;;;;;;6796:191;6870:16;6889:6;;-1:-1:-1;;;;;6906:17:0;;;6889:6;6906:17;;;-1:-1:-1;;;;;;6906:17:0;;;;;6939:40;;6889:6;;;;;;;6906:17;;6889:6;;6939:40;;;6859:128;6796:191;:::o;26474:492::-;26593:16;;26556:4;;;26635:17;:15;:17::i;:::-;26620:32;-1:-1:-1;26663:14:0;;26702:220;26723:12;26719:1;:16;:39;;;;;26751:7;26739:9;:19;26719:39;26702:220;;;26781:36;26799:9;26809:1;26799:12;;;;;;;;:::i;:::-;;;;;;;:17;;;26781;:36::i;:::-;26777:102;;;26850:11;;;;;26777:102;26905:3;;26702:220;;;-1:-1:-1;26949:9:0;26474:492;-1:-1:-1;;;;26474:492:0:o;26978:903::-;27089:29;27157:7;27131:23;27240:9;-1:-1:-1;;;;;27213:37:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;27213:37:0;;;;;;;;;;;;;;;-1:-1:-1;27352:16:0;;27175:75;;-1:-1:-1;27271:16:0;;;;;27389:336;27410:12;27406:1;:16;:42;;;;;27439:9;27426:10;:22;27406:42;27389:336;;;27471:36;27489:9;27499:1;27489:12;;;;;;;;:::i;27471:36::-;27467:215;;;27543:78;27563:6;27571:9;27581:1;27571:12;;;;;;;;:::i;:::-;;;;;;;27585:5;27592:10;27604:16;27543:19;:78::i;:::-;27528:93;;;;:::i;:::-;;;27652:12;;;;;27467:215;27708:3;;27389:336;;;;27745:47;27761:6;27769:9;27780:11;27745:15;:47::i;:::-;27808:42;;;-1:-1:-1;;;;;19246:32:1;;19228:51;;19310:2;19295:18;;19288:34;;;19338:18;;;19331:34;;;27808:42:0;;19216:2:1;19201:18;27808:42:0;;;;;;;-1:-1:-1;27868:5:0;;26978:903;-1:-1:-1;;;;;;;26978:903:0:o;27893:551::-;28101:16;;28161:14;;;;;28067:4;28144:32;;;:16;:32;;;;;;;28067:4;;28101:16;28067:4;28144:32;28220:28;;;;28101:16;28220:28;:::i;:::-;28219:41;;;;:::i;:::-;28197:64;;28292:43;;;;;;;;28313:5;28292:43;;;;;;28320:9;:14;;;28292:43;;;28272:5;28278:10;28272:17;;;;;;;;:::i;:::-;;;;;;:63;;;;28356:43;28376:6;28384:9;:14;;;28356:19;:43::i;:::-;-1:-1:-1;28427:9:0;;27893:551;-1:-1:-1;;;;;;;27893:551:0:o;28779:343::-;28885:7;;-1:-1:-1;;;;;28885:7:0;28877:30;28874:241;;28947:13;;;28958:1;28947:13;;;;;;;;28923:21;;28947:13;;;;;;;;;;-1:-1:-1;28947:13:0;28923:37;;28988:9;28975:7;28983:1;28975:10;;;;;;;;:::i;:::-;;;;;;:22;;;;;29025:11;29012:7;29020:1;29012:10;;;;;;;;:::i;:::-;;;;;;;;;;:24;29051:7;;-1:-1:-1;;;;;29051:7:0;:17;29069:6;29077:1;29080:7;29051;29089:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29089:13:0;;29051:52;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28908:207;28779:343;;;:::o;28456:311::-;-1:-1:-1;;;;;28536:18:0;;;;;;:10;:18;;;;;;;;:28;;;;;;;;:35;;-1:-1:-1;;28536:35:0;28567:4;28536:35;;;28603:25;28547:6;28555:8;28603:7;:25::i;:::-;28582:46;;28656:9;28666:5;28656:16;;;;;;:::i;:::-;;;;;;;;;;;;;28639:7;28647:5;28639:14;;;;;;:::i;:::-;;;;;;;;;;;;;;:33;;;;-1:-1:-1;;;;;;28639:33:0;-1:-1:-1;;;;;28639:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;28690:9;;:16;;28700:5;;28690:16;:::i;:::-;;;;;;;;;;;;;;28683:23;;-1:-1:-1;;;;;;28683:23:0;;;28690:16;28683:23;;;;;;;;;;;28717:42;28742:6;28750:8;-1:-1:-1;;;;;29753:23:0;;29715:35;29753:23;;;:15;:23;;;;;29798:18;;29753:23;;29798:18;;29854:108;29875:3;29871:1;:7;29854:108;;;29927:4;29904:11;29916:1;29904:14;;;;;;;;:::i;:::-;;;;;;;;;;;:19;;;:27;29900:51;;29942:1;29934:9;;29944:5;;29900:51;29880:3;;29854:108;;;;29985:3;29976:5;:12;29972:27;;29991:7;;;29635:486;;:::o;29972:27::-;30023:5;30009:77;30034:7;30040:1;30034:3;:7;:::i;:::-;30030:1;:11;30009:77;;;30066:11;30078:5;:1;30082;30078:5;:::i;:::-;30066:18;;;;;;;;:::i;:::-;;;;;;;;;;;30049:11;30061:1;30049:14;;;;;;;;:::i;:::-;;;;;;;;;:35;;:14;;;;;:35;;;;;;;;;;;;30043:3;30009:77;;;;30096:11;:17;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;30096:17:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29635:486:0:o;196:226:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;369:23:1;;196:226;-1:-1:-1;196:226:1:o;660:131::-;-1:-1:-1;;;;;735:31:1;;725:42;;715:70;;781:1;778;771:12;796:247;855:6;908:2;896:9;887:7;883:23;879:32;876:52;;;924:1;921;914:12;876:52;963:9;950:23;982:31;1007:5;982:31;:::i;1240:346::-;1308:6;1316;1369:2;1357:9;1348:7;1344:23;1340:32;1337:52;;;1385:1;1382;1375:12;1337:52;-1:-1:-1;;1430:23:1;;;1550:2;1535:18;;;1522:32;;-1:-1:-1;1240:346:1:o;1591:815::-;1845:2;1857:21;;;1927:13;;1830:18;;;1949:22;;;1797:4;;2028:15;;;2002:2;1987:18;;;1797:4;2071:309;2085:6;2082:1;2079:13;2071:309;;;2150:6;2144:13;2188:2;2182:9;2177:3;2170:22;2240:2;2236;2232:11;2226:18;2221:2;2216:3;2212:12;2205:40;2293:2;2289;2285:11;2279:18;2274:2;2269:3;2265:12;2258:40;;2327:4;2322:3;2318:14;2311:21;;2367:2;2359:6;2355:15;2345:25;;2107:1;2104;2100:9;2095:14;;2071:309;;2411:367;2474:8;2484:6;2538:3;2531:4;2523:6;2519:17;2515:27;2505:55;;2556:1;2553;2546:12;2505:55;-1:-1:-1;2579:20:1;;-1:-1:-1;;;;;2611:30:1;;2608:50;;;2654:1;2651;2644:12;2608:50;2691:4;2683:6;2679:17;2667:29;;2751:3;2744:4;2734:6;2731:1;2727:14;2719:6;2715:27;2711:38;2708:47;2705:67;;;2768:1;2765;2758:12;2783:1477;2968:6;2976;2984;2992;3000;3008;3016;3024;3032;3085:3;3073:9;3064:7;3060:23;3056:33;3053:53;;;3102:1;3099;3092:12;3053:53;3147:23;;;-1:-1:-1;3246:2:1;3231:18;;3218:32;3259:33;3218:32;3259:33;:::i;:::-;3311:7;-1:-1:-1;3369:2:1;3354:18;;3341:32;-1:-1:-1;;;;;3385:30:1;;3382:50;;;3428:1;3425;3418:12;3382:50;3467:70;3529:7;3520:6;3509:9;3505:22;3467:70;:::i;:::-;3556:8;;-1:-1:-1;3441:96:1;-1:-1:-1;;3644:2:1;3629:18;;3616:32;-1:-1:-1;;;;;3660:32:1;;3657:52;;;3705:1;3702;3695:12;3657:52;3744:72;3808:7;3797:8;3786:9;3782:24;3744:72;:::i;:::-;3835:8;;-1:-1:-1;3718:98:1;-1:-1:-1;;3923:3:1;3908:19;;3895:33;-1:-1:-1;;;;;3940:32:1;;3937:52;;;3985:1;3982;3975:12;3937:52;4024:72;4088:7;4077:8;4066:9;4062:24;4024:72;:::i;:::-;2783:1477;;;;-1:-1:-1;2783:1477:1;;;;;;;;4115:8;4223:3;4208:19;4195:33;;2783:1477;-1:-1:-1;;;;2783:1477:1:o;4265:437::-;4351:6;4359;4412:2;4400:9;4391:7;4387:23;4383:32;4380:52;;;4428:1;4425;4418:12;4380:52;4468:9;4455:23;-1:-1:-1;;;;;4493:6:1;4490:30;4487:50;;;4533:1;4530;4523:12;4487:50;4572:70;4634:7;4625:6;4614:9;4610:22;4572:70;:::i;:::-;4661:8;;4546:96;;-1:-1:-1;4265:437:1;-1:-1:-1;;;;4265:437:1:o;4960:289::-;5002:3;5040:5;5034:12;5067:6;5062:3;5055:19;5123:6;5116:4;5109:5;5105:16;5098:4;5093:3;5089:14;5083:47;5175:1;5168:4;5159:6;5154:3;5150:16;5146:27;5139:38;5238:4;5231:2;5227:7;5222:2;5214:6;5210:15;5206:29;5201:3;5197:39;5193:50;5186:57;;;4960:289;;;;:::o;5254:1184::-;5466:4;5514:2;5503:9;5499:18;5544:2;5533:9;5526:21;5567:6;5602;5596:13;5633:6;5625;5618:22;5671:2;5660:9;5656:18;5649:25;;5733:2;5723:6;5720:1;5716:14;5705:9;5701:30;5697:39;5683:53;;5771:2;5763:6;5759:15;5792:1;5802:607;5816:6;5813:1;5810:13;5802:607;;;5881:22;;;-1:-1:-1;;5877:36:1;5865:49;;5937:13;;5982:9;;-1:-1:-1;;;;;5978:35:1;5963:51;;6061:2;6053:11;;;6047:18;6102:4;6085:15;;;6078:29;;;6047:18;6134:50;;6166:17;;6047:18;6134:50;:::i;:::-;6235:2;6227:11;;;6221:18;6204:15;;;6197:43;6293:4;6285:13;;;6279:20;6260:17;;;;6253:47;;;;-1:-1:-1;6364:2:1;6387:12;;;;6352:15;;;;;5838:1;5831:9;5802:607;;;-1:-1:-1;6426:6:1;;5254:1184;-1:-1:-1;;;;;;5254:1184:1:o;6443:367::-;6511:6;6519;6572:2;6560:9;6551:7;6547:23;6543:32;6540:52;;;6588:1;6585;6578:12;6540:52;6627:9;6614:23;6646:31;6671:5;6646:31;:::i;:::-;6696:5;6774:2;6759:18;;;;6746:32;;-1:-1:-1;;;6443:367:1:o;6815:127::-;6876:10;6871:3;6867:20;6864:1;6857:31;6907:4;6904:1;6897:15;6931:4;6928:1;6921:15;6947:253;7019:2;7013:9;7061:4;7049:17;;-1:-1:-1;;;;;7081:34:1;;7117:22;;;7078:62;7075:88;;;7143:18;;:::i;:::-;7179:2;7172:22;6947:253;:::o;7205:257::-;7277:4;7271:11;;;7309:17;;-1:-1:-1;;;;;7341:34:1;;7377:22;;;7338:62;7335:88;;;7403:18;;:::i;7467:275::-;7538:2;7532:9;7603:2;7584:13;;-1:-1:-1;;7580:27:1;7568:40;;-1:-1:-1;;;;;7623:34:1;;7659:22;;;7620:62;7617:88;;;7685:18;;:::i;:::-;7721:2;7714:22;7467:275;;-1:-1:-1;7467:275:1:o;7747:183::-;7807:4;-1:-1:-1;;;;;7832:6:1;7829:30;7826:56;;;7862:18;;:::i;:::-;-1:-1:-1;7907:1:1;7903:14;7919:4;7899:25;;7747:183::o;7935:1072::-;8028:6;8036;8089:2;8077:9;8068:7;8064:23;8060:32;8057:52;;;8105:1;8102;8095:12;8057:52;8145:9;8132:23;-1:-1:-1;;;;;8170:6:1;8167:30;8164:50;;;8210:1;8207;8200:12;8164:50;8233:22;;8286:4;8278:13;;8274:27;-1:-1:-1;8264:55:1;;8315:1;8312;8305:12;8264:55;8355:2;8342:16;8378:64;8394:47;8434:6;8394:47;:::i;:::-;8378:64;:::i;:::-;8464:3;8488:6;8483:3;8476:19;8520:4;8515:3;8511:14;8504:21;;8577:4;8567:6;8564:1;8560:14;8556:2;8552:23;8548:34;8534:48;;8605:7;8597:6;8594:19;8591:39;;;8626:1;8623;8616:12;8591:39;8658:4;8654:2;8650:13;8639:24;;8672:200;8688:6;8683:3;8680:15;8672:200;;;8780:17;;8810:18;;8857:4;8705:14;;;;8848;;;;8672:200;;;8891:5;8969:4;8954:20;;;;8941:34;;-1:-1:-1;;;;;;7935:1072:1:o;9012:420::-;9065:3;9103:5;9097:12;9130:6;9125:3;9118:19;9162:4;9157:3;9153:14;9146:21;;9201:4;9194:5;9190:16;9224:1;9234:173;9248:6;9245:1;9242:13;9234:173;;;9309:13;;9297:26;;9352:4;9343:14;;;;9380:17;;;;9270:1;9263:9;9234:173;;;-1:-1:-1;9423:3:1;;9012:420;-1:-1:-1;;;;9012:420:1:o;9437:261::-;9616:2;9605:9;9598:21;9579:4;9636:56;9688:2;9677:9;9673:18;9665:6;9636:56;:::i;9703:163::-;9770:20;;9830:10;9819:22;;9809:33;;9799:61;;9856:1;9853;9846:12;9799:61;9703:163;;;:::o;9871:319::-;9938:6;9946;9999:2;9987:9;9978:7;9974:23;9970:32;9967:52;;;10015:1;10012;10005:12;9967:52;10054:9;10041:23;10073:31;10098:5;10073:31;:::i;:::-;10123:5;-1:-1:-1;10147:37:1;10180:2;10165:18;;10147:37;:::i;:::-;10137:47;;9871:319;;;;;:::o;10796:1099::-;10954:6;10962;10970;10978;10986;10994;11047:2;11035:9;11026:7;11022:23;11018:32;11015:52;;;11063:1;11060;11053:12;11015:52;11103:9;11090:23;-1:-1:-1;;;;;11128:6:1;11125:30;11122:50;;;11168:1;11165;11158:12;11122:50;11207:70;11269:7;11260:6;11249:9;11245:22;11207:70;:::i;:::-;11296:8;;-1:-1:-1;11181:96:1;-1:-1:-1;;11384:2:1;11369:18;;11356:32;-1:-1:-1;;;;;11400:32:1;;11397:52;;;11445:1;11442;11435:12;11397:52;11484:72;11548:7;11537:8;11526:9;11522:24;11484:72;:::i;:::-;11575:8;;-1:-1:-1;11458:98:1;-1:-1:-1;;11663:2:1;11648:18;;11635:32;-1:-1:-1;;;;;11679:32:1;;11676:52;;;11724:1;11721;11714:12;11676:52;11763:72;11827:7;11816:8;11805:9;11801:24;11763:72;:::i;:::-;10796:1099;;;;-1:-1:-1;10796:1099:1;;-1:-1:-1;10796:1099:1;;11854:8;;10796:1099;-1:-1:-1;;;10796:1099:1:o;11900:367::-;11968:6;11976;12029:2;12017:9;12008:7;12004:23;12000:32;11997:52;;;12045:1;12042;12035:12;11997:52;12090:23;;;-1:-1:-1;12189:2:1;12174:18;;12161:32;12202:33;12161:32;12202:33;:::i;:::-;12254:7;12244:17;;;11900:367;;;;;:::o;12494:944::-;12681:2;12670:9;12663:21;12726:6;12720:13;12715:2;12704:9;12700:18;12693:41;12788:2;12780:6;12776:15;12770:22;12765:2;12754:9;12750:18;12743:50;12644:4;12840:2;12832:6;12828:15;12822:22;12880:4;12875:2;12864:9;12860:18;12853:32;12908:63;12966:3;12955:9;12951:19;12937:12;12908:63;:::i;:::-;12894:77;;13026:2;13018:6;13014:15;13008:22;13002:3;12991:9;12987:19;12980:51;13080:3;13072:6;13068:16;13062:23;13154:2;13150:7;13138:9;13130:6;13126:22;13122:36;13116:3;13105:9;13101:19;13094:65;13182:52;13227:6;13211:14;13182:52;:::i;:::-;13168:66;;;13283:3;13275:6;13271:16;13265:23;13358:2;13354:7;13342:9;13334:6;13330:22;13326:36;13319:4;13308:9;13304:20;13297:66;13380:52;13425:6;13409:14;13380:52;:::i;:::-;13372:60;12494:944;-1:-1:-1;;;;;12494:944:1:o;13443:186::-;13491:4;-1:-1:-1;;;;;13516:6:1;13513:30;13510:56;;;13546:18;;:::i;:::-;-1:-1:-1;13612:2:1;13591:15;-1:-1:-1;;13587:29:1;13618:4;13583:40;;13443:186::o;13634:695::-;13702:6;13755:2;13743:9;13734:7;13730:23;13726:32;13723:52;;;13771:1;13768;13761:12;13723:52;13811:9;13798:23;-1:-1:-1;;;;;13836:6:1;13833:30;13830:50;;;13876:1;13873;13866:12;13830:50;13899:22;;13952:4;13944:13;;13940:27;-1:-1:-1;13930:55:1;;13981:1;13978;13971:12;13930:55;14021:2;14008:16;14046:52;14062:35;14090:6;14062:35;:::i;14046:52::-;14121:6;14114:5;14107:21;14169:7;14164:2;14155:6;14151:2;14147:15;14143:24;14140:37;14137:57;;;14190:1;14187;14180:12;14137:57;14245:6;14240:2;14236;14232:11;14227:2;14220:5;14216:14;14203:49;14297:1;14272:18;;;14292:2;14268:27;14261:38;;;;14276:5;13634:695;-1:-1:-1;;;;13634:695:1:o;14746:218::-;14893:2;14882:9;14875:21;14856:4;14913:45;14954:2;14943:9;14939:18;14931:6;14913:45;:::i;14969:118::-;15055:5;15048:13;15041:21;15034:5;15031:32;15021:60;;15077:1;15074;15067:12;15092:241;15148:6;15201:2;15189:9;15180:7;15176:23;15172:32;15169:52;;;15217:1;15214;15207:12;15169:52;15256:9;15243:23;15275:28;15297:5;15275:28;:::i;15338:1356::-;15514:6;15522;15530;15538;15546;15554;15562;15570;15623:3;15611:9;15602:7;15598:23;15594:33;15591:53;;;15640:1;15637;15630:12;15591:53;15679:9;15666:23;15698:31;15723:5;15698:31;:::i;:::-;15748:5;-1:-1:-1;15826:2:1;15811:18;;15798:32;;-1:-1:-1;15907:2:1;15892:18;;15879:32;-1:-1:-1;;;;;15923:30:1;;15920:50;;;15966:1;15963;15956:12;15920:50;16005:70;16067:7;16058:6;16047:9;16043:22;16005:70;:::i;:::-;16094:8;;-1:-1:-1;15979:96:1;-1:-1:-1;;16182:2:1;16167:18;;16154:32;-1:-1:-1;;;;;16198:32:1;;16195:52;;;16243:1;16240;16233:12;16195:52;16282:72;16346:7;16335:8;16324:9;16320:24;16282:72;:::i;:::-;16373:8;;-1:-1:-1;16256:98:1;-1:-1:-1;;16461:3:1;16446:19;;16433:33;-1:-1:-1;;;;;16478:32:1;;16475:52;;;16523:1;16520;16513:12;16475:52;16562:72;16626:7;16615:8;16604:9;16600:24;16562:72;:::i;:::-;15338:1356;;;;-1:-1:-1;15338:1356:1;;-1:-1:-1;15338:1356:1;;;;;;16653:8;-1:-1:-1;;;15338:1356:1:o;16699:637::-;16889:2;16901:21;;;16971:13;;16874:18;;;16993:22;;;16841:4;;17072:15;;;17046:2;17031:18;;;16841:4;17115:195;17129:6;17126:1;17123:13;17115:195;;;17194:13;;-1:-1:-1;;;;;17190:39:1;17178:52;;17259:2;17285:15;;;;17250:12;;;;17226:1;17144:9;17115:195;;17341:756;17591:2;17603:21;;;17673:13;;17576:18;;;17695:22;;;17543:4;;17774:15;;;17748:2;17733:18;;;17543:4;17817:254;17831:6;17828:1;17825:13;17817:254;;;17890:13;;17928:9;;17916:22;;17986:2;17978:11;;;17972:18;17958:12;;;17951:40;18046:15;;;;18020:2;18011:12;;;;17853:1;17846:9;17817:254;;18330:388;18398:6;18406;18459:2;18447:9;18438:7;18434:23;18430:32;18427:52;;;18475:1;18472;18465:12;18427:52;18514:9;18501:23;18533:31;18558:5;18533:31;:::i;:::-;18583:5;-1:-1:-1;18640:2:1;18625:18;;18612:32;18653:33;18612:32;18653:33;:::i;18723:298::-;18790:6;18798;18851:2;18839:9;18830:7;18826:23;18822:32;18819:52;;;18867:1;18864;18857:12;18819:52;18890:28;18908:9;18890:28;:::i;19376:882::-;19507:6;19515;19523;19531;19539;19592:2;19580:9;19571:7;19567:23;19563:32;19560:52;;;19608:1;19605;19598:12;19560:52;19653:23;;;-1:-1:-1;19751:2:1;19736:18;;19723:32;-1:-1:-1;;;;;19767:30:1;;19764:50;;;19810:1;19807;19800:12;19764:50;19849:70;19911:7;19902:6;19891:9;19887:22;19849:70;:::i;:::-;19938:8;;-1:-1:-1;19823:96:1;-1:-1:-1;;20026:2:1;20011:18;;19998:32;-1:-1:-1;;;;;20042:32:1;;20039:52;;;20087:1;20084;20077:12;20039:52;20126:72;20190:7;20179:8;20168:9;20164:24;20126:72;:::i;:::-;19376:882;;;;-1:-1:-1;19376:882:1;;-1:-1:-1;20217:8:1;;20100:98;19376:882;-1:-1:-1;;;19376:882:1:o;22230:508::-;22307:6;22315;22323;22376:2;22364:9;22355:7;22351:23;22347:32;22344:52;;;22392:1;22389;22382:12;22344:52;22431:9;22418:23;22450:31;22475:5;22450:31;:::i;:::-;22500:5;-1:-1:-1;22557:2:1;22542:18;;22529:32;22570:33;22529:32;22570:33;:::i;:::-;22230:508;;22622:7;;-1:-1:-1;;;22702:2:1;22687:18;;;;22674:32;;22230:508::o;23870:127::-;23931:10;23926:3;23922:20;23919:1;23912:31;23962:4;23959:1;23952:15;23986:4;23983:1;23976:15;24002:128;24069:9;;;24090:11;;;24087:37;;;24104:18;;:::i;24135:127::-;24196:10;24191:3;24187:20;24184:1;24177:31;24227:4;24224:1;24217:15;24251:4;24248:1;24241:15;25661:343;25740:6;25748;25801:2;25789:9;25780:7;25776:23;25772:32;25769:52;;;25817:1;25814;25807:12;25769:52;-1:-1:-1;;25862:16:1;;25968:2;25953:18;;;25947:25;25862:16;;25947:25;;-1:-1:-1;25661:343:1:o;26009:301::-;26138:3;26176:6;26170:13;26222:6;26215:4;26207:6;26203:17;26198:3;26192:37;26284:1;26248:16;;26273:13;;;-1:-1:-1;26248:16:1;26009:301;-1:-1:-1;26009:301:1:o;26666:315::-;26758:19;;;26740:3;-1:-1:-1;;;;;26789:31:1;;26786:51;;;26833:1;26830;26823:12;26786:51;26869:6;26866:1;26862:14;26921:8;26914:5;26907:4;26902:3;26898:14;26885:45;26950:18;;;;26970:4;26946:29;;26666:315;-1:-1:-1;;;26666:315:1:o;26986:902::-;27426:1;27422;27417:3;27413:11;27409:19;27401:6;27397:32;27386:9;27379:51;27466:6;27461:2;27450:9;27446:18;27439:34;27509:3;27504:2;27493:9;27489:18;27482:31;27360:4;27536:57;27588:3;27577:9;27573:19;27565:6;27536:57;:::i;:::-;27641:9;27633:6;27629:22;27624:2;27613:9;27609:18;27602:50;27675:65;27733:6;27725;27717;27675:65;:::i;:::-;27661:79;;27789:9;27781:6;27777:22;27771:3;27760:9;27756:19;27749:51;27817:65;27875:6;27867;27859;27817:65;:::i;:::-;27809:73;26986:902;-1:-1:-1;;;;;;;;;;26986:902:1:o;27893:230::-;27963:6;28016:2;28004:9;27995:7;27991:23;27987:32;27984:52;;;28032:1;28029;28022:12;27984:52;-1:-1:-1;28077:16:1;;27893:230;-1:-1:-1;27893:230:1:o;28837:292::-;29026:2;29015:9;29008:21;28989:4;29046:77;29119:2;29108:9;29104:18;29096:6;29088;29046:77;:::i;29134:484::-;29188:5;29241:3;29234:4;29226:6;29222:17;29218:27;29208:55;;29259:1;29256;29249:12;29208:55;29292:6;29286:13;29323:52;29339:35;29367:6;29339:35;:::i;29323:52::-;29400:6;29391:7;29384:23;29454:3;29447:4;29438:6;29430;29426:19;29422:30;29419:39;29416:59;;;29471:1;29468;29461:12;29416:59;29529:6;29522:4;29514:6;29510:17;29503:4;29494:7;29490:18;29484:52;29585:1;29556:20;;;29578:4;29552:31;29545:42;;;;29560:7;29134:484;-1:-1:-1;;;29134:484:1:o;29623:1754::-;29753:6;29806:2;29794:9;29785:7;29781:23;29777:32;29774:52;;;29822:1;29819;29812:12;29774:52;29855:9;29849:16;-1:-1:-1;;;;;29880:6:1;29877:30;29874:50;;;29920:1;29917;29910:12;29874:50;29943:22;;29996:4;29988:13;;29984:27;-1:-1:-1;29974:55:1;;30025:1;30022;30015:12;29974:55;30058:2;30052:9;30081:64;30097:47;30137:6;30097:47;:::i;30081:64::-;30167:3;30191:6;30186:3;30179:19;30223:2;30218:3;30214:12;30207:19;;30278:2;30268:6;30265:1;30261:14;30257:2;30253:23;30249:32;30235:46;;30304:7;30296:6;30293:19;30290:39;;;30325:1;30322;30315:12;30290:39;30357:2;30353;30349:11;30369:978;30385:6;30380:3;30377:15;30369:978;;;30464:3;30458:10;-1:-1:-1;;;;;30487:11:1;30484:35;30481:55;;;30532:1;30529;30522:12;30481:55;30559:20;;30631:4;30603:16;;;-1:-1:-1;;30599:30:1;30595:41;30592:61;;;30649:1;30646;30639:12;30592:61;30679:22;;:::i;:::-;30743:2;30739;30735:11;30729:18;30760:33;30785:7;30760:33;:::i;:::-;30806:22;;30871:2;30863:11;;30857:18;-1:-1:-1;;;;;30891:32:1;;30888:52;;;30936:1;30933;30926:12;30888:52;30976:65;31033:7;31028:2;31017:8;31013:2;31009:17;31005:26;30976:65;:::i;:::-;30971:2;30960:14;;;30953:89;;;;31109:2;31101:11;;;31095:18;31144:2;31133:14;;31126:31;31224:4;31216:13;;;31210:20;31250:14;;;31243:31;;;;-1:-1:-1;31287:18:1;;31325:12;;;;30402;30369:978;;31382:135;31421:3;31442:17;;;31439:43;;31462:18;;:::i;:::-;-1:-1:-1;31509:1:1;31498:13;;31382:135::o;31816:789::-;31912:6;31972:2;31960:9;31951:7;31947:23;31943:32;31987:2;31984:22;;;32002:1;31999;31992:12;31984:22;-1:-1:-1;32071:2:1;32065:9;32113:2;32101:15;;-1:-1:-1;;;;;32131:34:1;;32167:22;;;32128:62;32125:88;;;32193:18;;:::i;:::-;32229:2;32222:22;32266:16;;32291:31;32266:16;32291:31;:::i;:::-;32331:21;;32418:2;32403:18;;;32397:25;32438:15;;;32431:32;32529:2;32514:18;;;32508:25;32549:15;;;32542:32;;;;-1:-1:-1;32338:6:1;31816:789;-1:-1:-1;31816:789:1:o;32610:762::-;32975:2;32964:9;32957:21;32938:4;33001:77;33074:2;33063:9;33059:18;33051:6;33043;33001:77;:::i;:::-;33126:9;33118:6;33114:22;33109:2;33098:9;33094:18;33087:50;33160:65;33218:6;33210;33202;33160:65;:::i;:::-;33146:79;;33273:9;33265:6;33261:22;33256:2;33245:9;33241:18;33234:50;33301:65;33359:6;33351;33343;33301:65;:::i;33377:217::-;33417:1;33443;33433:132;;33487:10;33482:3;33478:20;33475:1;33468:31;33522:4;33519:1;33512:15;33550:4;33547:1;33540:15;33433:132;-1:-1:-1;33579:9:1;;33377:217::o;33949:273::-;34017:6;34070:2;34058:9;34049:7;34045:23;34041:32;34038:52;;;34086:1;34083;34076:12;34038:52;34118:9;34112:16;34168:4;34161:5;34157:16;34150:5;34147:27;34137:55;;34188:1;34185;34178:12;34227:168;34300:9;;;34331;;34348:15;;;34342:22;;34328:37;34318:71;;34369:18;;:::i;34400:375::-;34488:1;34506:5;34520:249;34541:1;34531:8;34528:15;34520:249;;;34591:4;34586:3;34582:14;34576:4;34573:24;34570:50;;;34600:18;;:::i;:::-;34650:1;34640:8;34636:16;34633:49;;;34664:16;;;;34633:49;34747:1;34743:16;;;;;34703:15;;34520:249;;;34400:375;;;;;;:::o;34780:902::-;34829:5;34859:8;34849:80;;-1:-1:-1;34900:1:1;34914:5;;34849:80;34948:4;34938:76;;-1:-1:-1;34985:1:1;34999:5;;34938:76;35030:4;35048:1;35043:59;;;;35116:1;35111:174;;;;35023:262;;35043:59;35073:1;35064:10;;35087:5;;;35111:174;35148:3;35138:8;35135:17;35132:43;;;35155:18;;:::i;:::-;-1:-1:-1;;35211:1:1;35197:16;;35270:5;;35023:262;;35369:2;35359:8;35356:16;35350:3;35344:4;35341:13;35337:36;35331:2;35321:8;35318:16;35313:2;35307:4;35304:12;35300:35;35297:77;35294:203;;;-1:-1:-1;35406:19:1;;;35482:5;;35294:203;35529:42;-1:-1:-1;;35554:8:1;35548:4;35529:42;:::i;:::-;35607:6;35603:1;35599:6;35595:19;35586:7;35583:32;35580:58;;;35618:18;;:::i;:::-;35656:20;;34780:902;-1:-1:-1;;;34780:902:1:o;35687:131::-;35747:5;35776:36;35803:8;35797:4;35776:36;:::i;35823:720::-;35888:5;35941:3;35934:4;35926:6;35922:17;35918:27;35908:55;;35959:1;35956;35949:12;35908:55;35992:6;35986:13;36019:64;36035:47;36075:6;36035:47;:::i;36019:64::-;36107:3;36131:6;36126:3;36119:19;36163:4;36158:3;36154:14;36147:21;;36224:4;36214:6;36211:1;36207:14;36199:6;36195:27;36191:38;36177:52;;36252:3;36244:6;36241:15;36238:35;;;36269:1;36266;36259:12;36238:35;36305:4;36297:6;36293:17;36319:193;36335:6;36330:3;36327:15;36319:193;;;36427:10;;36450:18;;36497:4;36488:14;;;;36352;36319:193;;;-1:-1:-1;36530:7:1;35823:720;-1:-1:-1;;;;;35823:720:1:o;36548:727::-;36644:6;36697:2;36685:9;36676:7;36672:23;36668:32;36665:52;;;36713:1;36710;36703:12;36665:52;36746:9;36740:16;-1:-1:-1;;;;;36771:6:1;36768:30;36765:50;;;36811:1;36808;36801:12;36765:50;36834:22;;36890:4;36872:16;;;36868:27;36865:47;;;36908:1;36905;36898:12;36865:47;36934:22;;:::i;:::-;37001:9;;37019:22;;37080:2;37072:11;;37066:18;-1:-1:-1;;;;;37096:32:1;;37093:52;;;37141:1;37138;37131:12;37093:52;37177:67;37236:7;37225:8;37221:2;37217:17;37177:67;:::i;:::-;37172:2;37161:14;;37154:91;-1:-1:-1;37165:5:1;36548:727;-1:-1:-1;;;;36548:727:1:o;37280:363::-;37375:6;37428:2;37416:9;37407:7;37403:23;37399:32;37396:52;;;37444:1;37441;37434:12;37396:52;37477:9;37471:16;-1:-1:-1;;;;;37502:6:1;37499:30;37496:50;;;37542:1;37539;37532:12;37496:50;37565:72;37629:7;37620:6;37609:9;37605:22;37565:72;:::i;37648:237::-;37720:9;;;37687:7;37745:9;;-1:-1:-1;;;37756:18:1;;37741:34;37738:60;;;37778:18;;:::i;:::-;37851:1;37842:7;37837:16;37834:1;37831:23;37827:1;37820:9;37817:38;37807:72;;37859:18;;:::i;37890:216::-;37954:9;;;37982:11;;;37929:3;38012:9;;38040:10;;38036:19;;38065:10;;38057:19;;38033:44;38030:70;;;38080:18;;:::i;:::-;38030:70;;37890:216;;;;:::o;38749:245::-;38816:6;38869:2;38857:9;38848:7;38844:23;38840:32;38837:52;;;38885:1;38882;38875:12;38837:52;38917:9;38911:16;38936:28;38958:5;38936:28;:::i;39937:933::-;40387:1;40383;40378:3;40374:11;40370:19;40362:6;40358:32;40347:9;40340:51;40427:6;40422:2;40411:9;40407:18;40400:34;40470:3;40465:2;40454:9;40450:18;40443:31;40321:4;40497:78;40570:3;40559:9;40555:19;40547:6;40539;40497:78;:::i;:::-;40623:9;40615:6;40611:22;40606:2;40595:9;40591:18;40584:50;40657:65;40715:6;40707;40699;40657:65;:::i;:::-;40643:79;;40771:9;40763:6;40759:22;40753:3;40742:9;40738:19;40731:51;40799:65;40857:6;40849;40841;40799:65;:::i;:::-;40791:73;39937:933;-1:-1:-1;;;;;;;;;;;39937:933:1:o;41226:1156::-;41367:6;41375;41383;41391;41399;41407;41415;41468:3;41456:9;41447:7;41443:23;41439:33;41436:53;;;41485:1;41482;41475:12;41436:53;41517:9;41511:16;41536:31;41561:5;41536:31;:::i;:::-;41635:2;41620:18;;41614:25;41586:5;;-1:-1:-1;;;;;;41651:30:1;;41648:50;;;41694:1;41691;41684:12;41648:50;41717:61;41770:7;41761:6;41750:9;41746:22;41717:61;:::i;:::-;41707:71;;;41824:2;41813:9;41809:18;41803:25;-1:-1:-1;;;;;41843:8:1;41840:32;41837:52;;;41885:1;41882;41875:12;41837:52;41908:63;41963:7;41952:8;41941:9;41937:24;41908:63;:::i;:::-;42037:2;42022:18;;42016:25;42133:3;42118:19;;42112:26;42230:3;42215:19;;42209:26;42306:3;42291:19;;42285:26;41898:73;;-1:-1:-1;42016:25:1;;-1:-1:-1;42112:26:1;-1:-1:-1;42209:26:1;-1:-1:-1;42285:26:1;-1:-1:-1;42320:30:1;42285:26;42320:30;:::i;:::-;42369:7;42359:17;;;41226:1156;;;;;;;;;;:::o;42387:1226::-;42512:6;42565:2;42553:9;42544:7;42540:23;42536:32;42533:52;;;42581:1;42578;42571:12;42533:52;42614:9;42608:16;-1:-1:-1;;;;;42639:6:1;42636:30;42633:50;;;42679:1;42676;42669:12;42633:50;42702:22;;42755:4;42747:13;;42743:27;-1:-1:-1;42733:55:1;;42784:1;42781;42774:12;42733:55;42817:2;42811:9;42840:64;42856:47;42896:6;42856:47;:::i;42840:64::-;42926:3;42950:6;42945:3;42938:19;42982:2;42977:3;42973:12;42966:19;;43037:2;43027:6;43024:1;43020:14;43016:2;43012:23;43008:32;42994:46;;43063:7;43055:6;43052:19;43049:39;;;43084:1;43081;43074:12;43049:39;43116:2;43112;43108:11;43097:22;;43128:455;43144:6;43139:3;43136:15;43128:455;;;43226:4;43220:3;43211:7;43207:17;43203:28;43200:48;;;43244:1;43241;43234:12;43200:48;43274:22;;:::i;:::-;43349:10;;43372:22;;43462:2;43453:12;;;43447:19;43486:14;;;43479:31;43523:18;;;43170:4;43161:14;;;;43561:12;;;;;43128:455;;;43602:5;42387:1226;-1:-1:-1;;;;;;42387:1226:1:o;43618:125::-;43683:9;;;43704:10;;;43701:36;;;43717:18;;:::i;45445:200::-;45511:9;;;45484:4;45539:9;;45567:10;;45579:12;;;45563:29;45602:12;;;45594:21;;45560:56;45557:82;;;45619:18;;:::i;45650:136::-;45685:3;-1:-1:-1;;;45706:22:1;;45703:48;;45731:18;;:::i;:::-;-1:-1:-1;45771:1:1;45767:13;;45650:136::o;45791:261::-;45861:3;-1:-1:-1;;;;;45882:31:1;;45879:51;;;45926:1;45923;45916:12;45879:51;45962:6;45959:1;45955:14;46003:8;45996:5;45991:3;45978:34;46028:18;;;;;45791:261;-1:-1:-1;;;45791:261:1:o;46057:468::-;46374:6;46369:3;46362:19;46344:3;46397:122;46451:67;46514:2;46509:3;46505:12;46497:6;46489;46451:67;:::i;:::-;46443:6;46435;46397:122;:::i;46530:866::-;-1:-1:-1;;;;;46834:32:1;;46816:51;;46804:2;46898;46883:18;;;46876:30;;;46955:13;;46789:18;;;46977:22;;;46756:4;;47056:15;;;;47030:2;47015:18;;;46756:4;47099:271;47113:6;47110:1;47107:13;47099:271;;;47172:13;;47214:9;;47225:10;47210:26;47198:39;;47285:2;47277:11;;;47271:18;47257:12;;;47250:40;47345:15;;;;47319:2;47310:12;;;;47135:1;47128:9;47099:271;;;-1:-1:-1;47387:3:1;;46530:866;-1:-1:-1;;;;;;46530:866:1:o;49227:643::-;49577:1;49573;49568:3;49564:11;49560:19;49552:6;49548:32;49537:9;49530:51;49617:6;49612:2;49601:9;49597:18;49590:34;49660:3;49655:2;49644:9;49640:18;49633:31;49511:4;49687:57;49739:3;49728:9;49724:19;49716:6;49687:57;:::i;:::-;49792:9;49784:6;49780:22;49775:2;49764:9;49760:18;49753:50;49820:44;49857:6;49849;49820:44;:::i;50523:127::-;50584:10;50579:3;50575:20;50572:1;50565:31;50615:4;50612:1;50605:15;50639:4;50636:1;50629:15

Swarm Source

ipfs://412a6aad9b489fc3059470ff469d67fb7371573b44eaadaea22b2f37c70402a0

Block Transaction Gas Used Reward
view all blocks ##produced##

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

Validator Index Block Amount
View All Withdrawals

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

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