Contract 0x1aeabbed6820adfdc34af06b5331d1ccc6a744d4

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xdf023ccc4b78023c8f3b474254db7fb7da4df1d1907fb2a2761343c6370e2457Claim Many From ...289245662022-01-24 16:00:234 mins ago0xcfd53f870f2f95e3f090ae4e85592cd9251027f6 IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.291897194969
0x103ba25192e43e9376d06113d2ff0e45a06b318e72638a2626d0afe271d959d5Claim Many From ...289243402022-01-24 15:57:207 mins ago0x1680c3d528f4814bb3997b8ad4a2f361bd7020e7 IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.050749303436
0xd47178314756e61d12030e92f1603aa4937e960789d431f53fe9536119081a5eClaim Many From ...289235872022-01-24 15:47:0917 mins ago0x734468ce304709721b24cb61d1e9826a1adc0a55 IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.988249165092
0xf1d315065be32d3918368d7c56d983ab30d220eb320b078ed9e04ad0b34897aeAdd Many To Stat...289234512022-01-24 15:45:0819 mins ago0x97c2d399a5afc6c01219a8afcd57421394b4cbe4 IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.164556465542
0xce48b209ab45138e85cba60f51893cd9a3817dc1883bfc52c1aa6a88a6404286Claim Many From ...289233092022-01-24 15:42:3322 mins ago0x58ee83b38c71fe36f644469f04d0762226883dfa IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.258248338403
0x05730065f75b5c42a0f1143b1c59558069c7b962fde94c86c8dbdab1a57b98bfClaim Many From ...289231242022-01-24 15:39:3525 mins ago0xa40489748b2956eb0f78498b7ae1f837f9f7d9ab IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.750103672444
0x30c8edee2ffdfa755fccaeecd57cfdd03f4ebc5c8c253ad267191d906c51ce57Claim Many From ...289229952022-01-24 15:37:2227 mins ago0x79939118ef2af99e20310ecc5ccc0e9697d390fc IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.775254703526
0x14e7fb338caab9af263d2ca5cca0141369185c8ff4fbfd59534166e53c1f7ef8Add Many To Stat...289227332022-01-24 15:33:1431 mins ago0x97c2d399a5afc6c01219a8afcd57421394b4cbe4 IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.037167030313
0xf06552feb3c7171100b9b5443ee59ccdfb6c33d94ee000e14f23605e28971d0eAdd Many To Stat...289226392022-01-24 15:31:5932 mins ago0x97c2d399a5afc6c01219a8afcd57421394b4cbe4 IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.282557357196
0x291c745eb4dcea065873db938274b54422399adbc6fb332e74327ea0dab13afdAdd Many To Stat...289224172022-01-24 15:29:0035 mins ago0x9602d5a43df76ec10f82f0346027ba29ef40cbaa IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.160925755052
0x2f7229d746d51ec88883b409f5909925b127b6ab63cd57d0a71157dca3559967Add Many To Stat...289224142022-01-24 15:28:5735 mins ago0x9602d5a43df76ec10f82f0346027ba29ef40cbaa IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.728818123123
0x90dbb4b3f3473839bfcdac36f08e3f49ef0b7203ca32041df6cd155f527dcdd2Claim Many From ...289219692022-01-24 15:22:4642 mins ago0x8071093865326c8719460cea6e2f085ccda8eb0d IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.405134301459
0x50c5b094da95884697f00da2e4d18f48937ade31e4cba10b14a591ffa7464d56Claim Many From ...289217552022-01-24 15:19:5044 mins ago0x70ffe94517586b28827e7d1aa825baad13521b37 IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.343307058784
0x688e78555bf7b81fa310ea7a115adfc7765a6bbaee898c0db6f7a31be2a09effClaim Many From ...289215412022-01-24 15:16:1948 mins ago0x6b447dcb85266db2904068d9bd358ae2eb94f399 IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.397179380275
0xaa82c6cf1e6eade92c2dc29f7ffa4ba0bfd2558bc4ec7d0d4ea405de12253e49Claim Many From ...289212662022-01-24 15:12:1152 mins ago0x947f1366b27e80e283d6e51f0542094c122f725e IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.647813854288
0x46ca598b2b022e74cec72239aa22263548c16f6c7739e0a933763625efe3fe85Claim Many From ...289211512022-01-24 15:09:4854 mins ago0x57930e907fe4e42ee6d3eff7254d7663630da589 IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM1.116626000401
0x8210e765384fbdd1897a775c94e746329c2eeadd3e9d5f1bf2e25df8e5ee1337Claim Many From ...289211372022-01-24 15:09:3055 mins ago0x947f1366b27e80e283d6e51f0542094c122f725e IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.637583305528
0xee976c268e40ea780bfa7f28e9b31320b61984f8e07442e8ca7f8a0ff08ccd42Claim Many From ...289210732022-01-24 15:07:5356 mins ago0x57930e907fe4e42ee6d3eff7254d7663630da589 IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM1.084083415641
0x893d6113193dc89b71776b48ec063a210523ebc92d081677e5ff8c4534ff4e17Claim Many From ...289203982022-01-24 14:54:411 hr 10 mins ago0x9602d5a43df76ec10f82f0346027ba29ef40cbaa IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.058741303398
0x41fb95b8aac0f4e9cf5dcc1c46b76949c67a624ebfee8ea8716b412098e67edfClaim Many From ...289203192022-01-24 14:53:201 hr 11 mins ago0x9602d5a43df76ec10f82f0346027ba29ef40cbaa IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.74469290112
0xc10b2d87812e7adc996f5bb162e2eee65c333940bddec9eb6dc628bf6ff323d3Claim Many From ...289203082022-01-24 14:53:111 hr 11 mins ago0x972f003bd73beeed832927afbe5befd01c1b9852 IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.247224909932
0xed3b34547703bc0b00e406bdb523c0dd05c438f336e9c2a459f2696b63a08f9fClaim Many From ...289202502022-01-24 14:52:191 hr 12 mins ago0x9602d5a43df76ec10f82f0346027ba29ef40cbaa IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.171837092297
0x64cd82bb3dbf60a411168d885a29478f7bf9e1ca0ddee8db03becb2d6b357621Claim Many From ...289202442022-01-24 14:52:141 hr 12 mins ago0x972f003bd73beeed832927afbe5befd01c1b9852 IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.236287881561
0xd8fb5fdad10034cc7ca64c5929894473580b5e5f79ccf03024b9ff38177ee55fClaim Many From ...289201752022-01-24 14:50:571 hr 13 mins ago0x9602d5a43df76ec10f82f0346027ba29ef40cbaa IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.664638314371
0xdec48d8b7b8f03a3b74fa3f4bad5226a3560629b49c8247536cc61aa77f94e0aClaim Many From ...289200292022-01-24 14:48:371 hr 16 mins ago0xd970d45d277e6444ab5537b4f5b5609670edf71f IN  0x1aeabbed6820adfdc34af06b5331d1ccc6a744d40 FTM0.616532073696
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xd1e487ea71f86d7c9317497b54bce65acc783832bc37cb265be805b9b4249256252913932021-12-18 4:26:0337 days 11 hrs ago ProjectMars: Deployer  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SupplyStation

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2021-12-18
*/

/**
 *Submitted for verification at FtmScan.com on 2021-12-10
*/

// SPDX-License-Identifier: MIT LICENSE

// Interface
////////////

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

interface IMarsWasteland {

    // struct to store each token's traits
    struct RobotSlime {
        bool isRobot;
        uint8 head;
        uint8 eyes;
        uint8 mouth;
        uint8 body;
        uint8 equipment;
        uint8 alphaIndex;
    }

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
 
    function transferFrom( address from, address to, uint256 tokenId) external;

    function getTokenTraits(uint256 tokenId) external view returns (RobotSlime memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

interface ICore {

    function mint(address to, uint256 amount) external;

}

// Abstract contract
////////////////////
pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with 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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.0;

/**
 * @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 {
    /**
     * @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);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

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

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

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

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




pragma solidity ^0.8.0;

contract SupplyStation is Ownable, IERC721Receiver, Pausable {
    
    // maximum alpha score for a Slime
    uint8 public constant MAX_ALPHA = 8;

    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
    
    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    mapping(address => uint256) private _balances;

    // struct to store a stake's token, owner, and earning values
    struct Stake {
        address owner;
        uint32 tokenId;
        uint256 value;
    }

    event TokenStaked(address owner, uint256 tokenId, uint256 value);
    event RobotClaimed(uint256 tokenId, uint256 earned, bool unstaked);
    event SlimeClaimed(uint256 tokenId, uint256 earned, bool unstaked);

    // reference to the MarsWasteland NFT contract
    IMarsWasteland public marsWasteland;

    // reference to CORE;
    ICore public core;


    // maps tokenId to stake
    mapping(uint256 => Stake) public supplyStation;
    // maps alpha to all Slimes stakes with that alpha
    mapping(uint256 => Stake[]) public pack;
    // tracks location of each Slime in Pack
    mapping(uint256 => uint256) public packIndices;
    // total alpha scores staked
    uint256 public totalAlphaStaked = 0;
    // any rewards distributed when no Slimes are staked
     uint256 public unaccountedRewards = 0;
    // amount of $CORE due for each alpha point staked
    uint256 public corePerAlpha = 0;

    // robot earn 10000 $CORE per day
    uint256 public constant DAILY_CORE_RATE = 4000 ether;
    // robot must have 2 days worth of $CORE to unstake
    uint256 public constant MINIMUM_TO_EXIT = 2 days;
    // slimes take a 20% tax on all $CORE claimed
    uint256 public constant CORE_CLAIM_TAX_PERCENTAGE = 20;
    // there will only ever be (roughly) 7.2 billion $CORE earned through staking
    uint256 public constant MAXIMUM_GLOBAL_CORE = 7200000000 ether;

    // amount of $CORE earned so far
    uint256 public totalCoreEarned;
    // number of Robots staked in the SupplyStation
    uint256 public totalRobotStaked;
    // number of Slimes staked in the pack
    uint256 public totalSlimeStaked;
    // the last time $CORE was claimed
    uint256 public lastClaimTimestamp;

    // emergency rescue to allow unstaking without any checks and without $CORE
    bool public rescueEnabled = false;

    /**
     * @param marsWasteland_ reference to the MarsWasteland NFT contract
     * @param core_ reference to the $CORE token
     */
    constructor(address marsWasteland_, address core_) {
        marsWasteland = IMarsWasteland(marsWasteland_);
        core = ICore(core_);
    }

    /** STAKING */

    /**
     * adds Robots and Slimes to the Barn and Pack
     * @param account the address of the staker
     * @param tokenIds the IDs of the Robots and Slimes to stake
     */
    function addManyToStationAndPack(address account, uint32[] calldata tokenIds) external {
        address msgSender = _msgSender();
        require(tx.origin == msgSender || msgSender == address(marsWasteland), "Only EOA");
        require(account == msgSender || msgSender == address(marsWasteland), "DONT GIVE YOUR TOKENS AWAY");
        for (uint i = 0; i < tokenIds.length; i++) {
            if (msgSender != address(marsWasteland)) { // dont do this step if its a mint + stake
                require(marsWasteland.ownerOf(tokenIds[i]) == msgSender, "AINT YO TOKEN");
                marsWasteland.transferFrom(msgSender, address(this), tokenIds[i]);
            } else if (tokenIds[i] == 0) {
                continue; // there may be gaps in the array for stolen tokens
            }

            if (isRobot(tokenIds[i]))
                _addRobotToStation(account, tokenIds[i]);
            else
                _addSlimeToPack(account, tokenIds[i]);
        }
    }

    /**
     * adds a single Robot to the Station
     * @param account the address of the staker
     * @param tokenId the ID of the Robot to add to the Station
     */
    function _addRobotToStation(address account, uint256 tokenId) internal whenNotPaused _updateEarnings {
        supplyStation[tokenId] = Stake({
            owner: account,
            tokenId: uint32(tokenId),
            value: uint256(block.timestamp)
        });
        totalRobotStaked += 1;
        _addTokenToOwnerEnumeration(account, tokenId);
        emit TokenStaked(account, tokenId, block.timestamp);
    }

    /**
     * adds a single Slime to the Pack
     * @param account the address of the staker
     * @param tokenId the ID of the Slime to add to the Pack
     */
    function _addSlimeToPack(address account, uint256 tokenId) internal {
        uint256 alpha = _alphaForSlime(tokenId);
        totalAlphaStaked += alpha; // Portion of earnings ranges from 8 to 5
        totalSlimeStaked += 1;
        _addTokenToOwnerEnumeration(account, tokenId);
        packIndices[tokenId] = pack[alpha].length; // Store the location of the slime in the Pack
        pack[alpha].push(
            Stake({
                owner: account,
                tokenId: uint32(tokenId),
                value: uint256(corePerAlpha)
            })
        ); // Add the Slime to the Pack
        emit TokenStaked(account, tokenId, corePerAlpha);
    }

    /** CLAIMING / UNSTAKING */

    /**
     * realize $CORE earnings and optionally unstake tokens from the Station / Pack
     * to unstake a Robot it will require it has 2 days worth of $CORE unclaimed
     * @param tokenIds the IDs of the tokens to claim earnings from
     * @param unstake whether or not to unstake ALL of the tokens listed in tokenIds
     */
    function claimManyFromStationAndPack(uint32[] calldata tokenIds, bool unstake) external whenNotPaused _updateEarnings {
        address msgSender = _msgSender();
        require(tx.origin == msgSender, "Only EOA");
        uint256 owed = 0;
        for (uint i = 0; i < tokenIds.length; i++) {
            if (isRobot(tokenIds[i]))
                owed += _claimRobotFromStation(tokenIds[i], unstake);
            else
                owed += _claimSlimeFromPack(tokenIds[i], unstake);
        }
        if (owed == 0) return;
        core.mint(_msgSender(), owed);
    }

    /**
     * realize $CORE earnings for a single Robot and optionally unstake it
     * if not unstaking, pay a 20% tax to the staked Slimes
     * if unstaking, there is a 50% chance all $CORE is stolen
     * @param tokenId the ID of the Sheep to claim earnings from
     * @param unstake whether or not to unstake the Sheep
     * @return owed - the amount of $CORE earned
     */
    function _claimRobotFromStation(uint256 tokenId, bool unstake) internal returns (uint256 owed) {
        require(marsWasteland.ownerOf(tokenId) == address(this), "AINT A PART OF THE STATION");
        Stake memory stake = supplyStation[tokenId];
        require(stake.owner == _msgSender(), "SWIPER, NO SWIPING");
        require(!(unstake && block.timestamp - stake.value < MINIMUM_TO_EXIT), "GONNA BE COLD WITHOUT TWO DAY'S CORE");
        if (totalCoreEarned < MAXIMUM_GLOBAL_CORE) {
            owed = (block.timestamp - stake.value) * DAILY_CORE_RATE / 1 days;
        } else if (stake.value > lastClaimTimestamp) {
            owed = 0; // $CORE production stopped already
        } else {
            owed = (lastClaimTimestamp - stake.value) * DAILY_CORE_RATE / 1 days; // stop earning additional $CORE if it's all been earned
        }
    
        if (unstake) {
            if (random(tokenId + block.timestamp) & 1 == 1) { // 50% chance of all $CORE stolen
                _paySlimeTax(owed);
                owed = 0;
            }
            delete supplyStation[tokenId];
            totalRobotStaked -= 1;
            _removeTokenFromOwnerEnumeration(_msgSender(), tokenId);
            marsWasteland.safeTransferFrom(address(this), _msgSender(), tokenId, ""); // send back Robot
        } else {
            _paySlimeTax(owed * CORE_CLAIM_TAX_PERCENTAGE / 100); // percentage tax to staked Slimes
            owed = owed * (100 - CORE_CLAIM_TAX_PERCENTAGE) / 100; // remainder goes to Robot owner
            supplyStation[tokenId] = Stake({
                owner: _msgSender(),
                tokenId: uint32(tokenId),
                value: uint256(block.timestamp)
            }); // reset stake
        }
        emit RobotClaimed(tokenId, owed, unstake);
    }

    /**
     * realize $CORE earnings for a single Slime and optionally unstake it
     * Slimes earn $CORE proportional to their Alpha rank
     * @param tokenId the ID of the Slime to claim earnings from
     * @param unstake whether or not to unstake the Slime
     * @return owed - the amount of $CORE earned
     */
    function _claimSlimeFromPack(uint256 tokenId, bool unstake) internal returns (uint256 owed) {
        require(marsWasteland.ownerOf(tokenId) == address(this), "AINT A PART OF THE PACK");
        uint256 alpha = _alphaForSlime(tokenId);
        Stake memory stake = pack[alpha][packIndices[tokenId]];
        require(stake.owner == _msgSender(), "SWIPER, NO SWIPING");
        owed = (alpha) * (corePerAlpha - stake.value); // Calculate portion of tokens based on Alpha
        if (unstake) {
            totalAlphaStaked -= alpha; // Remove Alpha from total staked
            totalSlimeStaked -= 1;
            _removeTokenFromOwnerEnumeration(_msgSender(), tokenId);
            Stake memory lastStake = pack[alpha][pack[alpha].length - 1];
            pack[alpha][packIndices[tokenId]] = lastStake; // Shuffle last Slime to current position
            packIndices[lastStake.tokenId] = packIndices[tokenId];
            pack[alpha].pop(); // Remove duplicate
            delete packIndices[tokenId]; // Delete old mapping
            marsWasteland.safeTransferFrom(address(this), _msgSender(), tokenId, ""); // Send back Slime
        } else {
            pack[alpha][packIndices[tokenId]] = Stake({
                owner: _msgSender(),
                tokenId: uint32(tokenId),
                value: uint256(corePerAlpha)
            }); // reset stake
        }
        emit SlimeClaimed(tokenId, owed, unstake);
    }

    /**
     * emergency unstake tokens
     * @param tokenIds the IDs of the tokens to claim earnings from
     */
    function rescue(uint256[] calldata tokenIds) external {
        require(rescueEnabled, "RESCUE DISABLED");
        require(tx.origin == _msgSender(), "Only EOA");
        uint256 tokenId;
        Stake memory stake;
        Stake memory lastStake;
        uint256 alpha;
        for (uint i = 0; i < tokenIds.length; i++) {
            tokenId = tokenIds[i];
            if (isRobot(tokenId)) {
                stake = supplyStation[tokenId];
                require(stake.owner == _msgSender(), "SWIPER, NO SWIPING");
                delete supplyStation[tokenId];
                totalRobotStaked -= 1;
                _removeTokenFromOwnerEnumeration(_msgSender(), tokenId);
                marsWasteland.safeTransferFrom(address(this), _msgSender(), tokenId, ""); // send back Robot
                emit RobotClaimed(tokenId, 0, true);
            } else {
                alpha = _alphaForSlime(tokenId);
                stake = pack[alpha][packIndices[tokenId]];
                require(stake.owner == _msgSender(), "SWIPER, NO SWIPING");
                totalAlphaStaked -= alpha; // Remove Alpha from total staked
                totalSlimeStaked -= 1;
                _removeTokenFromOwnerEnumeration(_msgSender(), tokenId);
                lastStake = pack[alpha][pack[alpha].length - 1];
                pack[alpha][packIndices[tokenId]] = lastStake; // Shuffle last Slime to current position
                packIndices[lastStake.tokenId] = packIndices[tokenId];
                pack[alpha].pop(); // Remove duplicate
                delete packIndices[tokenId]; // Delete old mapping
                marsWasteland.safeTransferFrom(address(this), _msgSender(), tokenId, ""); // Send back Slime
                emit SlimeClaimed(tokenId, 0, true);
            }
        }
    }

    /** ACCOUNTING */

    /** 
     * add $CORE to claimable pot for the Pack
     * @param amount $CORE to add to the pot
     */
    function _paySlimeTax(uint256 amount) internal {
        if (totalAlphaStaked == 0) { // if there's no staked Slimes
            unaccountedRewards += amount; // keep track of $CORE due to no Simes
            return;
        }
        // makes sure to include any unaccounted $CORE 
        corePerAlpha += (amount + unaccountedRewards) / totalAlphaStaked;
        unaccountedRewards = 0;
    }

    /**
     * tracks $CORE earnings to ensure it stops once 2.4 billion is eclipsed
     */
    modifier _updateEarnings() {
        if (totalCoreEarned < MAXIMUM_GLOBAL_CORE) {
            totalCoreEarned += (block.timestamp - lastClaimTimestamp) * totalRobotStaked * DAILY_CORE_RATE / 1 days; 
            lastClaimTimestamp = block.timestamp;
        }
        _;
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {
        require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    function tokenURIOfOwnerByIndex(address owner, uint256 index) public view returns (string memory) {
        require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        uint256 tokenId = _ownedTokens[owner][index];
        return marsWasteland.tokenURI(tokenId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = _balances[to];
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
        _balances[to] = length + 1;
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _balances[from] - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
        _balances[from] -= 1;
    }

    /** ADMIN */

    /**
     * allows owner to enable "rescue mode"
     * simplifies accounting, prioritizes tokens out in emergency
     */
    function setRescueEnabled(bool _enabled) external onlyOwner {
        rescueEnabled = _enabled;
    }

    /**
     * enables owner to pause / unpause minting
     */
    function setPaused(bool _paused) external onlyOwner {
        if (_paused) _pause();
        else _unpause();
    }

    function setMarsWasteland(address marsWasteland_) external onlyOwner {
        marsWasteland = IMarsWasteland(marsWasteland_);
    }

    function setCore(address core_) external onlyOwner {
        core = ICore(core_);
    }

    /** READ ONLY */

    /**
     * checks if a token is a Robot
     * @param tokenId the ID of the token to check
     * @return isRobot - whether or not a token is a Robot
     */
    function isRobot(uint256 tokenId) public view returns (bool) {
        return marsWasteland.getTokenTraits(tokenId).isRobot;
    }

    /**
     * gets the alpha score for a Slime
     * @param tokenId the ID of the Slime to get the alpha score for
     * @return the alpha score of the Slime (5-8)
     */
    function _alphaForSlime(uint256 tokenId) internal view returns (uint8) {
        uint8 alphaIndex = marsWasteland.getTokenTraits(tokenId).alphaIndex;
        return MAX_ALPHA - alphaIndex; // alpha index is 0-3
    }

    /**
     * chooses a random Slime thief when a newly minted token is stolen
     * @param seed a random value to choose a Slime from
     * @return the owner of the randomly selected Slime thief
     */
  function randomSlimeOwner(uint256 seed) external view returns (address) {
        require(address(_msgSender()) == address(marsWasteland));
        if (totalAlphaStaked == 0) return address(0x0);
        uint256 bucket = (seed & 0xFFFFFFFF) % totalAlphaStaked; // choose a value from 0 to total alpha staked
        uint256 cumulative;
        seed >>= 32;
        // loop through each bucket of Slimes with the same alpha score
        for (uint i = MAX_ALPHA - 3; i <= MAX_ALPHA; i++) {
            cumulative += pack[i].length * i;
             // if the value is not inside of that bucket, keep going
            if (bucket >= cumulative) continue;
            // get the address of a random Slime with that alpha score
            return pack[i][seed % pack[i].length].owner;
        }
        return address(0x0);
  }

    /**
     * generates a pseudorandom number
     * @param seed a value ensure different outcomes for different sources in the same block
     * @return a pseudorandom value
     */
    function random(uint256 seed) internal view returns (uint256) {
        return uint256(keccak256(abi.encodePacked(
            tx.origin,
            blockhash(block.number - 1),
            block.timestamp,
            seed
        )));
    }


    function onERC721Received(
        address,
        address from,
        uint256,
        bytes calldata
    ) external pure override returns (bytes4) {
        require(from == address(0x0), "Cannot send tokens to SupplyStation directly");
        return IERC721Receiver.onERC721Received.selector;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"marsWasteland_","type":"address"},{"internalType":"address","name":"core_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"earned","type":"uint256"},{"indexed":false,"internalType":"bool","name":"unstaked","type":"bool"}],"name":"RobotClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"earned","type":"uint256"},{"indexed":false,"internalType":"bool","name":"unstaked","type":"bool"}],"name":"SlimeClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TokenStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"CORE_CLAIM_TAX_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAILY_CORE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_GLOBAL_CORE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ALPHA","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_TO_EXIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint32[]","name":"tokenIds","type":"uint32[]"}],"name":"addManyToStationAndPack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"tokenIds","type":"uint32[]"},{"internalType":"bool","name":"unstake","type":"bool"}],"name":"claimManyFromStationAndPack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"core","outputs":[{"internalType":"contract ICore","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"corePerAlpha","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isRobot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastClaimTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marsWasteland","outputs":[{"internalType":"contract IMarsWasteland","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"pack","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint32","name":"tokenId","type":"uint32"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"packIndices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"seed","type":"uint256"}],"name":"randomSlimeOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"rescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"core_","type":"address"}],"name":"setCore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marsWasteland_","type":"address"}],"name":"setMarsWasteland","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setRescueEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"supplyStation","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint32","name":"tokenId","type":"uint32"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenURIOfOwnerByIndex","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAlphaStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCoreEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRobotStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSlimeStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unaccountedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405260006009556000600a556000600b556000601060006101000a81548160ff0219169083151502179055503480156200003b57600080fd5b50604051620053e5380380620053e5833981810160405281019062000061919062000208565b62000081620000756200012560201b60201c565b6200012d60201b60201c565b60008060146101000a81548160ff02191690831515021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620002a2565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050620002028162000288565b92915050565b6000806040838503121562000222576200022162000283565b5b60006200023285828601620001f1565b92505060206200024585828601620001f1565b9150509250929050565b60006200025c8262000263565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b62000293816200024f565b81146200029f57600080fd5b50565b61513380620002b26000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c806370a08231116101255780638b2137ab116100ad578063c32831851161007c578063c32831851461060c578063dd55fcb314610628578063e73bdbd61461065a578063f2f4eb2614610678578063f2fde38b1461069657610211565b80638b2137ab146105945780638da5cb5b146105b257806391725882146105d0578063c0c472c0146105ee57610211565b806376531008116100f457806376531008146104f25780637907de931461050e5780637f723ad61461053e578063800096301461055a57806381c50bac1461057657610211565b806370a0823114610456578063715018a61461048657806371efdfdf1461049057806372d1633b146104c057610211565b806339db714f116101a85780636646471411610177578063664647141461039e5780636a3ef057146103bc5780636a9ae349146103d85780636f234fb5146104085780636f2578751461043857610211565b806339db714f146103265780634b7367f0146103445780635c975abb14610362578063607af3971461038057610211565b8063201ef2a4116101e4578063201ef2a41461029e5780632f38c0a5146102bc5780632f745c59146102d857806337a386b91461030857610211565b80630a07f04514610216578063150b7a021461023457806316c38b3c1461026457806317f7c2cc14610280575b600080fd5b61021e6106b2565b60405161022b919061478e565b60405180910390f35b61024e60048036038101906102499190613d49565b6106c2565b60405161025b919061453b565b60405180910390f35b61027e60048036038101906102799190613f1e565b610745565b005b6102886107e0565b6040516102959190614571565b60405180910390f35b6102a6610806565b6040516102b39190614832565b60405180910390f35b6102d660048036038101906102d19190613cef565b61080b565b005b6102f260048036038101906102ed9190613e31565b6108cb565b6040516102ff919061478e565b60405180910390f35b610310610970565b60405161031d919061478e565b60405180910390f35b61032e610977565b60405161033b9190614520565b60405180910390f35b61034c61098a565b604051610359919061478e565b60405180910390f35b61036a610990565b6040516103779190614520565b60405180910390f35b6103886109a6565b604051610395919061478e565b60405180910390f35b6103a66109ac565b6040516103b3919061478e565b60405180910390f35b6103d660048036038101906103d19190613e71565b6109b9565b005b6103f260048036038101906103ed9190613e31565b61125a565b6040516103ff919061458c565b60405180910390f35b610422600480360381019061041d9190613fc1565b6113b4565b60405161042f919061478e565b60405180910390f35b6104406113cc565b60405161044d919061478e565b60405180910390f35b610470600480360381019061046b9190613cef565b6113d2565b60405161047d919061478e565b60405180910390f35b61048e61148a565b005b6104aa60048036038101906104a59190613fc1565b611512565b6040516104b79190614520565b60405180910390f35b6104da60048036038101906104d59190613fc1565b6115ca565b6040516104e9939291906144e9565b60405180910390f35b61050c60048036038101906105079190613f1e565b611624565b005b61052860048036038101906105239190613fc1565b6116bd565b60405161053591906143ed565b60405180910390f35b61055860048036038101906105539190613dd1565b611853565b005b610574600480360381019061056f9190613cef565b611d50565b005b61057e611e10565b60405161058b919061478e565b60405180910390f35b61059c611e16565b6040516105a9919061478e565b60405180910390f35b6105ba611e1c565b6040516105c791906143ed565b60405180910390f35b6105d8611e45565b6040516105e5919061478e565b60405180910390f35b6105f6611e4a565b604051610603919061478e565b60405180910390f35b61062660048036038101906106219190613ebe565b611e50565b005b610642600480360381019061063d9190613fee565b61211f565b604051610651939291906144e9565b60405180910390f35b610662612196565b60405161066f919061478e565b60405180910390f35b61068061219c565b60405161068d9190614556565b60405180910390f35b6106b060048036038101906106ab9190613cef565b6121c2565b005b6b1743b34e18439b502000000081565b60008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610732576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107299061474e565b60405180910390fd5b63150b7a0260e01b905095945050505050565b61074d6122ba565b73ffffffffffffffffffffffffffffffffffffffff1661076b611e1c565b73ffffffffffffffffffffffffffffffffffffffff16146107c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b8906146ee565b60405180910390fd5b80156107d4576107cf6122c2565b6107dd565b6107dc612365565b5b50565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600881565b6108136122ba565b73ffffffffffffffffffffffffffffffffffffffff16610831611e1c565b73ffffffffffffffffffffffffffffffffffffffff1614610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e906146ee565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006108d6836113d2565b8210610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090e906145ce565b60405180910390fd5b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6202a30081565b601060009054906101000a900460ff1681565b600c5481565b60008060149054906101000a900460ff16905090565b600f5481565b68d8d726b7177a80000081565b601060009054906101000a900460ff16610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff9061464e565b60405180910390fd5b610a106122ba565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a749061462e565b60405180910390fd5b6000610a876139f9565b610a8f6139f9565b600080600090505b8686905081101561125157868682818110610ab557610ab4614cc3565b5b905060200201359450610ac785611512565b15610d4c57600660008681526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820154815250509350610b7a6122ba565b73ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff1614610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be29061468e565b60405180910390fd5b60066000868152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549063ffffffff0219169055600182016000905550506001600d6000828254610c5a91906149b1565b92505081905550610c72610c6c6122ba565b86612406565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde30610cb96122ba565b886040518463ffffffff1660e01b8152600401610cd893929190614408565b600060405180830381600087803b158015610cf257600080fd5b505af1158015610d06573d6000803e3d6000fd5b505050507f7beeacbe55c784dc3b82ca73368d095a53b73a88f9d3b5af4aa5ee392724e6488560006001604051610d3f939291906147a9565b60405180910390a161123e565b610d5585612601565b60ff16915060076000838152602001908152602001600020600860008781526020019081526020016000205481548110610d9257610d91614cc3565b5b90600052602060002090600202016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820154815250509350610e3b6122ba565b73ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff1614610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea39061468e565b60405180910390fd5b8160096000828254610ebe91906149b1565b925050819055506001600e6000828254610ed891906149b1565b92505081905550610ef0610eea6122ba565b86612406565b6007600083815260200190815260200160002060016007600085815260200190815260200160002080549050610f2691906149b1565b81548110610f3757610f36614cc3565b5b90600052602060002090600202016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820154815250509250826007600084815260200190815260200160002060086000888152602001908152602001600020548154811061101157611010614cc3565b5b906000526020600020906002020160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160010155905050600860008681526020019081526020016000205460086000856020015163ffffffff16815260200190815260200160002081905550600760008381526020019081526020016000208054806110f2576110f1614c94565b5b6001900381819060005260206000209060020201600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549063ffffffff02191690556001820160009055505090556008600086815260200190815260200160002060009055600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde306111af6122ba565b886040518463ffffffff1660e01b81526004016111ce93929190614408565b600060405180830381600087803b1580156111e857600080fd5b505af11580156111fc573d6000803e3d6000fd5b505050507f344ceab50e80529abde7901121610f45d53f841991f8315026525fbd5e5a62998560006001604051611235939291906147a9565b60405180910390a15b808061124990614b84565b915050610a97565b50505050505050565b6060611265836113d2565b82106112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d906145ce565b60405180910390fd5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020549050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd826040518263ffffffff1660e01b8152600401611356919061478e565b60006040518083038186803b15801561136e57600080fd5b505afa158015611382573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906113ab9190613f4b565b91505092915050565b60086020528060005260406000206000915090505481565b60095481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a906146ce565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114926122ba565b73ffffffffffffffffffffffffffffffffffffffff166114b0611e1c565b73ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd906146ee565b60405180910390fd5b61151060006126ca565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394e56847836040518263ffffffff1660e01b815260040161156f919061478e565b60e06040518083038186803b15801561158757600080fd5b505afa15801561159b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bf9190613f94565b600001519050919050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900463ffffffff16908060010154905083565b61162c6122ba565b73ffffffffffffffffffffffffffffffffffffffff1661164a611e1c565b73ffffffffffffffffffffffffffffffffffffffff16146116a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611697906146ee565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166117006122ba565b73ffffffffffffffffffffffffffffffffffffffff161461172057600080fd5b60006009541415611734576000905061184e565b600060095463ffffffff841661174a9190614c05565b90506000602084901c935060006003600861176591906149e5565b60ff1690505b600860ff168111611846578060076000838152602001908152602001600020805490506117989190614957565b826117a391906148d0565b91508183106117b157611833565b600760008281526020019081526020016000206007600083815260200190815260200160002080549050866117e69190614c05565b815481106117f7576117f6614cc3565b5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935050505061184e565b808061183e90614b84565b91505061176b565b506000925050505b919050565b600061185d6122ba565b90508073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614806118e65750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c9061462e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119ac5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e29061470e565b60405180910390fd5b60005b83839050811015611d4957600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c4a578173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e868685818110611ab657611ab5614cc3565b5b9050602002016020810190611acb919061402e565b6040518263ffffffff1660e01b8152600401611ae79190614817565b60206040518083038186803b158015611aff57600080fd5b505afa158015611b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b379190613d1c565b73ffffffffffffffffffffffffffffffffffffffff1614611b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b849061476e565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330878786818110611be057611bdf614cc3565b5b9050602002016020810190611bf5919061402e565b6040518463ffffffff1660e01b8152600401611c1393929190614452565b600060405180830381600087803b158015611c2d57600080fd5b505af1158015611c41573d6000803e3d6000fd5b50505050611c86565b6000848483818110611c5f57611c5e614cc3565b5b9050602002016020810190611c74919061402e565b63ffffffff161415611c8557611d36565b5b611cbc848483818110611c9c57611c9b614cc3565b5b9050602002016020810190611cb1919061402e565b63ffffffff16611512565b15611cfd57611cf885858584818110611cd857611cd7614cc3565b5b9050602002016020810190611ced919061402e565b63ffffffff1661278e565b611d35565b611d3485858584818110611d1457611d13614cc3565b5b9050602002016020810190611d29919061402e565b63ffffffff16612971565b5b5b8080611d4190614b84565b9150506119ee565b5050505050565b611d586122ba565b73ffffffffffffffffffffffffffffffffffffffff16611d76611e1c565b73ffffffffffffffffffffffffffffffffffffffff1614611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc3906146ee565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b600e5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601481565b600a5481565b611e58610990565b15611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f906146ae565b60405180910390fd5b6b1743b34e18439b5020000000600c541015611f0b576201518068d8d726b7177a800000600d54600f5442611ecd91906149b1565b611ed79190614957565b611ee19190614957565b611eeb9190614926565b600c6000828254611efc91906148d0565b9250508190555042600f819055505b6000611f156122ba565b90508073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c9061462e565b60405180910390fd5b6000805b8585905081101561207057611fca868683818110611faa57611fa9614cc3565b5b9050602002016020810190611fbf919061402e565b63ffffffff16611512565b1561201857612006868683818110611fe557611fe4614cc3565b5b9050602002016020810190611ffa919061402e565b63ffffffff1685612b1d565b8261201191906148d0565b915061205d565b61204f86868381811061202e5761202d614cc3565b5b9050602002016020810190612043919061402e565b63ffffffff1685613101565b8261205a91906148d0565b91505b808061206890614b84565b915050611f89565b50600081141561208157505061211a565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f196120c76122ba565b836040518363ffffffff1660e01b81526004016120e5929190614489565b600060405180830381600087803b1580156120ff57600080fd5b505af1158015612113573d6000803e3d6000fd5b5050505050505b505050565b6007602052816000526040600020818154811061213b57600080fd5b9060005260206000209060020201600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900463ffffffff16908060010154905083565b600b5481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121ca6122ba565b73ffffffffffffffffffffffffffffffffffffffff166121e8611e1c565b73ffffffffffffffffffffffffffffffffffffffff161461223e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612235906146ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a59061460e565b60405180910390fd5b6122b7816126ca565b50565b600033905090565b6122ca610990565b1561230a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612301906146ae565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861234e6122ba565b60405161235b91906143ed565b60405180910390a1565b61236d610990565b6123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a3906145ae565b60405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6123ef6122ba565b6040516123fc91906143ed565b60405180910390a1565b60006001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461245491906149b1565b9050600060026000848152602001908152602001600020549050818114612539576000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816002600083815260200190815260200160002081905550505b6002600084815260200190815260200160002060009055600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020600090556001600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125f491906149b1565b9250508190555050505050565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394e56847846040518263ffffffff1660e01b815260040161265f919061478e565b60e06040518083038186803b15801561267757600080fd5b505afa15801561268b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126af9190613f94565b60c0015190508060086126c291906149e5565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612796610990565b156127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd906146ae565b60405180910390fd5b6b1743b34e18439b5020000000600c541015612849576201518068d8d726b7177a800000600d54600f544261280b91906149b1565b6128159190614957565b61281f9190614957565b6128299190614926565b600c600082825461283a91906148d0565b9250508190555042600f819055505b60405180606001604052808373ffffffffffffffffffffffffffffffffffffffff1681526020018263ffffffff168152602001428152506006600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff160217905550604082015181600101559050506001600d600082825461292191906148d0565b925050819055506129328282613845565b7f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d2828242604051612965939291906144b2565b60405180910390a15050565b600061297c82612601565b60ff169050806009600082825461299391906148d0565b925050819055506001600e60008282546129ad91906148d0565b925050819055506129be8383613845565b600760008281526020019081526020016000208054905060086000848152602001908152602001600020819055506007600082815260200190815260200160002060405180606001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020018463ffffffff168152602001600b54815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff1602179055506040820151816001015550507f6173e4d2d9dd52aae0ed37afed3adcf924a490639b759ca93d32dc43366c17d28383600b54604051612b10939291906144b2565b60405180910390a1505050565b60003073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401612b91919061478e565b60206040518083038186803b158015612ba957600080fd5b505afa158015612bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be19190613d1c565b73ffffffffffffffffffffffffffffffffffffffff1614612c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2e9061472e565b60405180910390fd5b6000600660008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820154815250509050612ce76122ba565b73ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4f9061468e565b60405180910390fd5b828015612d7657506202a300816040015142612d7491906149b1565b105b15612db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dad9061466e565b60405180910390fd5b6b1743b34e18439b5020000000600c541015612e05576201518068d8d726b7177a800000826040015142612dea91906149b1565b612df49190614957565b612dfe9190614926565b9150612e54565b600f5481604001511115612e1c5760009150612e53565b6201518068d8d726b7177a8000008260400151600f54612e3c91906149b1565b612e469190614957565b612e509190614926565b91505b5b8215612faa57600180612e714287612e6c91906148d0565b61394b565b161415612e8657612e8182613991565b600091505b60066000858152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549063ffffffff0219169055600182016000905550506001600d6000828254612ef591906149b1565b92505081905550612f0d612f076122ba565b85612406565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde30612f546122ba565b876040518463ffffffff1660e01b8152600401612f7393929190614408565b600060405180830381600087803b158015612f8d57600080fd5b505af1158015612fa1573d6000803e3d6000fd5b505050506130bf565b612fcb6064601484612fbc9190614957565b612fc69190614926565b613991565b606460146064612fdb91906149b1565b83612fe69190614957565b612ff09190614926565b915060405180606001604052806130056122ba565b73ffffffffffffffffffffffffffffffffffffffff1681526020018563ffffffff168152602001428152506006600086815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff160217905550604082015181600101559050505b7f7beeacbe55c784dc3b82ca73368d095a53b73a88f9d3b5af4aa5ee392724e6488483856040516130f2939291906147e0565b60405180910390a15092915050565b60003073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401613175919061478e565b60206040518083038186803b15801561318d57600080fd5b505afa1580156131a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c59190613d1c565b73ffffffffffffffffffffffffffffffffffffffff161461321b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613212906145ee565b60405180910390fd5b600061322684612601565b60ff16905060006007600083815260200190815260200160002060086000878152602001908152602001600020548154811061326557613264614cc3565b5b90600052602060002090600202016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905061330e6122ba565b73ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461337f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133769061468e565b60405180910390fd5b8060400151600b5461339191906149b1565b8261339c9190614957565b925083156137005781600960008282546133b691906149b1565b925050819055506001600e60008282546133d091906149b1565b925050819055506133e86133e26122ba565b86612406565b6000600760008481526020019081526020016000206001600760008681526020019081526020016000208054905061342091906149b1565b8154811061343157613430614cc3565b5b90600052602060002090600202016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820154815250509050806007600085815260200190815260200160002060086000898152602001908152602001600020548154811061350b5761350a614cc3565b5b906000526020600020906002020160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160010155905050600860008781526020019081526020016000205460086000836020015163ffffffff16815260200190815260200160002081905550600760008481526020019081526020016000208054806135ec576135eb614c94565b5b6001900381819060005260206000209060020201600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549063ffffffff02191690556001820160009055505090556008600087815260200190815260200160002060009055600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde306136a96122ba565b896040518463ffffffff1660e01b81526004016136c893929190614408565b600060405180830381600087803b1580156136e257600080fd5b505af11580156136f6573d6000803e3d6000fd5b5050505050613802565b60405180606001604052806137136122ba565b73ffffffffffffffffffffffffffffffffffffffff1681526020018663ffffffff168152602001600b548152506007600084815260200190815260200160002060086000888152602001908152602001600020548154811061377857613777614cc3565b5b906000526020600020906002020160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff160217905550604082015181600101559050505b7f344ceab50e80529abde7901121610f45d53f841991f8315026525fbd5e5a6299858486604051613835939291906147e0565b60405180910390a1505092915050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000208190555080600260008481526020019081526020016000208190555060018161390391906148d0565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b60003260014361395b91906149b1565b404284604051602001613971949392919061439f565b6040516020818303038152906040528051906020012060001c9050919050565b600060095414156139ba5780600a60008282546139ae91906148d0565b925050819055506139f6565b600954600a54826139cb91906148d0565b6139d59190614926565b600b60008282546139e691906148d0565b925050819055506000600a819055505b50565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600063ffffffff168152602001600081525090565b6000613a49613a4484614872565b61484d565b905082815260208101848484011115613a6557613a64614d35565b5b613a70848285614b20565b509392505050565b600081359050613a878161508a565b92915050565b600081519050613a9c8161508a565b92915050565b60008083601f840112613ab857613ab7614d26565b5b8235905067ffffffffffffffff811115613ad557613ad4614d21565b5b602083019150836020820283011115613af157613af0614d30565b5b9250929050565b60008083601f840112613b0e57613b0d614d26565b5b8235905067ffffffffffffffff811115613b2b57613b2a614d21565b5b602083019150836020820283011115613b4757613b46614d30565b5b9250929050565b600081359050613b5d816150a1565b92915050565b600081519050613b72816150a1565b92915050565b60008083601f840112613b8e57613b8d614d26565b5b8235905067ffffffffffffffff811115613bab57613baa614d21565b5b602083019150836001820283011115613bc757613bc6614d30565b5b9250929050565b600082601f830112613be357613be2614d26565b5b8151613bf3848260208601613a36565b91505092915050565b600060e08284031215613c1257613c11614d2b565b5b613c1c60e061484d565b90506000613c2c84828501613b63565b6000830152506020613c4084828501613cda565b6020830152506040613c5484828501613cda565b6040830152506060613c6884828501613cda565b6060830152506080613c7c84828501613cda565b60808301525060a0613c9084828501613cda565b60a08301525060c0613ca484828501613cda565b60c08301525092915050565b600081359050613cbf816150b8565b92915050565b600081359050613cd4816150cf565b92915050565b600081519050613ce9816150e6565b92915050565b600060208284031215613d0557613d04614d3f565b5b6000613d1384828501613a78565b91505092915050565b600060208284031215613d3257613d31614d3f565b5b6000613d4084828501613a8d565b91505092915050565b600080600080600060808688031215613d6557613d64614d3f565b5b6000613d7388828901613a78565b9550506020613d8488828901613a78565b9450506040613d9588828901613cb0565b935050606086013567ffffffffffffffff811115613db657613db5614d3a565b5b613dc288828901613b78565b92509250509295509295909350565b600080600060408486031215613dea57613de9614d3f565b5b6000613df886828701613a78565b935050602084013567ffffffffffffffff811115613e1957613e18614d3a565b5b613e2586828701613af8565b92509250509250925092565b60008060408385031215613e4857613e47614d3f565b5b6000613e5685828601613a78565b9250506020613e6785828601613cb0565b9150509250929050565b60008060208385031215613e8857613e87614d3f565b5b600083013567ffffffffffffffff811115613ea657613ea5614d3a565b5b613eb285828601613aa2565b92509250509250929050565b600080600060408486031215613ed757613ed6614d3f565b5b600084013567ffffffffffffffff811115613ef557613ef4614d3a565b5b613f0186828701613af8565b93509350506020613f1486828701613b4e565b9150509250925092565b600060208284031215613f3457613f33614d3f565b5b6000613f4284828501613b4e565b91505092915050565b600060208284031215613f6157613f60614d3f565b5b600082015167ffffffffffffffff811115613f7f57613f7e614d3a565b5b613f8b84828501613bce565b91505092915050565b600060e08284031215613faa57613fa9614d3f565b5b6000613fb884828501613bfc565b91505092915050565b600060208284031215613fd757613fd6614d3f565b5b6000613fe584828501613cb0565b91505092915050565b6000806040838503121561400557614004614d3f565b5b600061401385828601613cb0565b925050602061402485828601613cb0565b9150509250929050565b60006020828403121561404457614043614d3f565b5b600061405284828501613cc5565b91505092915050565b61406481614a19565b82525050565b61407b61407682614a19565b614bcd565b82525050565b61408a81614a2b565b82525050565b6140a161409c82614a37565b614bdf565b82525050565b6140b081614a41565b82525050565b6140bf81614ab4565b82525050565b6140ce81614ad8565b82525050565b6140dd81614afc565b82525050565b60006140ee826148a3565b6140f881856148bf565b9350614108818560208601614b20565b61411181614d44565b840191505092915050565b60006141296014836148bf565b915061413482614d62565b602082019050919050565b600061414c602b836148bf565b915061415782614d8b565b604082019050919050565b600061416f6017836148bf565b915061417a82614dda565b602082019050919050565b60006141926026836148bf565b915061419d82614e03565b604082019050919050565b60006141b56008836148bf565b91506141c082614e52565b602082019050919050565b60006141d8600f836148bf565b91506141e382614e7b565b602082019050919050565b60006141fb6024836148bf565b915061420682614ea4565b604082019050919050565b600061421e6012836148bf565b915061422982614ef3565b602082019050919050565b60006142416010836148bf565b915061424c82614f1c565b602082019050919050565b6000614264602a836148bf565b915061426f82614f45565b604082019050919050565b60006142876020836148bf565b915061429282614f94565b602082019050919050565b60006142aa601a836148bf565b91506142b582614fbd565b602082019050919050565b60006142cd6000836148ae565b91506142d882614fe6565b600082019050919050565b60006142f0601a836148bf565b91506142fb82614fe9565b602082019050919050565b6000614313602c836148bf565b915061431e82615012565b604082019050919050565b6000614336600d836148bf565b915061434182615061565b602082019050919050565b61435581614a8d565b82525050565b61436c61436782614a8d565b614bfb565b82525050565b61437b81614b0e565b82525050565b61438a81614a97565b82525050565b61439981614aa7565b82525050565b60006143ab828761406a565b6014820191506143bb8286614090565b6020820191506143cb828561435b565b6020820191506143db828461435b565b60208201915081905095945050505050565b6000602082019050614402600083018461405b565b92915050565b600060808201905061441d600083018661405b565b61442a602083018561405b565b614437604083018461434c565b8181036060830152614448816142c0565b9050949350505050565b6000606082019050614467600083018661405b565b614474602083018561405b565b6144816040830184614372565b949350505050565b600060408201905061449e600083018561405b565b6144ab602083018461434c565b9392505050565b60006060820190506144c7600083018661405b565b6144d4602083018561434c565b6144e1604083018461434c565b949350505050565b60006060820190506144fe600083018661405b565b61450b6020830185614381565b614518604083018461434c565b949350505050565b60006020820190506145356000830184614081565b92915050565b600060208201905061455060008301846140a7565b92915050565b600060208201905061456b60008301846140b6565b92915050565b600060208201905061458660008301846140c5565b92915050565b600060208201905081810360008301526145a681846140e3565b905092915050565b600060208201905081810360008301526145c78161411c565b9050919050565b600060208201905081810360008301526145e78161413f565b9050919050565b6000602082019050818103600083015261460781614162565b9050919050565b6000602082019050818103600083015261462781614185565b9050919050565b60006020820190508181036000830152614647816141a8565b9050919050565b60006020820190508181036000830152614667816141cb565b9050919050565b60006020820190508181036000830152614687816141ee565b9050919050565b600060208201905081810360008301526146a781614211565b9050919050565b600060208201905081810360008301526146c781614234565b9050919050565b600060208201905081810360008301526146e781614257565b9050919050565b600060208201905081810360008301526147078161427a565b9050919050565b600060208201905081810360008301526147278161429d565b9050919050565b60006020820190508181036000830152614747816142e3565b9050919050565b6000602082019050818103600083015261476781614306565b9050919050565b6000602082019050818103600083015261478781614329565b9050919050565b60006020820190506147a3600083018461434c565b92915050565b60006060820190506147be600083018661434c565b6147cb60208301856140d4565b6147d86040830184614081565b949350505050565b60006060820190506147f5600083018661434c565b614802602083018561434c565b61480f6040830184614081565b949350505050565b600060208201905061482c6000830184614372565b92915050565b60006020820190506148476000830184614390565b92915050565b6000614857614868565b90506148638282614b53565b919050565b6000604051905090565b600067ffffffffffffffff82111561488d5761488c614cf2565b5b61489682614d44565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006148db82614a8d565b91506148e683614a8d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561491b5761491a614c36565b5b828201905092915050565b600061493182614a8d565b915061493c83614a8d565b92508261494c5761494b614c65565b5b828204905092915050565b600061496282614a8d565b915061496d83614a8d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149a6576149a5614c36565b5b828202905092915050565b60006149bc82614a8d565b91506149c783614a8d565b9250828210156149da576149d9614c36565b5b828203905092915050565b60006149f082614aa7565b91506149fb83614aa7565b925082821015614a0e57614a0d614c36565b5b828203905092915050565b6000614a2482614a6d565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b6000614abf82614ac6565b9050919050565b6000614ad182614a6d565b9050919050565b6000614ae382614aea565b9050919050565b6000614af582614a6d565b9050919050565b6000614b0782614a8d565b9050919050565b6000614b1982614a97565b9050919050565b60005b83811015614b3e578082015181840152602081019050614b23565b83811115614b4d576000848401525b50505050565b614b5c82614d44565b810181811067ffffffffffffffff82111715614b7b57614b7a614cf2565b5b80604052505050565b6000614b8f82614a8d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614bc257614bc1614c36565b5b600182019050919050565b6000614bd882614be9565b9050919050565b6000819050919050565b6000614bf482614d55565b9050919050565b6000819050919050565b6000614c1082614a8d565b9150614c1b83614a8d565b925082614c2b57614c2a614c65565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f41494e5420412050415254204f4620544845205041434b000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c7920454f41000000000000000000000000000000000000000000000000600082015250565b7f5245534355452044495341424c45440000000000000000000000000000000000600082015250565b7f474f4e4e4120424520434f4c4420574954484f55542054574f2044415927532060008201527f434f524500000000000000000000000000000000000000000000000000000000602082015250565b7f5357495045522c204e4f2053574950494e470000000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f444f4e54204749564520594f555220544f4b454e532041574159000000000000600082015250565b50565b7f41494e5420412050415254204f46205448452053544154494f4e000000000000600082015250565b7f43616e6e6f742073656e6420746f6b656e7320746f20537570706c795374617460008201527f696f6e206469726563746c790000000000000000000000000000000000000000602082015250565b7f41494e5420594f20544f4b454e00000000000000000000000000000000000000600082015250565b61509381614a19565b811461509e57600080fd5b50565b6150aa81614a2b565b81146150b557600080fd5b50565b6150c181614a8d565b81146150cc57600080fd5b50565b6150d881614a97565b81146150e357600080fd5b50565b6150ef81614aa7565b81146150fa57600080fd5b5056fea26469706673582212203adaf5c6aa29c3330c78b0ad5b5ceb41f68a6b22a4f892e178a77998c020c40a64736f6c6343000806003300000000000000000000000024017c94108cefcd88ee4150ef31713b3e4b06e60000000000000000000000008a8990de1f566e27a0df5c783ff2c643638a7590

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

00000000000000000000000024017c94108cefcd88ee4150ef31713b3e4b06e60000000000000000000000008a8990de1f566e27a0df5c783ff2c643638a7590

-----Decoded View---------------
Arg [0] : marsWasteland_ (address): 0x24017c94108cefcd88ee4150ef31713b3e4b06e6
Arg [1] : core_ (address): 0x8a8990de1f566e27a0df5c783ff2c643638a7590

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000024017c94108cefcd88ee4150ef31713b3e4b06e6
Arg [1] : 0000000000000000000000008a8990de1f566e27a0df5c783ff2c643638a7590


Deployed ByteCode Sourcemap

7236:19641:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9212:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26562:312;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23954:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8149:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7350;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24080:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20631:232;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8962:48;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9694:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9321:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6017:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9571:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8846:52;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17791:1821;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20871:301;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8479:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8566:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21236:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4378:94;;;:::i;:::-;;24510:132;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8278:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;23776:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25267:838;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10239:992;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24222:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9411:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9493;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3727:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9068:54;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8667:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13078:583;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8387:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;8767:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8220:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4627:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9212:62;9258:16;9212:62;:::o;26562:312::-;26711:6;26754:3;26738:20;;:4;:20;;;26730:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;26825:41;;;26818:48;;26562:312;;;;;;;:::o;23954:118::-;3958:12;:10;:12::i;:::-;3947:23;;:7;:5;:7::i;:::-;:23;;;3939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24021:7:::1;24017:47;;;24030:8;:6;:8::i;:::-;24017:47;;;24054:10;:8;:10::i;:::-;24017:47;23954:118:::0;:::o;8149:35::-;;;;;;;;;;;;;:::o;7350:::-;7384:1;7350:35;:::o;24080:134::-;3958:12;:10;:12::i;:::-;3947:23;;:7;:5;:7::i;:::-;:23;;;3939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24191:14:::1;24160:13;;:46;;;;;;;;;;;;;;;;;;24080:134:::0;:::o;20631:232::-;20711:7;20747:16;20757:5;20747:9;:16::i;:::-;20739:5;:24;20731:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;20829:12;:19;20842:5;20829:19;;;;;;;;;;;;;;;:26;20849:5;20829:26;;;;;;;;;;;;20822:33;;20631:232;;;;:::o;8962:48::-;9004:6;8962:48;:::o;9694:33::-;;;;;;;;;;;;;:::o;9321:30::-;;;;:::o;6017:86::-;6064:4;6088:7;;;;;;;;;;;6081:14;;6017:86;:::o;9571:33::-;;;;:::o;8846:52::-;8888:10;8846:52;:::o;17791:1821::-;17864:13;;;;;;;;;;;17856:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;17929:12;:10;:12::i;:::-;17916:25;;:9;:25;;;17908:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17965:15;17991:18;;:::i;:::-;18020:22;;:::i;:::-;18053:13;18082:6;18091:1;18082:10;;18077:1528;18098:8;;:15;;18094:1;:19;18077:1528;;;18145:8;;18154:1;18145:11;;;;;;;:::i;:::-;;;;;;;;18135:21;;18175:16;18183:7;18175;:16::i;:::-;18171:1423;;;18220:13;:22;18234:7;18220:22;;;;;;;;;;;18212:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18284:12;:10;:12::i;:::-;18269:27;;:5;:11;;;:27;;;18261:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;18345:13;:22;18359:7;18345:22;;;;;;;;;;;;18338:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18406:1;18386:16;;:21;;;;;;;:::i;:::-;;;;;;;;18426:55;18459:12;:10;:12::i;:::-;18473:7;18426:32;:55::i;:::-;18500:13;;;;;;;;;;;:30;;;18539:4;18546:12;:10;:12::i;:::-;18560:7;18500:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18615:30;18628:7;18637:1;18640:4;18615:30;;;;;;;;:::i;:::-;;;;;;;;18171:1423;;;18694:23;18709:7;18694:14;:23::i;:::-;18686:31;;;;18744:4;:11;18749:5;18744:11;;;;;;;;;;;18756;:20;18768:7;18756:20;;;;;;;;;;;;18744:33;;;;;;;;:::i;:::-;;;;;;;;;;;;18736:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18819:12;:10;:12::i;:::-;18804:27;;:5;:11;;;:27;;;18796:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;18893:5;18873:16;;:25;;;;;;;:::i;:::-;;;;;;;;18971:1;18951:16;;:21;;;;;;;:::i;:::-;;;;;;;;18991:55;19024:12;:10;:12::i;:::-;19038:7;18991:32;:55::i;:::-;19077:4;:11;19082:5;19077:11;;;;;;;;;;;19110:1;19089:4;:11;19094:5;19089:11;;;;;;;;;;;:18;;;;:22;;;;:::i;:::-;19077:35;;;;;;;;:::i;:::-;;;;;;;;;;;;19065:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19167:9;19131:4;:11;19136:5;19131:11;;;;;;;;;;;19143;:20;19155:7;19143:20;;;;;;;;;;;;19131:33;;;;;;;;:::i;:::-;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19270:11;:20;19282:7;19270:20;;;;;;;;;;;;19237:11;:30;19249:9;:17;;;19237:30;;;;;;;;;;;;;:53;;;;19309:4;:11;19314:5;19309:11;;;;;;;;;;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19372:11;:20;19384:7;19372:20;;;;;;;;;;;19365:27;;;19433:13;;;;;;;;;;;:30;;;19472:4;19479:12;:10;:12::i;:::-;19493:7;19433:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19548:30;19561:7;19570:1;19573:4;19548:30;;;;;;;;:::i;:::-;;;;;;;;18171:1423;18115:3;;;;;:::i;:::-;;;;18077:1528;;;;17845:1767;;;;17791:1821;;:::o;20871:301::-;20954:13;20996:16;21006:5;20996:9;:16::i;:::-;20988:5;:24;20980:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;21071:15;21089:12;:19;21102:5;21089:19;;;;;;;;;;;;;;;:26;21109:5;21089:26;;;;;;;;;;;;21071:44;;21133:13;;;;;;;;;;;:22;;;21156:7;21133:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21126:38;;;20871:301;;;;:::o;8479:46::-;;;;;;;;;;;;;;;;;:::o;8566:35::-;;;;:::o;21236:191::-;21291:7;21336:1;21319:19;;:5;:19;;;;21311:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21403:9;:16;21413:5;21403:16;;;;;;;;;;;;;;;;21396:23;;21236:191;;;:::o;4378:94::-;3958:12;:10;:12::i;:::-;3947:23;;:7;:5;:7::i;:::-;:23;;;3939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4443:21:::1;4461:1;4443:9;:21::i;:::-;4378:94::o:0;24510:132::-;24565:4;24589:13;;;;;;;;;;;:28;;;24618:7;24589:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;;24582:52;;24510:132;;;:::o;8278:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23776:103::-;3958:12;:10;:12::i;:::-;3947:23;;:7;:5;:7::i;:::-;:23;;;3939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23863:8:::1;23847:13;;:24;;;;;;;;;;;;;;;;;;23776:103:::0;:::o;25267:838::-;25330:7;25391:13;;;;;;;;;;;25358:47;;25366:12;:10;:12::i;:::-;25358:47;;;25350:56;;;;;;25441:1;25421:16;;:21;25417:46;;;25459:3;25444:19;;;;25417:46;25474:14;25513:16;;25499:10;25492:4;:17;25491:38;;;;:::i;:::-;25474:55;;25587:18;25625:2;25616:11;;;;;25716:6;25737:1;7384;25725:13;;;;:::i;:::-;25716:22;;;;25711:359;7384:1;25740:14;;:1;:14;25711:359;;25807:1;25790:4;:7;25795:1;25790:7;;;;;;;;;;;:14;;;;:18;;;;:::i;:::-;25776:32;;;;;:::i;:::-;;;25908:10;25898:6;:20;25894:34;;25920:8;;25894:34;26022:4;:7;26027:1;26022:7;;;;;;;;;;;26037:4;:7;26042:1;26037:7;;;;;;;;;;;:14;;;;26030:4;:21;;;;:::i;:::-;26022:30;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;;;;;;;;;26015:43;;;;;;;25711:359;25756:3;;;;;:::i;:::-;;;;25711:359;;;;26095:3;26080:19;;;;25267:838;;;;:::o;10239:992::-;10337:17;10357:12;:10;:12::i;:::-;10337:32;;10401:9;10388:22;;:9;:22;;;:61;;;;10435:13;;;;;;;;;;;10414:35;;:9;:35;;;10388:61;10380:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;10492:9;10481:20;;:7;:20;;;:59;;;;10526:13;;;;;;;;;;;10505:35;;:9;:35;;;10481:59;10473:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;10587:6;10582:642;10603:8;;:15;;10599:1;:19;10582:642;;;10665:13;;;;;;;;;;;10644:35;;:9;:35;;;10640:399;;10789:9;10751:47;;:13;;;;;;;;;;;:21;;;10773:8;;10782:1;10773:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;10751:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;10743:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10835:13;;;;;;;;;;;:26;;;10862:9;10881:4;10888:8;;10897:1;10888:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;10835:65;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10640:399;;;10941:1;10926:8;;10935:1;10926:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:16;;;10922:117;;;10963:8;;10922:117;10640:399;11059:20;11067:8;;11076:1;11067:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;11059:20;;:7;:20::i;:::-;11055:157;;;11098:40;11117:7;11126:8;;11135:1;11126:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;11098:40;;:18;:40::i;:::-;11055:157;;;11175:37;11191:7;11200:8;;11209:1;11200:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;11175:37;;:15;:37::i;:::-;11055:157;10582:642;10620:3;;;;;:::i;:::-;;;;10582:642;;;;10326:905;10239:992;;;:::o;24222:89::-;3958:12;:10;:12::i;:::-;3947:23;;:7;:5;:7::i;:::-;:23;;;3939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24297:5:::1;24284:4;;:19;;;;;;;;;;;;;;;;;;24222:89:::0;:::o;9411:31::-;;;;:::o;9493:::-;;;;:::o;3727:87::-;3773:7;3800:6;;;;;;;;;;;3793:13;;3727:87;:::o;9068:54::-;9120:2;9068:54;:::o;8667:37::-;;;;:::o;13078:583::-;6343:8;:6;:8::i;:::-;6342:9;6334:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;9258:16:::1;20307:15;;:37;20303:225;;;20458:6;8888:10;20421:16;;20399:18;;20381:15;:36;;;;:::i;:::-;20380:57;;;;:::i;:::-;:75;;;;:::i;:::-;:84;;;;:::i;:::-;20361:15;;:103;;;;;;;:::i;:::-;;;;;;;;20501:15;20480:18;:36;;;;20303:225;13207:17:::2;13227:12;:10;:12::i;:::-;13207:32;;13271:9;13258:22;;:9;:22;;;13250:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;13304:12;13336:6:::0;13331:251:::2;13352:8;;:15;;13348:1;:19;13331:251;;;13393:20;13401:8;;13410:1;13401:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;13393:20;;:7;:20::i;:::-;13389:181;;;13440:44;13463:8;;13472:1;13463:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;13440:44;;13476:7;13440:22;:44::i;:::-;13432:52;;;;;:::i;:::-;;;13389:181;;;13529:41;13549:8;;13558:1;13549:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;13529:41;;13562:7;13529:19;:41::i;:::-;13521:49;;;;;:::i;:::-;;;13389:181;13369:3;;;;;:::i;:::-;;;;13331:251;;;;13604:1;13596:4;:9;13592:22;;;13607:7;;;;13592:22;13624:4;;;;;;;;;;;:9;;;13634:12;:10;:12::i;:::-;13648:4;13624:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;13196:465;;20538:1;13078:583:::0;;;:::o;8387:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8767:31::-;;;;:::o;8220:17::-;;;;;;;;;;;;;:::o;4627:192::-;3958:12;:10;:12::i;:::-;3947:23;;:7;:5;:7::i;:::-;:23;;;3939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4736:1:::1;4716:22;;:8;:22;;;;4708:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4792:19;4802:8;4792:9;:19::i;:::-;4627:192:::0;:::o;2442:98::-;2495:7;2522:10;2515:17;;2442:98;:::o;6817:118::-;6343:8;:6;:8::i;:::-;6342:9;6334:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;6887:4:::1;6877:7;;:14;;;;;;;;;;;;;;;;;;6907:20;6914:12;:10;:12::i;:::-;6907:20;;;;;;:::i;:::-;;;;;;;;6817:118::o:0;7076:120::-;6620:8;:6;:8::i;:::-;6612:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;7145:5:::1;7135:7:::0;::::1;:15;;;;;;;;;;;;;;;;;;7166:22;7175:12;:10;:12::i;:::-;7166:22;;;;;;:::i;:::-;;;;;;;;7076:120::o:0;22606:1012::-;22872:22;22915:1;22897:9;:15;22907:4;22897:15;;;;;;;;;;;;;;;;:19;;;;:::i;:::-;22872:44;;22927:18;22948:17;:26;22966:7;22948:26;;;;;;;;;;;;22927:47;;23095:14;23081:10;:28;23077:328;;23126:19;23148:12;:18;23161:4;23148:18;;;;;;;;;;;;;;;:34;23167:14;23148:34;;;;;;;;;;;;23126:56;;23232:11;23199:12;:18;23212:4;23199:18;;;;;;;;;;;;;;;:30;23218:10;23199:30;;;;;;;;;;;:44;;;;23349:10;23316:17;:30;23334:11;23316:30;;;;;;;;;;;:43;;;;23111:294;23077:328;23501:17;:26;23519:7;23501:26;;;;;;;;;;;23494:33;;;23545:12;:18;23558:4;23545:18;;;;;;;;;;;;;;;:34;23564:14;23545:34;;;;;;;;;;;23538:41;;;23609:1;23590:9;:15;23600:4;23590:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;22687:931;;22606:1012;;:::o;24830:219::-;24894:5;24912:16;24931:13;;;;;;;;;;;:28;;;24960:7;24931:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;24912:67;;25009:10;7384:1;24997:22;;;;:::i;:::-;24990:29;;;24830:219;;;:::o;4827:173::-;4883:16;4902:6;;;;;;;;;;;4883:25;;4928:8;4919:6;;:17;;;;;;;;;;;;;;;;;;4983:8;4952:40;;4973:8;4952:40;;;;;;;;;;;;4872:128;4827:173;:::o;11414:427::-;6343:8;:6;:8::i;:::-;6342:9;6334:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;9258:16:::1;20307:15;;:37;20303:225;;;20458:6;8888:10;20421:16;;20399:18;;20381:15;:36;;;;:::i;:::-;20380:57;;;;:::i;:::-;:75;;;;:::i;:::-;:84;;;;:::i;:::-;20361:15;;:103;;;;;;;:::i;:::-;;;;;;;;20501:15;20480:18;:36;;;;20303:225;11551:132:::2;;;;;;;;11579:7;11551:132;;;;;;11617:7;11551:132;;;;;;11655:15;11551:132;;::::0;11526:13:::2;:22;11540:7;11526:22;;;;;;;;;;;:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11714:1;11694:16;;:21;;;;;;;:::i;:::-;;;;;;;;11726:45;11754:7;11763;11726:27;:45::i;:::-;11787:46;11799:7;11808;11817:15;11787:46;;;;;;;;:::i;:::-;;;;;;;;11414:427:::0;;:::o;12018:677::-;12097:13;12113:23;12128:7;12113:14;:23::i;:::-;12097:39;;;;12167:5;12147:16;;:25;;;;;;;:::i;:::-;;;;;;;;12245:1;12225:16;;:21;;;;;;;:::i;:::-;;;;;;;;12257:45;12285:7;12294;12257:27;:45::i;:::-;12336:4;:11;12341:5;12336:11;;;;;;;;;;;:18;;;;12313:11;:20;12325:7;12313:20;;;;;;;;;;;:41;;;;12412:4;:11;12417:5;12412:11;;;;;;;;;;;12443:145;;;;;;;;12475:7;12443:145;;;;;;12517:7;12443:145;;;;;;12559:12;;12443:145;;;12412:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12644:43;12656:7;12665;12674:12;;12644:43;;;;;;;;:::i;:::-;;;;;;;;12086:609;12018:677;;:::o;14063:1816::-;14144:12;14219:4;14177:47;;:13;;;;;;;;;;;:21;;;14199:7;14177:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;14169:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;14266:18;14287:13;:22;14301:7;14287:22;;;;;;;;;;;14266:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14343:12;:10;:12::i;:::-;14328:27;;:5;:11;;;:27;;;14320:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;14399:7;:58;;;;;9004:6;14428:5;:11;;;14410:15;:29;;;;:::i;:::-;:47;14399:58;14397:61;14389:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;9258:16;14514:15;;:37;14510:408;;;14627:6;8888:10;14594:5;:11;;;14576:15;:29;;;;:::i;:::-;14575:49;;;;:::i;:::-;:58;;;;:::i;:::-;14568:65;;14510:408;;;14669:18;;14655:5;:11;;;:32;14651:267;;;14711:1;14704:8;;14651:267;;;14843:6;8888:10;14810:5;:11;;;14789:18;;:32;;;;:::i;:::-;14788:52;;;;:::i;:::-;:61;;;;:::i;:::-;14781:68;;14651:267;14510:408;14938:7;14934:886;;;15007:1;15002;14966:33;14983:15;14973:7;:25;;;;:::i;:::-;14966:6;:33::i;:::-;:37;:42;14962:162;;;15063:18;15076:4;15063:12;:18::i;:::-;15107:1;15100:8;;14962:162;15145:13;:22;15159:7;15145:22;;;;;;;;;;;;15138:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15202:1;15182:16;;:21;;;;;;;:::i;:::-;;;;;;;;15218:55;15251:12;:10;:12::i;:::-;15265:7;15218:32;:55::i;:::-;15288:13;;;;;;;;;;;:30;;;15327:4;15334:12;:10;:12::i;:::-;15348:7;15288:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14934:886;;;15412:52;15460:3;9120:2;15425:4;:32;;;;:::i;:::-;:38;;;;:::i;:::-;15412:12;:52::i;:::-;15564:3;9120:2;15529:3;:31;;;;:::i;:::-;15521:4;:40;;;;:::i;:::-;:46;;;;:::i;:::-;15514:53;;15640:153;;;;;;;;15672:12;:10;:12::i;:::-;15640:153;;;;;;15719:7;15640:153;;;;;;15761:15;15640:153;;;15615:13;:22;15629:7;15615:22;;;;;;;;;;;:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14934:886;15835:36;15848:7;15857:4;15863:7;15835:36;;;;;;;;:::i;:::-;;;;;;;;14158:1721;14063:1816;;;;:::o;16215:1448::-;16293:12;16368:4;16326:47;;:13;;;;;;;;;;;:21;;;16348:7;16326:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;16318:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;16412:13;16428:23;16443:7;16428:14;:23::i;:::-;16412:39;;;;16462:18;16483:4;:11;16488:5;16483:11;;;;;;;;;;;16495;:20;16507:7;16495:20;;;;;;;;;;;;16483:33;;;;;;;;:::i;:::-;;;;;;;;;;;;16462:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16550:12;:10;:12::i;:::-;16535:27;;:5;:11;;;:27;;;16527:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;16629:5;:11;;;16614:12;;:26;;;;:::i;:::-;16604:5;16603:38;;;;:::i;:::-;16596:45;;16702:7;16698:906;;;16746:5;16726:16;;:25;;;;;;;:::i;:::-;;;;;;;;16820:1;16800:16;;:21;;;;;;;:::i;:::-;;;;;;;;16836:55;16869:12;:10;:12::i;:::-;16883:7;16836:32;:55::i;:::-;16906:22;16931:4;:11;16936:5;16931:11;;;;;;;;;;;16964:1;16943:4;:11;16948:5;16943:11;;;;;;;;;;;:18;;;;:22;;;;:::i;:::-;16931:35;;;;;;;;:::i;:::-;;;;;;;;;;;;16906:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17017:9;16981:4;:11;16986:5;16981:11;;;;;;;;;;;16993;:20;17005:7;16993:20;;;;;;;;;;;;16981:33;;;;;;;;:::i;:::-;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17116:11;:20;17128:7;17116:20;;;;;;;;;;;;17083:11;:30;17095:9;:17;;;17083:30;;;;;;;;;;;;;:53;;;;17151:4;:11;17156:5;17151:11;;;;;;;;;;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17210:11;:20;17222:7;17210:20;;;;;;;;;;;17203:27;;;17267:13;;;;;;;;;;;:30;;;17306:4;17313:12;:10;:12::i;:::-;17327:7;17267:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16711:659;16698:906;;;17427:150;;;;;;;;17459:12;:10;:12::i;:::-;17427:150;;;;;;17506:7;17427:150;;;;;;17548:12;;17427:150;;;17391:4;:11;17396:5;17391:11;;;;;;;;;;;17403;:20;17415:7;17403:20;;;;;;;;;;;;17391:33;;;;;;;;:::i;:::-;;;;;;;;;;;;:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16698:906;17619:36;17632:7;17641:4;17647:7;17619:36;;;;;;;;:::i;:::-;;;;;;;;16307:1356;;16215:1448;;;;:::o;21728:251::-;21813:14;21830:9;:13;21840:2;21830:13;;;;;;;;;;;;;;;;21813:30;;21881:7;21854:12;:16;21867:2;21854:16;;;;;;;;;;;;;;;:24;21871:6;21854:24;;;;;;;;;;;:34;;;;21928:6;21899:17;:26;21917:7;21899:26;;;;;;;;;;;:35;;;;21970:1;21961:6;:10;;;;:::i;:::-;21945:9;:13;21955:2;21945:13;;;;;;;;;;;;;;;:26;;;;21802:177;21728:251;;:::o;26302:250::-;26355:7;26431:9;26480:1;26465:12;:16;;;;:::i;:::-;26455:27;26497:15;26527:4;26400:142;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26390:153;;;;;;26382:162;;26375:169;;26302:250;;;:::o;19758:403::-;19840:1;19820:16;;:21;19816:173;;;19911:6;19889:18;;:28;;;;;;;:::i;:::-;;;;;;;;19971:7;;19816:173;20104:16;;20082:18;;20073:6;:27;;;;:::i;:::-;20072:48;;;;:::i;:::-;20056:12;;:64;;;;;;;:::i;:::-;;;;;;;;20152:1;20131:18;:22;;;;19758:403;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:421:1:-;96:5;121:66;137:49;179:6;137:49;:::i;:::-;121:66;:::i;:::-;112:75;;210:6;203:5;196:21;248:4;241:5;237:16;286:3;277:6;272:3;268:16;265:25;262:2;;;293:79;;:::i;:::-;262:2;383:39;415:6;410:3;405;383:39;:::i;:::-;102:326;;;;;;:::o;434:139::-;480:5;518:6;505:20;496:29;;534:33;561:5;534:33;:::i;:::-;486:87;;;;:::o;579:143::-;636:5;667:6;661:13;652:22;;683:33;710:5;683:33;:::i;:::-;642:80;;;;:::o;745:568::-;818:8;828:6;878:3;871:4;863:6;859:17;855:27;845:2;;886:79;;:::i;:::-;845:2;999:6;986:20;976:30;;1029:18;1021:6;1018:30;1015:2;;;1051:79;;:::i;:::-;1015:2;1165:4;1157:6;1153:17;1141:29;;1219:3;1211:4;1203:6;1199:17;1189:8;1185:32;1182:41;1179:2;;;1226:79;;:::i;:::-;1179:2;835:478;;;;;:::o;1335:567::-;1407:8;1417:6;1467:3;1460:4;1452:6;1448:17;1444:27;1434:2;;1475:79;;:::i;:::-;1434:2;1588:6;1575:20;1565:30;;1618:18;1610:6;1607:30;1604:2;;;1640:79;;:::i;:::-;1604:2;1754:4;1746:6;1742:17;1730:29;;1808:3;1800:4;1792:6;1788:17;1778:8;1774:32;1771:41;1768:2;;;1815:79;;:::i;:::-;1768:2;1424:478;;;;;:::o;1908:133::-;1951:5;1989:6;1976:20;1967:29;;2005:30;2029:5;2005:30;:::i;:::-;1957:84;;;;:::o;2047:137::-;2101:5;2132:6;2126:13;2117:22;;2148:30;2172:5;2148:30;:::i;:::-;2107:77;;;;:::o;2203:552::-;2260:8;2270:6;2320:3;2313:4;2305:6;2301:17;2297:27;2287:2;;2328:79;;:::i;:::-;2287:2;2441:6;2428:20;2418:30;;2471:18;2463:6;2460:30;2457:2;;;2493:79;;:::i;:::-;2457:2;2607:4;2599:6;2595:17;2583:29;;2661:3;2653:4;2645:6;2641:17;2631:8;2627:32;2624:41;2621:2;;;2668:79;;:::i;:::-;2621:2;2277:478;;;;;:::o;2775:355::-;2842:5;2891:3;2884:4;2876:6;2872:17;2868:27;2858:2;;2899:79;;:::i;:::-;2858:2;3009:6;3003:13;3034:90;3120:3;3112:6;3105:4;3097:6;3093:17;3034:90;:::i;:::-;3025:99;;2848:282;;;;;:::o;3176:1471::-;3262:5;3306:4;3294:9;3289:3;3285:19;3281:30;3278:2;;;3314:79;;:::i;:::-;3278:2;3413:21;3429:4;3413:21;:::i;:::-;3404:30;;3496:1;3536:57;3589:3;3580:6;3569:9;3565:22;3536:57;:::i;:::-;3529:4;3522:5;3518:16;3511:83;3444:161;3664:2;3705:58;3759:3;3750:6;3739:9;3735:22;3705:58;:::i;:::-;3698:4;3691:5;3687:16;3680:84;3615:160;3834:2;3875:58;3929:3;3920:6;3909:9;3905:22;3875:58;:::i;:::-;3868:4;3861:5;3857:16;3850:84;3785:160;4005:2;4046:58;4100:3;4091:6;4080:9;4076:22;4046:58;:::i;:::-;4039:4;4032:5;4028:16;4021:84;3955:161;4175:3;4217:58;4271:3;4262:6;4251:9;4247:22;4217:58;:::i;:::-;4210:4;4203:5;4199:16;4192:84;4126:161;4351:3;4393:58;4447:3;4438:6;4427:9;4423:22;4393:58;:::i;:::-;4386:4;4379:5;4375:16;4368:84;4297:166;4528:3;4570:58;4624:3;4615:6;4604:9;4600:22;4570:58;:::i;:::-;4563:4;4556:5;4552:16;4545:84;4473:167;3268:1379;;;;:::o;4653:139::-;4699:5;4737:6;4724:20;4715:29;;4753:33;4780:5;4753:33;:::i;:::-;4705:87;;;;:::o;4798:137::-;4843:5;4881:6;4868:20;4859:29;;4897:32;4923:5;4897:32;:::i;:::-;4849:86;;;;:::o;4941:139::-;4996:5;5027:6;5021:13;5012:22;;5043:31;5068:5;5043:31;:::i;:::-;5002:78;;;;:::o;5086:329::-;5145:6;5194:2;5182:9;5173:7;5169:23;5165:32;5162:2;;;5200:79;;:::i;:::-;5162:2;5320:1;5345:53;5390:7;5381:6;5370:9;5366:22;5345:53;:::i;:::-;5335:63;;5291:117;5152:263;;;;:::o;5421:351::-;5491:6;5540:2;5528:9;5519:7;5515:23;5511:32;5508:2;;;5546:79;;:::i;:::-;5508:2;5666:1;5691:64;5747:7;5738:6;5727:9;5723:22;5691:64;:::i;:::-;5681:74;;5637:128;5498:274;;;;:::o;5778:963::-;5875:6;5883;5891;5899;5907;5956:3;5944:9;5935:7;5931:23;5927:33;5924:2;;;5963:79;;:::i;:::-;5924:2;6083:1;6108:53;6153:7;6144:6;6133:9;6129:22;6108:53;:::i;:::-;6098:63;;6054:117;6210:2;6236:53;6281:7;6272:6;6261:9;6257:22;6236:53;:::i;:::-;6226:63;;6181:118;6338:2;6364:53;6409:7;6400:6;6389:9;6385:22;6364:53;:::i;:::-;6354:63;;6309:118;6494:2;6483:9;6479:18;6466:32;6525:18;6517:6;6514:30;6511:2;;;6547:79;;:::i;:::-;6511:2;6660:64;6716:7;6707:6;6696:9;6692:22;6660:64;:::i;:::-;6642:82;;;;6437:297;5914:827;;;;;;;;:::o;6747:702::-;6841:6;6849;6857;6906:2;6894:9;6885:7;6881:23;6877:32;6874:2;;;6912:79;;:::i;:::-;6874:2;7032:1;7057:53;7102:7;7093:6;7082:9;7078:22;7057:53;:::i;:::-;7047:63;;7003:117;7187:2;7176:9;7172:18;7159:32;7218:18;7210:6;7207:30;7204:2;;;7240:79;;:::i;:::-;7204:2;7353:79;7424:7;7415:6;7404:9;7400:22;7353:79;:::i;:::-;7335:97;;;;7130:312;6864:585;;;;;:::o;7455:474::-;7523:6;7531;7580:2;7568:9;7559:7;7555:23;7551:32;7548:2;;;7586:79;;:::i;:::-;7548:2;7706:1;7731:53;7776:7;7767:6;7756:9;7752:22;7731:53;:::i;:::-;7721:63;;7677:117;7833:2;7859:53;7904:7;7895:6;7884:9;7880:22;7859:53;:::i;:::-;7849:63;;7804:118;7538:391;;;;;:::o;7935:559::-;8021:6;8029;8078:2;8066:9;8057:7;8053:23;8049:32;8046:2;;;8084:79;;:::i;:::-;8046:2;8232:1;8221:9;8217:17;8204:31;8262:18;8254:6;8251:30;8248:2;;;8284:79;;:::i;:::-;8248:2;8397:80;8469:7;8460:6;8449:9;8445:22;8397:80;:::i;:::-;8379:98;;;;8175:312;8036:458;;;;;:::o;8500:696::-;8591:6;8599;8607;8656:2;8644:9;8635:7;8631:23;8627:32;8624:2;;;8662:79;;:::i;:::-;8624:2;8810:1;8799:9;8795:17;8782:31;8840:18;8832:6;8829:30;8826:2;;;8862:79;;:::i;:::-;8826:2;8975:79;9046:7;9037:6;9026:9;9022:22;8975:79;:::i;:::-;8957:97;;;;8753:311;9103:2;9129:50;9171:7;9162:6;9151:9;9147:22;9129:50;:::i;:::-;9119:60;;9074:115;8614:582;;;;;:::o;9202:323::-;9258:6;9307:2;9295:9;9286:7;9282:23;9278:32;9275:2;;;9313:79;;:::i;:::-;9275:2;9433:1;9458:50;9500:7;9491:6;9480:9;9476:22;9458:50;:::i;:::-;9448:60;;9404:114;9265:260;;;;:::o;9531:524::-;9611:6;9660:2;9648:9;9639:7;9635:23;9631:32;9628:2;;;9666:79;;:::i;:::-;9628:2;9807:1;9796:9;9792:17;9786:24;9837:18;9829:6;9826:30;9823:2;;;9859:79;;:::i;:::-;9823:2;9964:74;10030:7;10021:6;10010:9;10006:22;9964:74;:::i;:::-;9954:84;;9757:291;9618:437;;;;:::o;10061:404::-;10157:6;10206:3;10194:9;10185:7;10181:23;10177:33;10174:2;;;10213:79;;:::i;:::-;10174:2;10333:1;10358:90;10440:7;10431:6;10420:9;10416:22;10358:90;:::i;:::-;10348:100;;10304:154;10164:301;;;;:::o;10471:329::-;10530:6;10579:2;10567:9;10558:7;10554:23;10550:32;10547:2;;;10585:79;;:::i;:::-;10547:2;10705:1;10730:53;10775:7;10766:6;10755:9;10751:22;10730:53;:::i;:::-;10720:63;;10676:117;10537:263;;;;:::o;10806:474::-;10874:6;10882;10931:2;10919:9;10910:7;10906:23;10902:32;10899:2;;;10937:79;;:::i;:::-;10899:2;11057:1;11082:53;11127:7;11118:6;11107:9;11103:22;11082:53;:::i;:::-;11072:63;;11028:117;11184:2;11210:53;11255:7;11246:6;11235:9;11231:22;11210:53;:::i;:::-;11200:63;;11155:118;10889:391;;;;;:::o;11286:327::-;11344:6;11393:2;11381:9;11372:7;11368:23;11364:32;11361:2;;;11399:79;;:::i;:::-;11361:2;11519:1;11544:52;11588:7;11579:6;11568:9;11564:22;11544:52;:::i;:::-;11534:62;;11490:116;11351:262;;;;:::o;11619:118::-;11706:24;11724:5;11706:24;:::i;:::-;11701:3;11694:37;11684:53;;:::o;11743:157::-;11848:45;11868:24;11886:5;11868:24;:::i;:::-;11848:45;:::i;:::-;11843:3;11836:58;11826:74;;:::o;11906:109::-;11987:21;12002:5;11987:21;:::i;:::-;11982:3;11975:34;11965:50;;:::o;12021:157::-;12126:45;12146:24;12164:5;12146:24;:::i;:::-;12126:45;:::i;:::-;12121:3;12114:58;12104:74;;:::o;12184:115::-;12269:23;12286:5;12269:23;:::i;:::-;12264:3;12257:36;12247:52;;:::o;12305:155::-;12404:49;12447:5;12404:49;:::i;:::-;12399:3;12392:62;12382:78;;:::o;12466:173::-;12574:58;12626:5;12574:58;:::i;:::-;12569:3;12562:71;12552:87;;:::o;12645:147::-;12740:45;12779:5;12740:45;:::i;:::-;12735:3;12728:58;12718:74;;:::o;12798:364::-;12886:3;12914:39;12947:5;12914:39;:::i;:::-;12969:71;13033:6;13028:3;12969:71;:::i;:::-;12962:78;;13049:52;13094:6;13089:3;13082:4;13075:5;13071:16;13049:52;:::i;:::-;13126:29;13148:6;13126:29;:::i;:::-;13121:3;13117:39;13110:46;;12890:272;;;;;:::o;13168:366::-;13310:3;13331:67;13395:2;13390:3;13331:67;:::i;:::-;13324:74;;13407:93;13496:3;13407:93;:::i;:::-;13525:2;13520:3;13516:12;13509:19;;13314:220;;;:::o;13540:366::-;13682:3;13703:67;13767:2;13762:3;13703:67;:::i;:::-;13696:74;;13779:93;13868:3;13779:93;:::i;:::-;13897:2;13892:3;13888:12;13881:19;;13686:220;;;:::o;13912:366::-;14054:3;14075:67;14139:2;14134:3;14075:67;:::i;:::-;14068:74;;14151:93;14240:3;14151:93;:::i;:::-;14269:2;14264:3;14260:12;14253:19;;14058:220;;;:::o;14284:366::-;14426:3;14447:67;14511:2;14506:3;14447:67;:::i;:::-;14440:74;;14523:93;14612:3;14523:93;:::i;:::-;14641:2;14636:3;14632:12;14625:19;;14430:220;;;:::o;14656:365::-;14798:3;14819:66;14883:1;14878:3;14819:66;:::i;:::-;14812:73;;14894:93;14983:3;14894:93;:::i;:::-;15012:2;15007:3;15003:12;14996:19;;14802:219;;;:::o;15027:366::-;15169:3;15190:67;15254:2;15249:3;15190:67;:::i;:::-;15183:74;;15266:93;15355:3;15266:93;:::i;:::-;15384:2;15379:3;15375:12;15368:19;;15173:220;;;:::o;15399:366::-;15541:3;15562:67;15626:2;15621:3;15562:67;:::i;:::-;15555:74;;15638:93;15727:3;15638:93;:::i;:::-;15756:2;15751:3;15747:12;15740:19;;15545:220;;;:::o;15771:366::-;15913:3;15934:67;15998:2;15993:3;15934:67;:::i;:::-;15927:74;;16010:93;16099:3;16010:93;:::i;:::-;16128:2;16123:3;16119:12;16112:19;;15917:220;;;:::o;16143:366::-;16285:3;16306:67;16370:2;16365:3;16306:67;:::i;:::-;16299:74;;16382:93;16471:3;16382:93;:::i;:::-;16500:2;16495:3;16491:12;16484:19;;16289:220;;;:::o;16515:366::-;16657:3;16678:67;16742:2;16737:3;16678:67;:::i;:::-;16671:74;;16754:93;16843:3;16754:93;:::i;:::-;16872:2;16867:3;16863:12;16856:19;;16661:220;;;:::o;16887:366::-;17029:3;17050:67;17114:2;17109:3;17050:67;:::i;:::-;17043:74;;17126:93;17215:3;17126:93;:::i;:::-;17244:2;17239:3;17235:12;17228:19;;17033:220;;;:::o;17259:366::-;17401:3;17422:67;17486:2;17481:3;17422:67;:::i;:::-;17415:74;;17498:93;17587:3;17498:93;:::i;:::-;17616:2;17611:3;17607:12;17600:19;;17405:220;;;:::o;17631:362::-;17772:3;17793:65;17856:1;17851:3;17793:65;:::i;:::-;17786:72;;17867:93;17956:3;17867:93;:::i;:::-;17985:1;17980:3;17976:11;17969:18;;17776:217;;;:::o;17999:366::-;18141:3;18162:67;18226:2;18221:3;18162:67;:::i;:::-;18155:74;;18238:93;18327:3;18238:93;:::i;:::-;18356:2;18351:3;18347:12;18340:19;;18145:220;;;:::o;18371:366::-;18513:3;18534:67;18598:2;18593:3;18534:67;:::i;:::-;18527:74;;18610:93;18699:3;18610:93;:::i;:::-;18728:2;18723:3;18719:12;18712:19;;18517:220;;;:::o;18743:366::-;18885:3;18906:67;18970:2;18965:3;18906:67;:::i;:::-;18899:74;;18982:93;19071:3;18982:93;:::i;:::-;19100:2;19095:3;19091:12;19084:19;;18889:220;;;:::o;19115:118::-;19202:24;19220:5;19202:24;:::i;:::-;19197:3;19190:37;19180:53;;:::o;19239:157::-;19344:45;19364:24;19382:5;19364:24;:::i;:::-;19344:45;:::i;:::-;19339:3;19332:58;19322:74;;:::o;19402:129::-;19488:36;19518:5;19488:36;:::i;:::-;19483:3;19476:49;19466:65;;:::o;19537:115::-;19622:23;19639:5;19622:23;:::i;:::-;19617:3;19610:36;19600:52;;:::o;19658:112::-;19741:22;19757:5;19741:22;:::i;:::-;19736:3;19729:35;19719:51;;:::o;19776:679::-;19972:3;19987:75;20058:3;20049:6;19987:75;:::i;:::-;20087:2;20082:3;20078:12;20071:19;;20100:75;20171:3;20162:6;20100:75;:::i;:::-;20200:2;20195:3;20191:12;20184:19;;20213:75;20284:3;20275:6;20213:75;:::i;:::-;20313:2;20308:3;20304:12;20297:19;;20326:75;20397:3;20388:6;20326:75;:::i;:::-;20426:2;20421:3;20417:12;20410:19;;20446:3;20439:10;;19976:479;;;;;;;:::o;20461:222::-;20554:4;20592:2;20581:9;20577:18;20569:26;;20605:71;20673:1;20662:9;20658:17;20649:6;20605:71;:::i;:::-;20559:124;;;;:::o;20689:748::-;20938:4;20976:3;20965:9;20961:19;20953:27;;20990:71;21058:1;21047:9;21043:17;21034:6;20990:71;:::i;:::-;21071:72;21139:2;21128:9;21124:18;21115:6;21071:72;:::i;:::-;21153;21221:2;21210:9;21206:18;21197:6;21153:72;:::i;:::-;21272:9;21266:4;21262:20;21257:2;21246:9;21242:18;21235:48;21300:130;21425:4;21300:130;:::i;:::-;21292:138;;20943:494;;;;;;:::o;21443:440::-;21591:4;21629:2;21618:9;21614:18;21606:26;;21642:71;21710:1;21699:9;21695:17;21686:6;21642:71;:::i;:::-;21723:72;21791:2;21780:9;21776:18;21767:6;21723:72;:::i;:::-;21805:71;21872:2;21861:9;21857:18;21848:6;21805:71;:::i;:::-;21596:287;;;;;;:::o;21889:332::-;22010:4;22048:2;22037:9;22033:18;22025:26;;22061:71;22129:1;22118:9;22114:17;22105:6;22061:71;:::i;:::-;22142:72;22210:2;22199:9;22195:18;22186:6;22142:72;:::i;:::-;22015:206;;;;;:::o;22227:442::-;22376:4;22414:2;22403:9;22399:18;22391:26;;22427:71;22495:1;22484:9;22480:17;22471:6;22427:71;:::i;:::-;22508:72;22576:2;22565:9;22561:18;22552:6;22508:72;:::i;:::-;22590;22658:2;22647:9;22643:18;22634:6;22590:72;:::i;:::-;22381:288;;;;;;:::o;22675:438::-;22822:4;22860:2;22849:9;22845:18;22837:26;;22873:71;22941:1;22930:9;22926:17;22917:6;22873:71;:::i;:::-;22954:70;23020:2;23009:9;23005:18;22996:6;22954:70;:::i;:::-;23034:72;23102:2;23091:9;23087:18;23078:6;23034:72;:::i;:::-;22827:286;;;;;;:::o;23119:210::-;23206:4;23244:2;23233:9;23229:18;23221:26;;23257:65;23319:1;23308:9;23304:17;23295:6;23257:65;:::i;:::-;23211:118;;;;:::o;23335:218::-;23426:4;23464:2;23453:9;23449:18;23441:26;;23477:69;23543:1;23532:9;23528:17;23519:6;23477:69;:::i;:::-;23431:122;;;;:::o;23559:246::-;23664:4;23702:2;23691:9;23687:18;23679:26;;23715:83;23795:1;23784:9;23780:17;23771:6;23715:83;:::i;:::-;23669:136;;;;:::o;23811:264::-;23925:4;23963:2;23952:9;23948:18;23940:26;;23976:92;24065:1;24054:9;24050:17;24041:6;23976:92;:::i;:::-;23930:145;;;;:::o;24081:313::-;24194:4;24232:2;24221:9;24217:18;24209:26;;24281:9;24275:4;24271:20;24267:1;24256:9;24252:17;24245:47;24309:78;24382:4;24373:6;24309:78;:::i;:::-;24301:86;;24199:195;;;;:::o;24400:419::-;24566:4;24604:2;24593:9;24589:18;24581:26;;24653:9;24647:4;24643:20;24639:1;24628:9;24624:17;24617:47;24681:131;24807:4;24681:131;:::i;:::-;24673:139;;24571:248;;;:::o;24825:419::-;24991:4;25029:2;25018:9;25014:18;25006:26;;25078:9;25072:4;25068:20;25064:1;25053:9;25049:17;25042:47;25106:131;25232:4;25106:131;:::i;:::-;25098:139;;24996:248;;;:::o;25250:419::-;25416:4;25454:2;25443:9;25439:18;25431:26;;25503:9;25497:4;25493:20;25489:1;25478:9;25474:17;25467:47;25531:131;25657:4;25531:131;:::i;:::-;25523:139;;25421:248;;;:::o;25675:419::-;25841:4;25879:2;25868:9;25864:18;25856:26;;25928:9;25922:4;25918:20;25914:1;25903:9;25899:17;25892:47;25956:131;26082:4;25956:131;:::i;:::-;25948:139;;25846:248;;;:::o;26100:419::-;26266:4;26304:2;26293:9;26289:18;26281:26;;26353:9;26347:4;26343:20;26339:1;26328:9;26324:17;26317:47;26381:131;26507:4;26381:131;:::i;:::-;26373:139;;26271:248;;;:::o;26525:419::-;26691:4;26729:2;26718:9;26714:18;26706:26;;26778:9;26772:4;26768:20;26764:1;26753:9;26749:17;26742:47;26806:131;26932:4;26806:131;:::i;:::-;26798:139;;26696:248;;;:::o;26950:419::-;27116:4;27154:2;27143:9;27139:18;27131:26;;27203:9;27197:4;27193:20;27189:1;27178:9;27174:17;27167:47;27231:131;27357:4;27231:131;:::i;:::-;27223:139;;27121:248;;;:::o;27375:419::-;27541:4;27579:2;27568:9;27564:18;27556:26;;27628:9;27622:4;27618:20;27614:1;27603:9;27599:17;27592:47;27656:131;27782:4;27656:131;:::i;:::-;27648:139;;27546:248;;;:::o;27800:419::-;27966:4;28004:2;27993:9;27989:18;27981:26;;28053:9;28047:4;28043:20;28039:1;28028:9;28024:17;28017:47;28081:131;28207:4;28081:131;:::i;:::-;28073:139;;27971:248;;;:::o;28225:419::-;28391:4;28429:2;28418:9;28414:18;28406:26;;28478:9;28472:4;28468:20;28464:1;28453:9;28449:17;28442:47;28506:131;28632:4;28506:131;:::i;:::-;28498:139;;28396:248;;;:::o;28650:419::-;28816:4;28854:2;28843:9;28839:18;28831:26;;28903:9;28897:4;28893:20;28889:1;28878:9;28874:17;28867:47;28931:131;29057:4;28931:131;:::i;:::-;28923:139;;28821:248;;;:::o;29075:419::-;29241:4;29279:2;29268:9;29264:18;29256:26;;29328:9;29322:4;29318:20;29314:1;29303:9;29299:17;29292:47;29356:131;29482:4;29356:131;:::i;:::-;29348:139;;29246:248;;;:::o;29500:419::-;29666:4;29704:2;29693:9;29689:18;29681:26;;29753:9;29747:4;29743:20;29739:1;29728:9;29724:17;29717:47;29781:131;29907:4;29781:131;:::i;:::-;29773:139;;29671:248;;;:::o;29925:419::-;30091:4;30129:2;30118:9;30114:18;30106:26;;30178:9;30172:4;30168:20;30164:1;30153:9;30149:17;30142:47;30206:131;30332:4;30206:131;:::i;:::-;30198:139;;30096:248;;;:::o;30350:419::-;30516:4;30554:2;30543:9;30539:18;30531:26;;30603:9;30597:4;30593:20;30589:1;30578:9;30574:17;30567:47;30631:131;30757:4;30631:131;:::i;:::-;30623:139;;30521:248;;;:::o;30775:222::-;30868:4;30906:2;30895:9;30891:18;30883:26;;30919:71;30987:1;30976:9;30972:17;30963:6;30919:71;:::i;:::-;30873:124;;;;:::o;31003:446::-;31154:4;31192:2;31181:9;31177:18;31169:26;;31205:71;31273:1;31262:9;31258:17;31249:6;31205:71;:::i;:::-;31286:80;31362:2;31351:9;31347:18;31338:6;31286:80;:::i;:::-;31376:66;31438:2;31427:9;31423:18;31414:6;31376:66;:::i;:::-;31159:290;;;;;;:::o;31455:430::-;31598:4;31636:2;31625:9;31621:18;31613:26;;31649:71;31717:1;31706:9;31702:17;31693:6;31649:71;:::i;:::-;31730:72;31798:2;31787:9;31783:18;31774:6;31730:72;:::i;:::-;31812:66;31874:2;31863:9;31859:18;31850:6;31812:66;:::i;:::-;31603:282;;;;;;:::o;31891:220::-;31983:4;32021:2;32010:9;32006:18;31998:26;;32034:70;32101:1;32090:9;32086:17;32077:6;32034:70;:::i;:::-;31988:123;;;;:::o;32117:214::-;32206:4;32244:2;32233:9;32229:18;32221:26;;32257:67;32321:1;32310:9;32306:17;32297:6;32257:67;:::i;:::-;32211:120;;;;:::o;32337:129::-;32371:6;32398:20;;:::i;:::-;32388:30;;32427:33;32455:4;32447:6;32427:33;:::i;:::-;32378:88;;;:::o;32472:75::-;32505:6;32538:2;32532:9;32522:19;;32512:35;:::o;32553:308::-;32615:4;32705:18;32697:6;32694:30;32691:2;;;32727:18;;:::i;:::-;32691:2;32765:29;32787:6;32765:29;:::i;:::-;32757:37;;32849:4;32843;32839:15;32831:23;;32620:241;;;:::o;32867:99::-;32919:6;32953:5;32947:12;32937:22;;32926:40;;;:::o;32972:168::-;33055:11;33089:6;33084:3;33077:19;33129:4;33124:3;33120:14;33105:29;;33067:73;;;;:::o;33146:169::-;33230:11;33264:6;33259:3;33252:19;33304:4;33299:3;33295:14;33280:29;;33242:73;;;;:::o;33321:305::-;33361:3;33380:20;33398:1;33380:20;:::i;:::-;33375:25;;33414:20;33432:1;33414:20;:::i;:::-;33409:25;;33568:1;33500:66;33496:74;33493:1;33490:81;33487:2;;;33574:18;;:::i;:::-;33487:2;33618:1;33615;33611:9;33604:16;;33365:261;;;;:::o;33632:185::-;33672:1;33689:20;33707:1;33689:20;:::i;:::-;33684:25;;33723:20;33741:1;33723:20;:::i;:::-;33718:25;;33762:1;33752:2;;33767:18;;:::i;:::-;33752:2;33809:1;33806;33802:9;33797:14;;33674:143;;;;:::o;33823:348::-;33863:7;33886:20;33904:1;33886:20;:::i;:::-;33881:25;;33920:20;33938:1;33920:20;:::i;:::-;33915:25;;34108:1;34040:66;34036:74;34033:1;34030:81;34025:1;34018:9;34011:17;34007:105;34004:2;;;34115:18;;:::i;:::-;34004:2;34163:1;34160;34156:9;34145:20;;33871:300;;;;:::o;34177:191::-;34217:4;34237:20;34255:1;34237:20;:::i;:::-;34232:25;;34271:20;34289:1;34271:20;:::i;:::-;34266:25;;34310:1;34307;34304:8;34301:2;;;34315:18;;:::i;:::-;34301:2;34360:1;34357;34353:9;34345:17;;34222:146;;;;:::o;34374:185::-;34412:4;34432:18;34448:1;34432:18;:::i;:::-;34427:23;;34464:18;34480:1;34464:18;:::i;:::-;34459:23;;34501:1;34498;34495:8;34492:2;;;34506:18;;:::i;:::-;34492:2;34551:1;34548;34544:9;34536:17;;34417:142;;;;:::o;34565:96::-;34602:7;34631:24;34649:5;34631:24;:::i;:::-;34620:35;;34610:51;;;:::o;34667:90::-;34701:7;34744:5;34737:13;34730:21;34719:32;;34709:48;;;:::o;34763:77::-;34800:7;34829:5;34818:16;;34808:32;;;:::o;34846:149::-;34882:7;34922:66;34915:5;34911:78;34900:89;;34890:105;;;:::o;35001:126::-;35038:7;35078:42;35071:5;35067:54;35056:65;;35046:81;;;:::o;35133:77::-;35170:7;35199:5;35188:16;;35178:32;;;:::o;35216:93::-;35252:7;35292:10;35285:5;35281:22;35270:33;;35260:49;;;:::o;35315:86::-;35350:7;35390:4;35383:5;35379:16;35368:27;;35358:43;;;:::o;35407:150::-;35469:9;35502:49;35545:5;35502:49;:::i;:::-;35489:62;;35479:78;;;:::o;35563:125::-;35625:9;35658:24;35676:5;35658:24;:::i;:::-;35645:37;;35635:53;;;:::o;35694:168::-;35765:9;35798:58;35850:5;35798:58;:::i;:::-;35785:71;;35775:87;;;:::o;35868:134::-;35939:9;35972:24;35990:5;35972:24;:::i;:::-;35959:37;;35949:53;;;:::o;36008:121::-;36066:9;36099:24;36117:5;36099:24;:::i;:::-;36086:37;;36076:53;;;:::o;36135:111::-;36184:9;36217:23;36234:5;36217:23;:::i;:::-;36204:36;;36194:52;;;:::o;36252:307::-;36320:1;36330:113;36344:6;36341:1;36338:13;36330:113;;;36429:1;36424:3;36420:11;36414:18;36410:1;36405:3;36401:11;36394:39;36366:2;36363:1;36359:10;36354:15;;36330:113;;;36461:6;36458:1;36455:13;36452:2;;;36541:1;36532:6;36527:3;36523:16;36516:27;36452:2;36301:258;;;;:::o;36565:281::-;36648:27;36670:4;36648:27;:::i;:::-;36640:6;36636:40;36778:6;36766:10;36763:22;36742:18;36730:10;36727:34;36724:62;36721:2;;;36789:18;;:::i;:::-;36721:2;36829:10;36825:2;36818:22;36608:238;;;:::o;36852:233::-;36891:3;36914:24;36932:5;36914:24;:::i;:::-;36905:33;;36960:66;36953:5;36950:77;36947:2;;;37030:18;;:::i;:::-;36947:2;37077:1;37070:5;37066:13;37059:20;;36895:190;;;:::o;37091:100::-;37130:7;37159:26;37179:5;37159:26;:::i;:::-;37148:37;;37138:53;;;:::o;37197:79::-;37236:7;37265:5;37254:16;;37244:32;;;:::o;37282:94::-;37321:7;37350:20;37364:5;37350:20;:::i;:::-;37339:31;;37329:47;;;:::o;37382:79::-;37421:7;37450:5;37439:16;;37429:32;;;:::o;37467:176::-;37499:1;37516:20;37534:1;37516:20;:::i;:::-;37511:25;;37550:20;37568:1;37550:20;:::i;:::-;37545:25;;37589:1;37579:2;;37594:18;;:::i;:::-;37579:2;37635:1;37632;37628:9;37623:14;;37501:142;;;;:::o;37649:180::-;37697:77;37694:1;37687:88;37794:4;37791:1;37784:15;37818:4;37815:1;37808:15;37835:180;37883:77;37880:1;37873:88;37980:4;37977:1;37970:15;38004:4;38001:1;37994:15;38021:180;38069:77;38066:1;38059:88;38166:4;38163:1;38156:15;38190:4;38187:1;38180:15;38207:180;38255:77;38252:1;38245:88;38352:4;38349:1;38342:15;38376:4;38373:1;38366:15;38393:180;38441:77;38438:1;38431:88;38538:4;38535:1;38528:15;38562:4;38559:1;38552:15;38579:117;38688:1;38685;38678:12;38702:117;38811:1;38808;38801:12;38825:117;38934:1;38931;38924:12;39071:117;39180:1;39177;39170:12;39194:117;39303:1;39300;39293:12;39317:117;39426:1;39423;39416:12;39440:117;39549:1;39546;39539:12;39563:102;39604:6;39655:2;39651:7;39646:2;39639:5;39635:14;39631:28;39621:38;;39611:54;;;:::o;39671:94::-;39704:8;39752:5;39748:2;39744:14;39723:35;;39713:52;;;:::o;39771:170::-;39911:22;39907:1;39899:6;39895:14;39888:46;39877:64;:::o;39947:230::-;40087:34;40083:1;40075:6;40071:14;40064:58;40156:13;40151:2;40143:6;40139:15;40132:38;40053:124;:::o;40183:173::-;40323:25;40319:1;40311:6;40307:14;40300:49;40289:67;:::o;40362:225::-;40502:34;40498:1;40490:6;40486:14;40479:58;40571:8;40566:2;40558:6;40554:15;40547:33;40468:119;:::o;40593:158::-;40733:10;40729:1;40721:6;40717:14;40710:34;40699:52;:::o;40757:165::-;40897:17;40893:1;40885:6;40881:14;40874:41;40863:59;:::o;40928:223::-;41068:34;41064:1;41056:6;41052:14;41045:58;41137:6;41132:2;41124:6;41120:15;41113:31;41034:117;:::o;41157:168::-;41297:20;41293:1;41285:6;41281:14;41274:44;41263:62;:::o;41331:166::-;41471:18;41467:1;41459:6;41455:14;41448:42;41437:60;:::o;41503:229::-;41643:34;41639:1;41631:6;41627:14;41620:58;41712:12;41707:2;41699:6;41695:15;41688:37;41609:123;:::o;41738:182::-;41878:34;41874:1;41866:6;41862:14;41855:58;41844:76;:::o;41926:176::-;42066:28;42062:1;42054:6;42050:14;42043:52;42032:70;:::o;42108:114::-;42214:8;:::o;42228:176::-;42368:28;42364:1;42356:6;42352:14;42345:52;42334:70;:::o;42410:231::-;42550:34;42546:1;42538:6;42534:14;42527:58;42619:14;42614:2;42606:6;42602:15;42595:39;42516:125;:::o;42647:163::-;42787:15;42783:1;42775:6;42771:14;42764:39;42753:57;:::o;42816:122::-;42889:24;42907:5;42889:24;:::i;:::-;42882:5;42879:35;42869:2;;42928:1;42925;42918:12;42869:2;42859:79;:::o;42944:116::-;43014:21;43029:5;43014:21;:::i;:::-;43007:5;43004:32;42994:2;;43050:1;43047;43040:12;42994:2;42984:76;:::o;43066:122::-;43139:24;43157:5;43139:24;:::i;:::-;43132:5;43129:35;43119:2;;43178:1;43175;43168:12;43119:2;43109:79;:::o;43194:120::-;43266:23;43283:5;43266:23;:::i;:::-;43259:5;43256:34;43246:2;;43304:1;43301;43294:12;43246:2;43236:78;:::o;43320:118::-;43391:22;43407:5;43391:22;:::i;:::-;43384:5;43381:33;43371:2;;43428:1;43425;43418:12;43371:2;43361:77;:::o

Swarm Source

ipfs://3adaf5c6aa29c3330c78b0ad5b5ceb41f68a6b22a4f892e178a77998c020c40a
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.