ETH Price: $2,392.07 (+2.87%)

Token

Doomsday: Settlers of the Wasteland (SETTLEMENT)
 

Overview

Max Total Supply

0 SETTLEMENT

Holders

0

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
myartmyrules.eth
Balance
0 SETTLEMENT
0xc2c2d3f485dd68348f52fb8b135f6b3f1130189f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DoomsdaySettlersV2

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : DoomsdaySettlersV2.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.21;

import "./interfaces/IERC721TokenReceiver.sol";
import "./interfaces/IDoomsdaySettlersDarkAge.sol";
import "./interfaces/IDoomsdaySettlersMetadata.sol";
import "./interfaces/IDoomsdaySettlersBlacklist.sol";

contract DoomsdaySettlersV2 {

    struct Settlement{
        uint32 settleBlock;
        uint24 supplyAtMint;
        uint16 age;
        uint8 settlementType;
        uint80 relics;
        uint80 supplies;
    }

    uint80 constant CREATOR_PERCENT = 15;
    uint80 constant DESTRUCTION_FEE = 0.01 ether;
    uint80 constant DAMAGE_FEE      = 0.008 ether;
    uint80 constant REINFORCE_PERCENT_WINNER  = 85;
    uint80 constant REINFORCE_PERCENT_CREATOR = 15;
    uint256 constant BLOCK_TIME = 12 seconds;
    uint256 constant DISASTER_BLOCK_INTERVAL = 75;

    uint256 immutable BASE_DIFFICULTY;
    uint256 immutable DIFFICULTY_RAMP;
    uint256 immutable DIFFICULTY_COOLDOWN;
    uint256 immutable DIFFICULTY_COOLDOWN_SLOPE;
    address immutable DARK_AGE;
    uint256 immutable COLLAPSE_INITIAL;
    uint256 immutable COLLAPSE_RAMP;
    uint256 immutable COLLAPSE_MIN;



    uint16 age = 2;
    uint32 firstSettlement;

    uint32 abandoned;


    bool itIsTheDawnOfANewAge;

    address public owner;
    address creator;
    uint80 supplies;
    uint80 relics;

    uint80 mintFee;
    uint80 creatorEarnings;
    bytes32[] hashes;
    uint32[] public destroyed;

    mapping( uint32 => Settlement) public settlements;

    event Settle(uint32 _tokenId, bytes32 _hash, address _settler, uint24 _newSupply, uint80 _newMintFee, uint32 _collapseBlock, uint8 _settlementType, address indexed _data, uint32 _blockNumber);
    event Abandon(uint32 indexed _tokenId, bytes32 _hash, uint80 _growth, uint24 _supplyAtMint, uint32 _newAbandoned, uint80 _newMintFee, uint80 _eth, uint32 _settled, bool _itIsTheDawnOfANewAge, uint32 _blockNumber);
    event Reinforce(uint32 indexed _tokenId, uint8 _type);
    event Disaster(uint32 indexed _tokenId, uint8 _type, bool _destroyed, bool _darkAgeOver);

    constructor(
        address _darkAge,
        uint256 _BASE_DIFFICULTY,
        uint256 _DIFFICULTY_RAMP,
        uint256 _DIFFICULTY_COOLDOWN,
        uint256 _DIFFICULTY_COOLDOWN_SLOPE,
        uint256 _COLLAPSE_INITIAL,
        uint256 _COLLAPSE_RAMP,
        uint256 _COLLAPSE_MIN
    ) payable {

        BASE_DIFFICULTY     = _BASE_DIFFICULTY;
        DIFFICULTY_RAMP     = _DIFFICULTY_RAMP;
        DIFFICULTY_COOLDOWN = _DIFFICULTY_COOLDOWN;
        DIFFICULTY_COOLDOWN_SLOPE = _DIFFICULTY_COOLDOWN_SLOPE;
        COLLAPSE_INITIAL    = _COLLAPSE_INITIAL;
        COLLAPSE_RAMP       = _COLLAPSE_RAMP;
        COLLAPSE_MIN        = _COLLAPSE_MIN;

        DARK_AGE = _darkAge;

        require(msg.value == DESTRUCTION_FEE,"destruction");

        // ERC165 stuff
        supportsInterface[0x80ac58cd] = true; //ERC721
        supportsInterface[0x5b5e139f] = true; //ERC721Metadata
        supportsInterface[0x01ffc9a7] = true; //ERC165

        owner = msg.sender;
        creator = msg.sender;

        bytes32 _hash = blockhash(block.number - 1);
        uint256 _settlementType = settlementType(_hash,0);

        _mint(1,msg.sender,_hash);

        settlements[1] = Settlement(uint32(block.number),0,age,uint8(_settlementType), 0,0);

        mintFee += uint80((uint88(2363029719748390562045450) >> _settlementType * 9)%uint88(512))  * uint80(0.000001 ether);
        firstSettlement = 1;
    }

    function _settle(uint32 tokenId, bytes32 _hash, uint32 index, uint supply, uint32 collapseBlock, address data) internal returns(uint cost){

        cost = uint256(mintFee) + DESTRUCTION_FEE;
        uint80 creatorFee = uint80(cost * CREATOR_PERCENT / 100);
        creatorEarnings += creatorFee;
        cost += creatorFee;

        bytes32 hash = keccak256(abi.encodePacked(
                _hash,
                index
            ));

        uint8 _settlementType = uint8(settlementType(hash,supply));

        hash = keccak256(abi.encodePacked(hash,block.prevrandao));

        settlements[tokenId] = Settlement( uint32(block.number), uint24(supply), age, _settlementType, 0, 0);

        relics += mintFee/2;

        mintFee +=    uint80((uint88(2363029719748390562045450) >> _settlementType * 9)%uint88(512))  * uint80(0.000001 ether);

        _mint(tokenId,msg.sender,hash);

        emit Settle(tokenId, hash, msg.sender, uint24(supply + 1), mintFee, collapseBlock, _settlementType,  data, uint32(block.number));

        return cost;

    }

    function settle(uint256 location, uint8 count, address data) external payable {
        require(!isDarkAge(),"dark age");
        require(count != 0,"count min");
        require(count <= 20,"count max");

        unchecked{
            require(address(this).balance < type(uint80).max,"balance overflow");

            uint32 tokenId = uint32(hashes.length + 1);

            if(itIsTheDawnOfANewAge){
                ++age;
                firstSettlement = tokenId;
                itIsTheDawnOfANewAge = false;
            }

            uint256 supply = (hashes.length - destroyed.length - abandoned);
            uint256 difficulty = BASE_DIFFICULTY - (DIFFICULTY_RAMP * supply);
            uint256 lastSettleBlock = settlements[uint32(hashes.length )].settleBlock;

            require(block.number > lastSettleBlock,"lastSettleBlock");
            uint256 blockDif = (block.number - lastSettleBlock);

            if(blockDif < DIFFICULTY_COOLDOWN){
                difficulty /= DIFFICULTY_COOLDOWN_SLOPE * (DIFFICULTY_COOLDOWN - blockDif);
            }

            bytes32 hash = keccak256(abi.encodePacked(
                    msg.sender,
                    hashes[hashes.length - 1],
                    location
                ));

            require(uint256(hash) < difficulty,"difficulty");

            uint32 collapseBlock;
            if((supply + count) * COLLAPSE_RAMP <  COLLAPSE_INITIAL - COLLAPSE_MIN){
                collapseBlock = uint32(block.number + (COLLAPSE_INITIAL - (supply + count) * COLLAPSE_RAMP) / BLOCK_TIME);
            } else{
                collapseBlock = uint32(block.number + COLLAPSE_MIN / BLOCK_TIME);
            }

            uint256 cost;
            for(uint32 i = 0; i < uint32(count); ++i){
                cost += _settle(tokenId + i, hash,i,supply + i,collapseBlock,data);
            }

            require(msg.value >= cost,"cost");
            require(gasleft() > 10000,"gas");
            if(msg.value > cost){
                payable(msg.sender).transfer(msg.value - cost);
            }
        }
    }

    function abandon(uint32[] calldata _tokenIds, uint32 _data) external {
        unchecked{
            require(_tokenIds.length != 0,"tokenIds");
            uint256 total;
            for(uint256 i = 0; i < _tokenIds.length; ++i){
                total += _abandon(_tokenIds[i],_data);
            }
            payable(msg.sender).transfer(total);
        }
    }

    function confirmDisaster(uint32 _tokenId, uint32 _data) external {
        require(isDarkAge(),"dark age");
        require(_isValidToken(_tokenId),"invalid");
        uint256 eliminationWindow = (block.number % DISASTER_BLOCK_INTERVAL);

        if(eliminationWindow < 25){
            require(msg.sender == ownerOf(_tokenId),"owner");
        }else if(eliminationWindow < 50){
            require(balanceOf[msg.sender] != 0,"balance");
        }

        uint8 _type;
        bool _destroyed;

        uint minted = hashes.length;
        uint supply = minted - destroyed.length - abandoned;

        unchecked{
            (_type, _destroyed) =
                IDoomsdaySettlersDarkAge(DARK_AGE).disaster(_tokenId, supply);
        }

        bool darkAgeOver = false;
        uint80 disaster_fee;

        if(_destroyed){
            unchecked{
                uint80 tokenFee = uint80((uint88(2363029719748390562045450) >> settlements[_tokenId].settlementType * 9)%uint88(512))  * uint80(0.000001 ether);
                uint80 growth;
                if(_tokenId >= firstSettlement){
                    growth = uint80(minted - _tokenId);
                }else{
                    growth = uint80(minted - firstSettlement) + 1;
                }
                uint80 _relics = growth * tokenFee;

                relics += _relics/2 +
                    settlements[_tokenId].relics +
                    settlements[_tokenId].supplies +
                    IDoomsdaySettlersDarkAge(DARK_AGE).getUnusedFees(_tokenId) * DAMAGE_FEE;

                destroyed.push(_tokenId);

                _burn(_tokenId);
                --supply;

                if(supply == 1){
                    _processWinner(_data);
                    darkAgeOver = true;
                }
            }

            disaster_fee = DESTRUCTION_FEE;
        }else{
            disaster_fee = DAMAGE_FEE;
        }

        emit Disaster(_tokenId,_type, _destroyed, darkAgeOver);
        payable(msg.sender).transfer(disaster_fee);
    }

    function reinforce(uint32 _tokenId, bool[4] memory _resources) external payable{
        require(msg.sender == ownerOf(_tokenId),"ownerOf");
        unchecked{
            require(address(this).balance < type(uint80).max,"balance overflow");
            uint80 cost = IDoomsdaySettlersDarkAge(DARK_AGE).reinforce(
                _tokenId,
                hashOf(_tokenId),
                _resources,
                isDarkAge()
            );
            uint80 total;
            for(uint256 i = 0; i < 4; ++i){
                if(_resources[i]){
                    total += DAMAGE_FEE;
                    emit Reinforce(_tokenId,uint8(i));
                }
            }
            require(total != 0,"empty");

            cost *= mintFee / uint80(4);
            total += cost;

            require(total <= msg.value,"msg.value");

            creatorEarnings += cost * REINFORCE_PERCENT_CREATOR / 100;
            supplies        += cost * REINFORCE_PERCENT_WINNER  / 100;

            require(gasleft() > 10000,"gas");
            if(msg.value > total){
                payable(msg.sender).transfer(msg.value - total);
            }
        }
    }

    function miningState() external view returns(
        bytes32 _lastHash,
        uint32 _settled,
        uint32 _abandoned,
        uint32 _lastSettleBlock,
        uint32 _collapseBlock,
        uint80 _mintFee,
        uint256 _blockNumber
    ){
        uint256 collapseBlock = settlements[uint32(hashes.length )].settleBlock;
        uint32 collapseSupply = settlements[uint32(hashes.length)].supplyAtMint + 1;

        if(collapseSupply * COLLAPSE_RAMP <  COLLAPSE_INITIAL - COLLAPSE_MIN){
            collapseBlock += ( COLLAPSE_INITIAL - collapseSupply * COLLAPSE_RAMP ) / BLOCK_TIME;
        } else{
            collapseBlock +=  COLLAPSE_MIN / BLOCK_TIME;
        }
        return (
            hashes[hashes.length - 1],
            uint32(hashes.length),
            uint32(destroyed.length) + abandoned,
            settlements[uint32(hashes.length)].settleBlock,
            uint32(collapseBlock),
            mintFee,
            block.number
        );
    }

    function currentState() external view returns(
        bool _itIsTheDawnOfANewAge,
        uint32 _firstSettlement,
        uint16 _age,
        uint80 _creatorEarnings,
        uint80 _relics,
        uint80 _supplies,
        uint256 _blockNumber
    ){
        return (
        itIsTheDawnOfANewAge,
        firstSettlement,
        age,
        creatorEarnings,
        relics,
        supplies,
        block.number
        );
    }


    function settlementType(bytes32 hash, uint256 _supplyAtMint) public pure returns(uint256){
        unchecked{
            uint256 settlementTypeMax = _supplyAtMint / 1000 + 2 ;
            if(settlementTypeMax > 8) settlementTypeMax = 8;
            return (uint256(hash)%100)**2 * ( settlementTypeMax + 1 ) / 1_00_00;
        }
    }

    function isDarkAge() public view returns(bool){
        unchecked{
            uint minted = hashes.length;
            uint256 supply = (minted - destroyed.length - abandoned);
            uint256 collapseBlock = settlements[uint32(minted)].settleBlock;
            uint32 collapseSupply = settlements[uint32(minted)].supplyAtMint + 1;

            if(collapseSupply * COLLAPSE_RAMP <  COLLAPSE_INITIAL - COLLAPSE_MIN){
                collapseBlock += ( COLLAPSE_INITIAL - collapseSupply * COLLAPSE_RAMP ) / BLOCK_TIME;
            } else{
                collapseBlock +=  COLLAPSE_MIN / BLOCK_TIME;
            }
            return supply > 1 && (block.number > collapseBlock );
        }
    }


    function hashOf(uint32 _tokenId) public view returns(bytes32){
        require(_isValidToken(_tokenId),"invalid");
        unchecked{
            return hashes[_tokenId - 1];
        }
    }


    function _processWinner(uint32 _winner) private{
        require(_isValidToken(_winner),"invalid");
        unchecked{
            settlements[_winner].relics     += relics;
            settlements[_winner].supplies   += supplies;

            uint80 tokenFee = uint80((uint88(2363029719748390562045450) >> settlements[_winner].settlementType * 9)%uint88(512))  * uint80(0.000001 ether);
            uint80 growth;
            if(_winner > firstSettlement){
                growth = uint80(hashes.length) - uint80(_winner);
            }else{
                growth = (uint80(hashes.length) - uint80(firstSettlement)) + 1;
            }
            uint80 _relics = growth * tokenFee;
            settlements[_winner].relics += _relics / 2;
            relics = 0;
            supplies = 0;
            mintFee = tokenFee;
            itIsTheDawnOfANewAge = true;
        }
    }

    function _abandon(uint32 _tokenId, uint32 _data) private returns(uint256){
        unchecked{
            require(msg.sender == ownerOf(_tokenId),"ownerOf");
            bytes32 hash = hashes[_tokenId - 1];
            uint80 growth;
            if(_tokenId >= firstSettlement){
                growth = uint80(hashes.length - _tokenId);
            }else{
                growth = uint80(hashes.length) - uint80(firstSettlement) + 1;
            }
            uint80 _relics;
            if(!itIsTheDawnOfANewAge){
                _relics = growth * uint80((uint88(2363029719748390562045450) >> settlements[_tokenId].settlementType * 9)%uint88(512))  * uint80(0.000001 ether);
            }

            bool _isDarkAge = isDarkAge();
            if(_isDarkAge){
                require(!IDoomsdaySettlersDarkAge(DARK_AGE).checkVulnerable(_tokenId),"vulnerable");
                _relics /= 2;
                uint80 __abandoned;
                uint80 __settled;

                if(age > 2){
                    ++__abandoned;
                    ++__settled;
                }

                __abandoned += uint80(destroyed.length + abandoned) - (uint80(firstSettlement) - 1);
                __settled   += uint80(hashes.length) - (uint80(firstSettlement) - 1);

                uint80 spoils = uint80(relics) / uint80(hashes.length - destroyed.length - abandoned)
                    * (10_000_000_000 + ( 30_000_000_000 * __abandoned / __settled  ))  / 40_000_000_000;

                _relics += spoils;
                relics -= spoils;
            }else if(!itIsTheDawnOfANewAge){
                relics -= _relics / 2;
                mintFee -= uint80((uint88(2363029719748390562045450) >> settlements[_tokenId].settlementType * 9)%uint88(512))  * uint80(0.000001 ether);
            }

            ++abandoned;
            _relics +=
                DESTRUCTION_FEE + IDoomsdaySettlersDarkAge(DARK_AGE).getUnusedFees(_tokenId) * DAMAGE_FEE
                    + settlements[_tokenId].relics
                    + settlements[_tokenId].supplies;

            _burn(_tokenId);
            if(_isDarkAge){
                if(hashes.length - destroyed.length - abandoned == 1){
                    _processWinner(_data);
                }
            }
            emit Abandon(
                _tokenId,
                hash,
                growth,
                settlements[_tokenId].supplyAtMint,
                uint32(destroyed.length) + abandoned,
                mintFee,
                _relics,
                uint32(hashes.length),
                itIsTheDawnOfANewAge,
                uint32(block.number)
            );
            return _relics;
        }
    }



    //////===721 Standard
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    //////===721 Implementation

    mapping(address => uint256) public balanceOf;
    mapping (uint256 => address) internal allowance;
    mapping (address => mapping (address => bool)) public isApprovedForAll;

    mapping(uint256 => address) owners;

    //    METADATA VARS
    string constant public name = "Doomsday: Settlers of the Wasteland";
    string constant public symbol = "SETTLEMENT";

    address private __metadata;
    function _mint(uint256 _tokenId,address _to, bytes32 _hash) private{
        unchecked{
            owners[_tokenId] = msg.sender;
            ++balanceOf[_to];
            hashes.push(_hash);
            emit Transfer(address(0),_to,_tokenId);
        }
    }
    function _burn(uint256 _tokenId) private{
    unchecked{
        address _owner = owners[_tokenId];
        --balanceOf[ _owner ];
        delete owners[_tokenId];
        emit Transfer(_owner,address(0),_tokenId);
    }
    }

    function _isValidToken(uint256 _tokenId) internal view returns(bool){
        return owners[_tokenId] != address(0);
    }

    function ownerOf(uint256 _tokenId) public view returns(address){
        require(_isValidToken(_tokenId),"invalid");
        return owners[_tokenId];
    }

    function approve(address _approved, uint256 _tokenId)  external{
        _noBlocked(_approved);

        address _owner = ownerOf(_tokenId);
        require( _owner == msg.sender
            || isApprovedForAll[_owner][msg.sender]
            ,"permission");
        emit Approval(_owner, _approved, _tokenId);
        allowance[_tokenId] = _approved;
    }

    function getApproved(uint256 _tokenId) external view returns (address) {
        require(_isValidToken(_tokenId),"invalid");
        return allowance[_tokenId];
    }

    function setApprovalForAll(address _operator, bool _approved) external {
        _noBlocked(_operator);
        emit ApprovalForAll(msg.sender,_operator, _approved);
        isApprovedForAll[msg.sender][_operator] = _approved;
    }

    function transferFrom(address _from, address _to, uint256 _tokenId) public {
        address _owner = ownerOf(_tokenId);
        if(isDarkAge()){
            require(!IDoomsdaySettlersDarkAge(DARK_AGE).checkVulnerable(uint32(_tokenId)),"vulnerable");
        }
        if(_from != msg.sender){
            _noBlocked(msg.sender);
        }

        require ( _owner == msg.sender
            || allowance[_tokenId] == msg.sender
            || isApprovedForAll[_owner][msg.sender]
        ,"permission");

        require(_owner == _from,"owner");
        require(_to != address(0),"zero");

        emit Transfer(_from, _to, _tokenId);
        owners[_tokenId] =_to;
        --balanceOf[_from];
        ++balanceOf[_to];

        if(allowance[_tokenId] != address(0)){
            delete allowance[_tokenId];
        }
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) public {
        transferFrom(_from, _to, _tokenId);

        uint32 size;
        assembly {
            size := extcodesize(_to)
        }
        if(size != 0){
            IERC721TokenReceiver receiver = IERC721TokenReceiver(_to);
            require(receiver.onERC721Received(msg.sender,_from,_tokenId,data) == bytes4(0x150b7a02),"receiver");
        }
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external {
        safeTransferFrom(_from,_to,_tokenId,"");
    }

    function tokenURI(uint256 _tokenId) external view returns (string memory){
        ownerOf(_tokenId);
        return IDoomsdaySettlersMetadata(__metadata).tokenURI(
            _tokenId
        );
    }

    function totalSupply() external view returns (uint256){
        unchecked{
            return hashes.length - destroyed.length - abandoned;
        }
    }
    ///==End 721

    ///////===165 Implementation
    mapping (bytes4 => bool) public supportsInterface;
    ///==End 165

    //// ==== Admin
    function _onlyOwner() private view{
        require(msg.sender == owner,"owner");
    }
    function _onlyCreator() private view{
        require(msg.sender == creator,"creator");
    }

    function setOwner(address newOwner) external  {
        _onlyOwner();
        owner = newOwner;
    }

    function setMetadata(address _metadata) external {
        _onlyOwner();
        __metadata = _metadata;
    }

    function creatorWithdraw() external {
        _onlyCreator();
        uint256 toWithdraw = creatorEarnings;
        delete creatorEarnings;
        payable(msg.sender).transfer(toWithdraw);
    }

    function setCreator(address newCreator) external {
        _onlyCreator();
        creator = newCreator;
    }

    //OPERATOR FILTER
    IDoomsdaySettlersBlacklist blacklist;
    function _noBlocked(address _addr) private view{

        if (address(blacklist).code.length > 0) {
            try blacklist.checkBlocked(_addr) returns (bool result){
                require(!result,"blocked");
            } catch {
                //External error, let them cook
            }
        }
    }

//    function tryCatchExternalCall(uint _i) public {
//        try foo.myFunc(_i) returns (string memory result) {
//            emit Log(result);
//        } catch {
//            emit Log("external call failed");
//        }
//    }

    function setBlacklist(address _newBlacklist) external{
        _onlyOwner();
        blacklist = IDoomsdaySettlersBlacklist(_newBlacklist);
    }

}

File 2 of 5 : IDoomsdaySettlersBlacklist.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.21;

interface IDoomsdaySettlersBlacklist {
    function checkBlocked(address _addr) external view returns(bool);
}

File 3 of 5 : IDoomsdaySettlersDarkAge.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.21;

interface IDoomsdaySettlersDarkAge {
    function checkVulnerable(uint32 _tokenId) external view returns (bool);
    function getUnusedFees(uint32 _tokenId) external view returns (uint80);
    function disaster(uint32 _tokenId, uint256 _totalSupply) external returns(uint8 _type, bool destroyed);
    function reinforce(
        uint32 _tokenId,
        bytes32 _tokenHash,
        bool[4] memory _resources,
        bool _isDarkAge
    ) external returns (uint80 _cost);
}

File 4 of 5 : IDoomsdaySettlersMetadata.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.21;

interface IDoomsdaySettlersMetadata {
    function tokenURI(uint256 _tokenId) external view returns (string memory);
}

File 5 of 5 : IERC721TokenReceiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

/// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02.
interface IERC721TokenReceiver {
    /// @notice Handle the receipt of an NFT
    /// @dev The ERC721 smart contract calls this function on the recipient
    ///  after a `transfer`. This function MAY throw to revert and reject the
    ///  transfer. Return of other than the magic value MUST result in the
    ///  transaction being reverted.
    ///  Note: the contract address is always the message sender.
    /// @param _operator The address which called `safeTransferFrom` function
    /// @param _from The address which previously owned the token
    /// @param _tokenId The NFT identifier which is being transferred
    /// @param _data Additional data with no specified format
    /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    ///  unless throwing
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4);
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_darkAge","type":"address"},{"internalType":"uint256","name":"_BASE_DIFFICULTY","type":"uint256"},{"internalType":"uint256","name":"_DIFFICULTY_RAMP","type":"uint256"},{"internalType":"uint256","name":"_DIFFICULTY_COOLDOWN","type":"uint256"},{"internalType":"uint256","name":"_DIFFICULTY_COOLDOWN_SLOPE","type":"uint256"},{"internalType":"uint256","name":"_COLLAPSE_INITIAL","type":"uint256"},{"internalType":"uint256","name":"_COLLAPSE_RAMP","type":"uint256"},{"internalType":"uint256","name":"_COLLAPSE_MIN","type":"uint256"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"_tokenId","type":"uint32"},{"indexed":false,"internalType":"bytes32","name":"_hash","type":"bytes32"},{"indexed":false,"internalType":"uint80","name":"_growth","type":"uint80"},{"indexed":false,"internalType":"uint24","name":"_supplyAtMint","type":"uint24"},{"indexed":false,"internalType":"uint32","name":"_newAbandoned","type":"uint32"},{"indexed":false,"internalType":"uint80","name":"_newMintFee","type":"uint80"},{"indexed":false,"internalType":"uint80","name":"_eth","type":"uint80"},{"indexed":false,"internalType":"uint32","name":"_settled","type":"uint32"},{"indexed":false,"internalType":"bool","name":"_itIsTheDawnOfANewAge","type":"bool"},{"indexed":false,"internalType":"uint32","name":"_blockNumber","type":"uint32"}],"name":"Abandon","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"_tokenId","type":"uint32"},{"indexed":false,"internalType":"uint8","name":"_type","type":"uint8"},{"indexed":false,"internalType":"bool","name":"_destroyed","type":"bool"},{"indexed":false,"internalType":"bool","name":"_darkAgeOver","type":"bool"}],"name":"Disaster","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"_tokenId","type":"uint32"},{"indexed":false,"internalType":"uint8","name":"_type","type":"uint8"}],"name":"Reinforce","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"_tokenId","type":"uint32"},{"indexed":false,"internalType":"bytes32","name":"_hash","type":"bytes32"},{"indexed":false,"internalType":"address","name":"_settler","type":"address"},{"indexed":false,"internalType":"uint24","name":"_newSupply","type":"uint24"},{"indexed":false,"internalType":"uint80","name":"_newMintFee","type":"uint80"},{"indexed":false,"internalType":"uint32","name":"_collapseBlock","type":"uint32"},{"indexed":false,"internalType":"uint8","name":"_settlementType","type":"uint8"},{"indexed":true,"internalType":"address","name":"_data","type":"address"},{"indexed":false,"internalType":"uint32","name":"_blockNumber","type":"uint32"}],"name":"Settle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint32[]","name":"_tokenIds","type":"uint32[]"},{"internalType":"uint32","name":"_data","type":"uint32"}],"name":"abandon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_tokenId","type":"uint32"},{"internalType":"uint32","name":"_data","type":"uint32"}],"name":"confirmDisaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creatorWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentState","outputs":[{"internalType":"bool","name":"_itIsTheDawnOfANewAge","type":"bool"},{"internalType":"uint32","name":"_firstSettlement","type":"uint32"},{"internalType":"uint16","name":"_age","type":"uint16"},{"internalType":"uint80","name":"_creatorEarnings","type":"uint80"},{"internalType":"uint80","name":"_relics","type":"uint80"},{"internalType":"uint80","name":"_supplies","type":"uint80"},{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"destroyed","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_tokenId","type":"uint32"}],"name":"hashOf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDarkAge","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningState","outputs":[{"internalType":"bytes32","name":"_lastHash","type":"bytes32"},{"internalType":"uint32","name":"_settled","type":"uint32"},{"internalType":"uint32","name":"_abandoned","type":"uint32"},{"internalType":"uint32","name":"_lastSettleBlock","type":"uint32"},{"internalType":"uint32","name":"_collapseBlock","type":"uint32"},{"internalType":"uint80","name":"_mintFee","type":"uint80"},{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_tokenId","type":"uint32"},{"internalType":"bool[4]","name":"_resources","type":"bool[4]"}],"name":"reinforce","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newBlacklist","type":"address"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newCreator","type":"address"}],"name":"setCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_metadata","type":"address"}],"name":"setMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"location","type":"uint256"},{"internalType":"uint8","name":"count","type":"uint8"},{"internalType":"address","name":"data","type":"address"}],"name":"settle","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint256","name":"_supplyAtMint","type":"uint256"}],"name":"settlementType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"settlements","outputs":[{"internalType":"uint32","name":"settleBlock","type":"uint32"},{"internalType":"uint24","name":"supplyAtMint","type":"uint24"},{"internalType":"uint16","name":"age","type":"uint16"},{"internalType":"uint8","name":"settlementType","type":"uint8"},{"internalType":"uint80","name":"relics","type":"uint80"},{"internalType":"uint80","name":"supplies","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]

61018060405260025f806101000a81548161ffff021916908361ffff16021790555060405162006a4538038062006a45833981810160405281019062000046919062000717565b86608081815250508560a081815250508460c081815250508360e081815250508261012081815250508161014081815250508061016081815250508773ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff1681525050662386f26fc1000069ffffffffffffffffffff1634146200010e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001059062000839565b60405180910390fd5b6001600b5f6380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f6301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f205f6101000a81548160ff021916908315150217905550335f600b6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f6001436200028b919062000886565b4090505f620002a1825f620004f260201b60201c565b9050620002b7600133846200055b60201b60201c565b6040518060c001604052804363ffffffff1681526020015f62ffffff1681526020015f8054906101000a900461ffff1661ffff1681526020018260ff1681526020015f69ffffffffffffffffffff1681526020015f69ffffffffffffffffffff1681525060055f600163ffffffff1681526020019081526020015f205f820151815f015f6101000a81548163ffffffff021916908363ffffffff1602179055506020820151815f0160046101000a81548162ffffff021916908362ffffff1602179055506040820151815f0160076101000a81548161ffff021916908361ffff1602179055506060820151815f0160096101000a81548160ff021916908360ff1602179055506080820151815f01600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060a0820151815f0160146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555090505064e8d4a510006102006009836200043c9190620008c0565b6a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6200046391906200094d565b6200046f919062000999565b6002600a8282829054906101000a900469ffffffffffffffffffff16620004979190620009de565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060015f60026101000a81548163ffffffff021916908363ffffffff1602179055505050505050505050505062000a22565b5f8060026103e884816200050b576200050a62000920565b5b0401905060088111156200051e57600890505b6127106001820160026064875f1c816200053d576200053c62000920565b5b060a028162000551576200055062000920565b5b0491505092915050565b3360095f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815460010191905081905550600381908060018154018082558091505060019003905f5260205f20015f9091909190915055828273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620006a9826200067e565b9050919050565b620006bb816200069d565b8114620006c6575f80fd5b50565b5f81519050620006d981620006b0565b92915050565b5f819050919050565b620006f381620006df565b8114620006fe575f80fd5b50565b5f815190506200071181620006e8565b92915050565b5f805f805f805f80610100898b0312156200073757620007366200067a565b5b5f620007468b828c01620006c9565b9850506020620007598b828c0162000701565b97505060406200076c8b828c0162000701565b96505060606200077f8b828c0162000701565b9550506080620007928b828c0162000701565b94505060a0620007a58b828c0162000701565b93505060c0620007b88b828c0162000701565b92505060e0620007cb8b828c0162000701565b9150509295985092959890939650565b5f82825260208201905092915050565b7f6465737472756374696f6e0000000000000000000000000000000000000000005f82015250565b5f62000821600b83620007db565b91506200082e82620007eb565b602082019050919050565b5f6020820190508181035f830152620008528162000813565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200089282620006df565b91506200089f83620006df565b9250828203905081811115620008ba57620008b962000859565b5b92915050565b5f620008cc82620006df565b9150620008d983620006df565b9250828202620008e981620006df565b9150828204841483151762000903576200090262000859565b5b5092915050565b5f6affffffffffffffffffffff82169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000959826200090a565b915062000966836200090a565b92508262000979576200097862000920565b5b828206905092915050565b5f69ffffffffffffffffffff82169050919050565b5f620009a58262000984565b9150620009b28362000984565b9250828202620009c28162000984565b9150808214620009d757620009d662000859565b5b5092915050565b5f620009ea8262000984565b9150620009f78362000984565b9250828201905069ffffffffffffffffffff81111562000a1c5762000a1b62000859565b5b92915050565b60805160a05160c05160e05161010051610120516101405161016051615f3462000b115f395f8181610b9e01528181610c77015281816116440152818161171b01528181612ae70152612be801525f8181610be101528181610c1201528181611687015281816116b701528181612b330152612b6d01525f8181610bbf01528181610c3b01528181611665015281816116df01528181612b080152612b9f01525f8181610d540152818161208d0152818161221e01528181612636015281816135dc0152613a6101525f61157801525f818161152d015261155601525f61146201525f6114840152615f345ff3fe6080604052600436106101d7575f3560e01c806364ec8bdb11610101578063bcccb53611610094578063e00d79ef11610063578063e00d79ef146106a0578063e985e9c5146106dc578063f06d67bb14610718578063f3cb838514610748576101d7565b8063bcccb536146105e4578063c259e1cc14610620578063c87b56dd14610648578063cfa5344014610684576101d7565b80638e30c766116100d05780638e30c7661461054257806395d89b411461056a578063a22cb46514610594578063b88d4fde146105bc576101d7565b806364ec8bdb146104855780636c2b836a1461049b57806370a08231146104dc5780638da5cb5b14610518576101d7565b806313af4035116101795780633f516018116101485780633f516018146103d157806342842e0e146103f95780634e054a67146104215780636352211e14610449576101d7565b806313af40351461033b57806318160ddd1461036357806323b872dd1461038d5780632579cb6d146103b5576101d7565b8063081812fc116101b5578063081812fc1461027d578063095ea7b3146102b95780630c3f6acf146102e157806311f6dcbd14610311576101d7565b806301ffc9a7146101db5780630357f5aa1461021757806306fdde0314610253575b5f80fd5b3480156101e6575f80fd5b5061020160048036038101906101fc919061421b565b610770565b60405161020e9190614260565b60405180910390f35b348015610222575f80fd5b5061023d600480360381019061023891906142b2565b61078d565b60405161024a91906142f5565b60405180910390f35b34801561025e575f80fd5b50610267610809565b6040516102749190614398565b60405180910390f35b348015610288575f80fd5b506102a3600480360381019061029e91906143eb565b610825565b6040516102b09190614455565b60405180910390f35b3480156102c4575f80fd5b506102df60048036038101906102da9190614498565b6108a6565b005b3480156102ec575f80fd5b506102f5610a64565b6040516103089796959493929190614534565b60405180910390f35b34801561031c575f80fd5b50610325610afc565b6040516103329190614260565b60405180910390f35b348015610346575f80fd5b50610361600480360381019061035c91906145a1565b610cc2565b005b34801561036e575f80fd5b50610377610d0d565b60405161038491906145cc565b60405180910390f35b348015610398575f80fd5b506103b360048036038101906103ae91906145e5565b610d39565b005b6103cf60048036038101906103ca919061466b565b61128b565b005b3480156103dc575f80fd5b506103f760048036038101906103f291906145a1565b611876565b005b348015610404575f80fd5b5061041f600480360381019061041a91906145e5565b6118c1565b005b34801561042c575f80fd5b50610447600480360381019061044291906145a1565b6118e0565b005b348015610454575f80fd5b5061046f600480360381019061046a91906143eb565b61192b565b60405161047c9190614455565b60405180910390f35b348015610490575f80fd5b506104996119ac565b005b3480156104a6575f80fd5b506104c160048036038101906104bc91906142b2565b611a3e565b6040516104d3969594939291906146e7565b60405180910390f35b3480156104e7575f80fd5b5061050260048036038101906104fd91906145a1565b611ad6565b60405161050f91906145cc565b60405180910390f35b348015610523575f80fd5b5061052c611aeb565b6040516105399190614455565b60405180910390f35b34801561054d575f80fd5b50610568600480360381019061056391906147a7565b611b10565b005b348015610575575f80fd5b5061057e611bf1565b60405161058b9190614398565b60405180910390f35b34801561059f575f80fd5b506105ba60048036038101906105b5919061482e565b611c2a565b005b3480156105c7575f80fd5b506105e260048036038101906105dd9190614994565b611d2b565b005b3480156105ef575f80fd5b5061060a600480360381019061060591906143eb565b611e5a565b6040516106179190614a14565b60405180910390f35b34801561062b575f80fd5b5061064660048036038101906106419190614a2d565b611e91565b005b348015610653575f80fd5b5061066e600480360381019061066991906143eb565b6124ba565b60405161067b9190614398565b60405180910390f35b61069e60048036038101906106999190614b19565b612569565b005b3480156106ab575f80fd5b506106c660048036038101906106c19190614b81565b6129d0565b6040516106d391906145cc565b60405180910390f35b3480156106e7575f80fd5b5061070260048036038101906106fd9190614bbf565b612a2f565b60405161070f9190614260565b60405180910390f35b348015610723575f80fd5b5061072c612a59565b60405161073f9796959493929190614bfd565b60405180910390f35b348015610753575f80fd5b5061076e600480360381019061076991906145a1565b612cdd565b005b600b602052805f5260405f205f915054906101000a900460ff1681565b5f61079d8263ffffffff16612d28565b6107dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d390614cb4565b60405180910390fd5b60036001830363ffffffff16815481106107f9576107f8614cd2565b5b905f5260205f2001549050919050565b604051806060016040528060238152602001615edc6023913981565b5f61082f82612d28565b61086e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086590614cb4565b60405180910390fd5b60075f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6108af82612d90565b5f6108b98261192b565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610976575060085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6109b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ac90614d49565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a48260075f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b5f805f805f805f80600a9054906101000a900460ff165f60029054906101000a900463ffffffff165f8054906101000a900461ffff16600260149054906101000a900469ffffffffffffffffffff1660025f9054906101000a900469ffffffffffffffffffff16600160149054906101000a900469ffffffffffffffffffff1643965096509650965096509650965090919293949596565b5f8060038054905090505f8060069054906101000a900463ffffffff1663ffffffff1660048054905083030390505f60055f8463ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff1690505f600160055f8663ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a900462ffffff160162ffffff1690507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000037f00000000000000000000000000000000000000000000000000000000000000008263ffffffff16021015610c7357600c7f00000000000000000000000000000000000000000000000000000000000000008263ffffffff16027f00000000000000000000000000000000000000000000000000000000000000000381610c6957610c68614d67565b5b0482019150610caa565b600c7f000000000000000000000000000000000000000000000000000000000000000081610ca457610ca3614d67565b5b04820191505b600183118015610cb957508143115b94505050505090565b610cca612eb0565b805f600b6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8060069054906101000a900463ffffffff1663ffffffff166004805490506003805490500303905090565b5f610d438261192b565b9050610d4d610afc565b15610e2b577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166382657a85836040518263ffffffff1660e01b8152600401610dab9190614a14565b602060405180830381865afa158015610dc6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dea9190614da8565b15610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2190614e1d565b60405180910390fd5b5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610e6857610e6733612d90565b5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610efd57503373ffffffffffffffffffffffffffffffffffffffff1660075f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610f89575060085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbf90614d49565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90614e85565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90614eed565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48260095f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815461119790614f38565b9190508190555060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81546111e790614f5f565b919050819055505f73ffffffffffffffffffffffffffffffffffffffff1660075f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112855760075f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50505050565b611293610afc565b156112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca90614ff0565b60405180910390fd5b5f8260ff1603611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f90615058565b60405180910390fd5b60148260ff16111561135f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611356906150c0565b60405180910390fd5b69ffffffffffffffffffff801647106113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490615128565b60405180910390fd5b5f60016003805490500190505f600a9054906101000a900460ff1615611435575f8081819054906101000a900461ffff1660010191906101000a81548161ffff021916908361ffff160217905550805f60026101000a81548163ffffffff021916908363ffffffff1602179055505f80600a6101000a81548160ff0219169083151502179055505b5f8060069054906101000a900463ffffffff1663ffffffff16600480549050600380549050030390505f817f0000000000000000000000000000000000000000000000000000000000000000027f00000000000000000000000000000000000000000000000000000000000000000390505f60055f60038054905063ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff169050804311611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151c90615190565b60405180910390fd5b5f81430390507f00000000000000000000000000000000000000000000000000000000000000008110156115ab57807f0000000000000000000000000000000000000000000000000000000000000000037f00000000000000000000000000000000000000000000000000000000000000000283816115a7576115a6614d67565b5b0492505b5f336003600160038054905003815481106115c9576115c8614cd2565b5b905f5260205f2001548a6040516020016115e593929190615233565b60405160208183030381529060405280519060200120905083815f1c10611641576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611638906152b9565b60405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000037f00000000000000000000000000000000000000000000000000000000000000008a60ff16880102101561171757600c7f00000000000000000000000000000000000000000000000000000000000000008a60ff168801027f0000000000000000000000000000000000000000000000000000000000000000038161170d5761170c614d67565b5b044301905061174e565b600c7f00000000000000000000000000000000000000000000000000000000000000008161174857611747614d67565b5b04430190505b5f805f90505b8a60ff1663ffffffff168163ffffffff16101561179257611783818a0185838463ffffffff168c01878f612f41565b82019150806001019050611754565b50803410156117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd90615321565b60405180910390fd5b6127105a1161181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181190615389565b60405180910390fd5b80341115611869573373ffffffffffffffffffffffffffffffffffffffff166108fc82340390811502906040515f60405180830381858888f19350505050158015611867573d5f803e3d5ffd5b505b5050505050505050505050565b61187e613399565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118db83838360405180602001604052805f815250611d2b565b505050565b6118e8612eb0565b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f61193582612d28565b611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b90614cb4565b60405180910390fd5b60095f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6119b4613399565b5f600260149054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff169050600260146101000a81549069ffffffffffffffffffff02191690553373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611a3a573d5f803e3d5ffd5b5050565b6005602052805f5260405f205f91509050805f015f9054906101000a900463ffffffff1690805f0160049054906101000a900462ffffff1690805f0160079054906101000a900461ffff1690805f0160099054906101000a900460ff1690805f01600a9054906101000a900469ffffffffffffffffffff1690805f0160149054906101000a900469ffffffffffffffffffff16905086565b6006602052805f5260405f205f915090505481565b5f600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8383905003611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c906153f1565b60405180910390fd5b5f805f90505b84849050811015611ba657611b97858583818110611b7c57611b7b614cd2565b5b9050602002016020810190611b9191906142b2565b8461342a565b82019150806001019050611b5b565b503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611bea573d5f803e3d5ffd5b5050505050565b6040518060400160405280600a81526020017f534554544c454d454e540000000000000000000000000000000000000000000081525081565b611c3382612d90565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c909190614260565b60405180910390a38060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611d36848484610d39565b5f833b90505f8163ffffffff1614611e53575f84905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b8152600401611db29493929190615461565b6020604051808303815f875af1158015611dce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df291906154bf565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890615534565b60405180910390fd5b505b5050505050565b60048181548110611e69575f80fd5b905f5260205f209060089182820401919006600402915054906101000a900463ffffffff1681565b611e99610afc565b611ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecf90614ff0565b60405180910390fd5b611ee78263ffffffff16612d28565b611f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1d90614cb4565b60405180910390fd5b5f604b43611f349190615552565b90506019811015611fc057611f4e8363ffffffff1661192b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290614e85565b60405180910390fd5b61204a565b6032811015612049575f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205403612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f906155cc565b60405180910390fd5b5b5b5f805f60038054905090505f8060069054906101000a900463ffffffff1663ffffffff166004805490508361207f91906155ea565b61208991906155ea565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a54f604588836040518363ffffffff1660e01b81526004016120e692919061561d565b60408051808303815f875af1158015612101573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121259190615658565b80945081955050505f808415612412575f64e8d4a510006102006affffffffffffffffffffff16600960055f8e63ffffffff1663ffffffff1681526020019081526020015f205f0160099054906101000a900460ff160260ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff16816121b5576121b4614d67565b5b060290505f8060029054906101000a900463ffffffff1663ffffffff168b63ffffffff16106121ee578a63ffffffff168603905061220e565b60015f60029054906101000a900463ffffffff1663ffffffff1687030190505b5f8282029050661c6bf5263400007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633d7606d28e6040518263ffffffff1660e01b81526004016122759190614a14565b602060405180830381865afa158015612290573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122b491906156c0565b0260055f8e63ffffffff1663ffffffff1681526020019081526020015f205f0160149054906101000a900469ffffffffffffffffffff1660055f8f63ffffffff1663ffffffff1681526020019081526020015f205f01600a9054906101000a900469ffffffffffffffffffff1660028469ffffffffffffffffffff168161233e5761233d614d67565b5b0401010160025f8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060048c908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff1602179055506123e38c63ffffffff16613c2c565b8560019003955060018603612400576123fb8b613d3d565b600194505b505050662386f26fc10000905061241d565b661c6bf52634000090505b8863ffffffff167fb42dc0fdbad9c34e94c321dcafde1913063d2654671596956fcf873387ee0d37878785604051612457939291906156eb565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff166108fc8269ffffffffffffffffffff1690811502906040515f60405180830381858888f193505050501580156124ae573d5f803e3d5ffd5b50505050505050505050565b60606124c58261192b565b50600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b815260040161252091906145cc565b5f60405180830381865afa15801561253a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061256291906157be565b9050919050565b6125788263ffffffff1661192b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125dc9061584f565b60405180910390fd5b69ffffffffffffffffffff80164710612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a90615128565b60405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632a56946b8461267a8661078d565b85612683610afc565b6040518563ffffffff1660e01b81526004016126a29493929190615912565b6020604051808303815f875af11580156126be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e291906156c0565b90505f805f90505b60048110156127665783816004811061270657612705614cd2565b5b60200201511561275b57661c6bf526340000820191508463ffffffff167f2f3508f35cf9b0ed68f9abba5458799a360ddf42fcd12c6f41fd4860ba71631f826040516127529190615955565b60405180910390a25b8060010190506126ea565b505f8169ffffffffffffffffffff16036127b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ac906159b8565b60405180910390fd5b600469ffffffffffffffffffff166002600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff16816127f6576127f5614d67565b5b04820291508181019050348169ffffffffffffffffffff16111561284f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284690615a20565b60405180910390fd5b6064600f830269ffffffffffffffffffff168161286f5761286e614d67565b5b04600260148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060646055830269ffffffffffffffffffff16816128d7576128d6614d67565b5b04600160148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506127105a11612963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295a90615389565b60405180910390fd5b8069ffffffffffffffffffff163411156129ca573373ffffffffffffffffffffffffffffffffffffffff166108fc8269ffffffffffffffffffff16340390811502906040515f60405180830381858888f193505050501580156129c8573d5f803e3d5ffd5b505b50505050565b5f8060026103e884816129e6576129e5614d67565b5b0401905060088111156129f857600890505b6127106001820160026064875f1c81612a1457612a13614d67565b5b060a0281612a2557612a24614d67565b5b0491505092915050565b6008602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f805f805f805f8060055f60038054905063ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff1690505f600160055f60038054905063ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a900462ffffff16612ade9190615a3e565b62ffffff1690507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612b3191906155ea565b7f00000000000000000000000000000000000000000000000000000000000000008263ffffffff16612b639190615a74565b1015612be457600c7f00000000000000000000000000000000000000000000000000000000000000008263ffffffff16612b9d9190615a74565b7f0000000000000000000000000000000000000000000000000000000000000000612bc891906155ea565b612bd29190615ab5565b82612bdd9190615ae5565b9150612c1f565b600c7f0000000000000000000000000000000000000000000000000000000000000000612c119190615ab5565b82612c1c9190615ae5565b91505b60036001600380549050612c3391906155ea565b81548110612c4457612c43614cd2565b5b905f5260205f2001546003805490505f60069054906101000a900463ffffffff16600480549050612c759190615b18565b60055f60038054905063ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff16856002600a9054906101000a900469ffffffffffffffffffff16439850985098509850985098509850505090919293949596565b612ce5612eb0565b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660095f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163b1115612ead57600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636ba06ca4826040518263ffffffff1660e01b8152600401612e2a9190614455565b602060405180830381865afa925050508015612e6457506040513d601f19601f82011682018060405250810190612e619190614da8565b60015b15612eac578015612eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea190615b99565b60405180910390fd5b505b5b50565b5f600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3690614e85565b60405180910390fd5b565b5f662386f26fc1000069ffffffffffffffffffff166002600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff16612f859190615ae5565b90505f6064600f69ffffffffffffffffffff1683612fa39190615a74565b612fad9190615ab5565b905080600260148282829054906101000a900469ffffffffffffffffffff16612fd69190615bb7565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055508069ffffffffffffffffffff16826130189190615ae5565b91505f878760405160200161302e929190615c28565b6040516020818303038152906040528051906020012090505f61305182886129d0565b90508144604051602001613066929190615c53565b6040516020818303038152906040528051906020012091506040518060c001604052804363ffffffff1681526020018862ffffff1681526020015f8054906101000a900461ffff1661ffff1681526020018260ff1681526020015f69ffffffffffffffffffff1681526020015f69ffffffffffffffffffff1681525060055f8c63ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a81548163ffffffff021916908363ffffffff1602179055506020820151815f0160046101000a81548162ffffff021916908362ffffff1602179055506040820151815f0160076101000a81548161ffff021916908361ffff1602179055506060820151815f0160096101000a81548160ff021916908360ff1602179055506080820151815f01600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060a0820151815f0160146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550905050600280600a9054906101000a900469ffffffffffffffffffff166132149190615c7e565b60025f8282829054906101000a900469ffffffffffffffffffff166132399190615bb7565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555064e8d4a510006102006009836132799190615cae565b60ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6132a19190615d00565b6132ab9190615d30565b6002600a8282829054906101000a900469ffffffffffffffffffff166132d19190615bb7565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555061330c8a63ffffffff163384614096565b8473ffffffffffffffffffffffffffffffffffffffff167f444ecbf9f5083183eadb792d6e970912963d46d7530cc1429557b40c8eee836e8b843360018c6133549190615ae5565b6002600a9054906101000a900469ffffffffffffffffffff168c8843604051613384989796959493929190615d6c565b60405180910390a25050509695505050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341f90615e32565b60405180910390fd5b565b5f61343a8363ffffffff1661192b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146134a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349e9061584f565b60405180910390fd5b5f60036001850363ffffffff16815481106134c5576134c4614cd2565b5b905f5260205f20015490505f8060029054906101000a900463ffffffff1663ffffffff168563ffffffff161061350a578463ffffffff1660038054905003905061352f565b60015f60029054906101000a900463ffffffff1663ffffffff16600380549050030190505b5f80600a9054906101000a900460ff166135c95764e8d4a510006102006affffffffffffffffffffff16600960055f8a63ffffffff1663ffffffff1681526020019081526020015f205f0160099054906101000a900460ff160260ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff16816135c2576135c1614d67565b5b0683020290505b5f6135d2610afc565b90508015613875577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166382657a85886040518263ffffffff1660e01b81526004016136339190614a14565b602060405180830381865afa15801561364e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136729190614da8565b156136b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a990614e1d565b60405180910390fd5b60028269ffffffffffffffffffff16816136cf576136ce614d67565b5b0491505f8060025f8054906101000a900461ffff1661ffff1611156136fb578160010191508060010190505b60015f60029054906101000a900463ffffffff1663ffffffff16035f60069054906101000a900463ffffffff1663ffffffff1660048054905001038201915060015f60029054906101000a900463ffffffff1663ffffffff160360038054905003810190505f6409502f90008269ffffffffffffffffffff16846406fc23ac000269ffffffffffffffffffff168161379657613795614d67565b5b046402540be400015f60069054906101000a900463ffffffff1663ffffffff16600480549050600380549050030369ffffffffffffffffffff1660025f9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff168161380257613801614d67565b5b040269ffffffffffffffffffff168161381e5761381d614d67565b5b04905080850194508060025f8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505050506139b6565b5f600a9054906101000a900460ff166139b55760028269ffffffffffffffffffff16816138a5576138a4614d67565b5b0460025f8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555064e8d4a510006102006affffffffffffffffffffff16600960055f8b63ffffffff1663ffffffff1681526020019081526020015f205f0160099054906101000a900460ff160260ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff168161396b5761396a614d67565b5b06026002600a8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505b5b5f600681819054906101000a900463ffffffff1660010191906101000a81548163ffffffff021916908363ffffffff16021790555060055f8863ffffffff1663ffffffff1681526020019081526020015f205f0160149054906101000a900469ffffffffffffffffffff1660055f8963ffffffff1663ffffffff1681526020019081526020015f205f01600a9054906101000a900469ffffffffffffffffffff16661c6bf5263400007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633d7606d28b6040518263ffffffff1660e01b8152600401613ab89190614a14565b602060405180830381865afa158015613ad3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613af791906156c0565b02662386f26fc1000001010182019150613b168763ffffffff16613c2c565b8015613b545760015f60069054906101000a900463ffffffff1663ffffffff16600480549050600380549050030303613b5357613b5286613d3d565b5b5b8663ffffffff167f043a95ff614f8dc4d9248f78dc6c860496987da7edc830f8189494f7eff4f6b0858560055f8c63ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a900462ffffff165f60069054906101000a900463ffffffff16600480549050016002600a9054906101000a900469ffffffffffffffffffff16886003805490505f600a9054906101000a900460ff1643604051613c0b99989796959493929190615e50565b60405180910390a28169ffffffffffffffffffff1694505050505092915050565b5f60095f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060065f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060095f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055815f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b613d4c8163ffffffff16612d28565b613d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d8290614cb4565b60405180910390fd5b60025f9054906101000a900469ffffffffffffffffffff1660055f8363ffffffff1663ffffffff1681526020019081526020015f205f01600a8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550600160149054906101000a900469ffffffffffffffffffff1660055f8363ffffffff1663ffffffff1681526020019081526020015f205f0160148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f64e8d4a510006102006affffffffffffffffffffff16600960055f8663ffffffff1663ffffffff1681526020019081526020015f205f0160099054906101000a900460ff160260ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff1681613f0457613f03614d67565b5b060290505f8060029054906101000a900463ffffffff1663ffffffff168363ffffffff161115613f43578263ffffffff16600380549050039050613f68565b60015f60029054906101000a900463ffffffff1663ffffffff16600380549050030190505b5f828202905060028169ffffffffffffffffffff1681613f8b57613f8a614d67565b5b0460055f8663ffffffff1663ffffffff1681526020019081526020015f205f01600a8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f60025f6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f600160146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550826002600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060015f600a6101000a81548160ff02191690831515021790555050505050565b3360095f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815460010191905081905550600381908060018154018082558091505060019003905f5260205f20015f9091909190915055828273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6141fa816141c6565b8114614204575f80fd5b50565b5f81359050614215816141f1565b92915050565b5f602082840312156142305761422f6141be565b5b5f61423d84828501614207565b91505092915050565b5f8115159050919050565b61425a81614246565b82525050565b5f6020820190506142735f830184614251565b92915050565b5f63ffffffff82169050919050565b61429181614279565b811461429b575f80fd5b50565b5f813590506142ac81614288565b92915050565b5f602082840312156142c7576142c66141be565b5b5f6142d48482850161429e565b91505092915050565b5f819050919050565b6142ef816142dd565b82525050565b5f6020820190506143085f8301846142e6565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561434557808201518184015260208101905061432a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61436a8261430e565b6143748185614318565b9350614384818560208601614328565b61438d81614350565b840191505092915050565b5f6020820190508181035f8301526143b08184614360565b905092915050565b5f819050919050565b6143ca816143b8565b81146143d4575f80fd5b50565b5f813590506143e5816143c1565b92915050565b5f60208284031215614400576143ff6141be565b5b5f61440d848285016143d7565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61443f82614416565b9050919050565b61444f81614435565b82525050565b5f6020820190506144685f830184614446565b92915050565b61447781614435565b8114614481575f80fd5b50565b5f813590506144928161446e565b92915050565b5f80604083850312156144ae576144ad6141be565b5b5f6144bb85828601614484565b92505060206144cc858286016143d7565b9150509250929050565b6144df81614279565b82525050565b5f61ffff82169050919050565b6144fb816144e5565b82525050565b5f69ffffffffffffffffffff82169050919050565b61451f81614501565b82525050565b61452e816143b8565b82525050565b5f60e0820190506145475f83018a614251565b61455460208301896144d6565b61456160408301886144f2565b61456e6060830187614516565b61457b6080830186614516565b61458860a0830185614516565b61459560c0830184614525565b98975050505050505050565b5f602082840312156145b6576145b56141be565b5b5f6145c384828501614484565b91505092915050565b5f6020820190506145df5f830184614525565b92915050565b5f805f606084860312156145fc576145fb6141be565b5b5f61460986828701614484565b935050602061461a86828701614484565b925050604061462b868287016143d7565b9150509250925092565b5f60ff82169050919050565b61464a81614635565b8114614654575f80fd5b50565b5f8135905061466581614641565b92915050565b5f805f60608486031215614682576146816141be565b5b5f61468f868287016143d7565b93505060206146a086828701614657565b92505060406146b186828701614484565b9150509250925092565b5f62ffffff82169050919050565b6146d2816146bb565b82525050565b6146e181614635565b82525050565b5f60c0820190506146fa5f8301896144d6565b61470760208301886146c9565b61471460408301876144f2565b61472160608301866146d8565b61472e6080830185614516565b61473b60a0830184614516565b979650505050505050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261476757614766614746565b5b8235905067ffffffffffffffff8111156147845761478361474a565b5b6020830191508360208202830111156147a05761479f61474e565b5b9250929050565b5f805f604084860312156147be576147bd6141be565b5b5f84013567ffffffffffffffff8111156147db576147da6141c2565b5b6147e786828701614752565b935093505060206147fa8682870161429e565b9150509250925092565b61480d81614246565b8114614817575f80fd5b50565b5f8135905061482881614804565b92915050565b5f8060408385031215614844576148436141be565b5b5f61485185828601614484565b92505060206148628582860161481a565b9150509250929050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6148a682614350565b810181811067ffffffffffffffff821117156148c5576148c4614870565b5b80604052505050565b5f6148d76141b5565b90506148e3828261489d565b919050565b5f67ffffffffffffffff82111561490257614901614870565b5b61490b82614350565b9050602081019050919050565b828183375f83830152505050565b5f614938614933846148e8565b6148ce565b9050828152602081018484840111156149545761495361486c565b5b61495f848285614918565b509392505050565b5f82601f83011261497b5761497a614746565b5b813561498b848260208601614926565b91505092915050565b5f805f80608085870312156149ac576149ab6141be565b5b5f6149b987828801614484565b94505060206149ca87828801614484565b93505060406149db878288016143d7565b925050606085013567ffffffffffffffff8111156149fc576149fb6141c2565b5b614a0887828801614967565b91505092959194509250565b5f602082019050614a275f8301846144d6565b92915050565b5f8060408385031215614a4357614a426141be565b5b5f614a508582860161429e565b9250506020614a618582860161429e565b9150509250929050565b5f67ffffffffffffffff821115614a8557614a84614870565b5b602082029050919050565b5f614aa2614a9d84614a6b565b6148ce565b90508060208402830185811115614abc57614abb61474e565b5b835b81811015614ae55780614ad1888261481a565b845260208401935050602081019050614abe565b5050509392505050565b5f82601f830112614b0357614b02614746565b5b6004614b10848285614a90565b91505092915050565b5f8060a08385031215614b2f57614b2e6141be565b5b5f614b3c8582860161429e565b9250506020614b4d85828601614aef565b9150509250929050565b614b60816142dd565b8114614b6a575f80fd5b50565b5f81359050614b7b81614b57565b92915050565b5f8060408385031215614b9757614b966141be565b5b5f614ba485828601614b6d565b9250506020614bb5858286016143d7565b9150509250929050565b5f8060408385031215614bd557614bd46141be565b5b5f614be285828601614484565b9250506020614bf385828601614484565b9150509250929050565b5f60e082019050614c105f83018a6142e6565b614c1d60208301896144d6565b614c2a60408301886144d6565b614c3760608301876144d6565b614c4460808301866144d6565b614c5160a0830185614516565b614c5e60c0830184614525565b98975050505050505050565b7f696e76616c6964000000000000000000000000000000000000000000000000005f82015250565b5f614c9e600783614318565b9150614ca982614c6a565b602082019050919050565b5f6020820190508181035f830152614ccb81614c92565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f7065726d697373696f6e000000000000000000000000000000000000000000005f82015250565b5f614d33600a83614318565b9150614d3e82614cff565b602082019050919050565b5f6020820190508181035f830152614d6081614d27565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f81519050614da281614804565b92915050565b5f60208284031215614dbd57614dbc6141be565b5b5f614dca84828501614d94565b91505092915050565b7f76756c6e657261626c65000000000000000000000000000000000000000000005f82015250565b5f614e07600a83614318565b9150614e1282614dd3565b602082019050919050565b5f6020820190508181035f830152614e3481614dfb565b9050919050565b7f6f776e65720000000000000000000000000000000000000000000000000000005f82015250565b5f614e6f600583614318565b9150614e7a82614e3b565b602082019050919050565b5f6020820190508181035f830152614e9c81614e63565b9050919050565b7f7a65726f000000000000000000000000000000000000000000000000000000005f82015250565b5f614ed7600483614318565b9150614ee282614ea3565b602082019050919050565b5f6020820190508181035f830152614f0481614ecb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614f42826143b8565b91505f8203614f5457614f53614f0b565b5b600182039050919050565b5f614f69826143b8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f9b57614f9a614f0b565b5b600182019050919050565b7f6461726b206167650000000000000000000000000000000000000000000000005f82015250565b5f614fda600883614318565b9150614fe582614fa6565b602082019050919050565b5f6020820190508181035f83015261500781614fce565b9050919050565b7f636f756e74206d696e00000000000000000000000000000000000000000000005f82015250565b5f615042600983614318565b915061504d8261500e565b602082019050919050565b5f6020820190508181035f83015261506f81615036565b9050919050565b7f636f756e74206d617800000000000000000000000000000000000000000000005f82015250565b5f6150aa600983614318565b91506150b582615076565b602082019050919050565b5f6020820190508181035f8301526150d78161509e565b9050919050565b7f62616c616e6365206f766572666c6f77000000000000000000000000000000005f82015250565b5f615112601083614318565b915061511d826150de565b602082019050919050565b5f6020820190508181035f83015261513f81615106565b9050919050565b7f6c617374536574746c65426c6f636b00000000000000000000000000000000005f82015250565b5f61517a600f83614318565b915061518582615146565b602082019050919050565b5f6020820190508181035f8301526151a78161516e565b9050919050565b5f8160601b9050919050565b5f6151c4826151ae565b9050919050565b5f6151d5826151ba565b9050919050565b6151ed6151e882614435565b6151cb565b82525050565b5f819050919050565b61520d615208826142dd565b6151f3565b82525050565b5f819050919050565b61522d615228826143b8565b615213565b82525050565b5f61523e82866151dc565b60148201915061524e82856151fc565b60208201915061525e828461521c565b602082019150819050949350505050565b7f646966666963756c7479000000000000000000000000000000000000000000005f82015250565b5f6152a3600a83614318565b91506152ae8261526f565b602082019050919050565b5f6020820190508181035f8301526152d081615297565b9050919050565b7f636f7374000000000000000000000000000000000000000000000000000000005f82015250565b5f61530b600483614318565b9150615316826152d7565b602082019050919050565b5f6020820190508181035f830152615338816152ff565b9050919050565b7f67617300000000000000000000000000000000000000000000000000000000005f82015250565b5f615373600383614318565b915061537e8261533f565b602082019050919050565b5f6020820190508181035f8301526153a081615367565b9050919050565b7f746f6b656e4964730000000000000000000000000000000000000000000000005f82015250565b5f6153db600883614318565b91506153e6826153a7565b602082019050919050565b5f6020820190508181035f830152615408816153cf565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f6154338261540f565b61543d8185615419565b935061544d818560208601614328565b61545681614350565b840191505092915050565b5f6080820190506154745f830187614446565b6154816020830186614446565b61548e6040830185614525565b81810360608301526154a08184615429565b905095945050505050565b5f815190506154b9816141f1565b92915050565b5f602082840312156154d4576154d36141be565b5b5f6154e1848285016154ab565b91505092915050565b7f72656365697665720000000000000000000000000000000000000000000000005f82015250565b5f61551e600883614318565b9150615529826154ea565b602082019050919050565b5f6020820190508181035f83015261554b81615512565b9050919050565b5f61555c826143b8565b9150615567836143b8565b92508261557757615576614d67565b5b828206905092915050565b7f62616c616e6365000000000000000000000000000000000000000000000000005f82015250565b5f6155b6600783614318565b91506155c182615582565b602082019050919050565b5f6020820190508181035f8301526155e3816155aa565b9050919050565b5f6155f4826143b8565b91506155ff836143b8565b925082820390508181111561561757615616614f0b565b5b92915050565b5f6040820190506156305f8301856144d6565b61563d6020830184614525565b9392505050565b5f8151905061565281614641565b92915050565b5f806040838503121561566e5761566d6141be565b5b5f61567b85828601615644565b925050602061568c85828601614d94565b9150509250929050565b61569f81614501565b81146156a9575f80fd5b50565b5f815190506156ba81615696565b92915050565b5f602082840312156156d5576156d46141be565b5b5f6156e2848285016156ac565b91505092915050565b5f6060820190506156fe5f8301866146d8565b61570b6020830185614251565b6157186040830184614251565b949350505050565b5f67ffffffffffffffff82111561573a57615739614870565b5b61574382614350565b9050602081019050919050565b5f61576261575d84615720565b6148ce565b90508281526020810184848401111561577e5761577d61486c565b5b615789848285614328565b509392505050565b5f82601f8301126157a5576157a4614746565b5b81516157b5848260208601615750565b91505092915050565b5f602082840312156157d3576157d26141be565b5b5f82015167ffffffffffffffff8111156157f0576157ef6141c2565b5b6157fc84828501615791565b91505092915050565b7f6f776e65724f66000000000000000000000000000000000000000000000000005f82015250565b5f615839600783614318565b915061584482615805565b602082019050919050565b5f6020820190508181035f8301526158668161582d565b9050919050565b5f60049050919050565b5f81905092915050565b5f819050919050565b61589381614246565b82525050565b5f6158a4838361588a565b60208301905092915050565b5f602082019050919050565b6158c58161586d565b6158cf8184615877565b92506158da82615881565b805f5b8381101561590a5781516158f18782615899565b96506158fc836158b0565b9250506001810190506158dd565b505050505050565b5f60e0820190506159255f8301876144d6565b61593260208301866142e6565b61593f60408301856158bc565b61594c60c0830184614251565b95945050505050565b5f6020820190506159685f8301846146d8565b92915050565b7f656d7074790000000000000000000000000000000000000000000000000000005f82015250565b5f6159a2600583614318565b91506159ad8261596e565b602082019050919050565b5f6020820190508181035f8301526159cf81615996565b9050919050565b7f6d73672e76616c756500000000000000000000000000000000000000000000005f82015250565b5f615a0a600983614318565b9150615a15826159d6565b602082019050919050565b5f6020820190508181035f830152615a37816159fe565b9050919050565b5f615a48826146bb565b9150615a53836146bb565b9250828201905062ffffff811115615a6e57615a6d614f0b565b5b92915050565b5f615a7e826143b8565b9150615a89836143b8565b9250828202615a97816143b8565b91508282048414831517615aae57615aad614f0b565b5b5092915050565b5f615abf826143b8565b9150615aca836143b8565b925082615ada57615ad9614d67565b5b828204905092915050565b5f615aef826143b8565b9150615afa836143b8565b9250828201905080821115615b1257615b11614f0b565b5b92915050565b5f615b2282614279565b9150615b2d83614279565b9250828201905063ffffffff811115615b4957615b48614f0b565b5b92915050565b7f626c6f636b6564000000000000000000000000000000000000000000000000005f82015250565b5f615b83600783614318565b9150615b8e82615b4f565b602082019050919050565b5f6020820190508181035f830152615bb081615b77565b9050919050565b5f615bc182614501565b9150615bcc83614501565b9250828201905069ffffffffffffffffffff811115615bee57615bed614f0b565b5b92915050565b5f8160e01b9050919050565b5f615c0a82615bf4565b9050919050565b615c22615c1d82614279565b615c00565b82525050565b5f615c3382856151fc565b602082019150615c438284615c11565b6004820191508190509392505050565b5f615c5e82856151fc565b602082019150615c6e828461521c565b6020820191508190509392505050565b5f615c8882614501565b9150615c9383614501565b925082615ca357615ca2614d67565b5b828204905092915050565b5f615cb882614635565b9150615cc383614635565b9250828202615cd181614635565b9150808214615ce357615ce2614f0b565b5b5092915050565b5f6affffffffffffffffffffff82169050919050565b5f615d0a82615cea565b9150615d1583615cea565b925082615d2557615d24614d67565b5b828206905092915050565b5f615d3a82614501565b9150615d4583614501565b9250828202615d5381614501565b9150808214615d6557615d64614f0b565b5b5092915050565b5f61010082019050615d805f83018b6144d6565b615d8d602083018a6142e6565b615d9a6040830189614446565b615da760608301886146c9565b615db46080830187614516565b615dc160a08301866144d6565b615dce60c08301856146d8565b615ddb60e08301846144d6565b9998505050505050505050565b7f63726561746f72000000000000000000000000000000000000000000000000005f82015250565b5f615e1c600783614318565b9150615e2782615de8565b602082019050919050565b5f6020820190508181035f830152615e4981615e10565b9050919050565b5f61012082019050615e645f83018c6142e6565b615e71602083018b614516565b615e7e604083018a6146c9565b615e8b60608301896144d6565b615e986080830188614516565b615ea560a0830187614516565b615eb260c08301866144d6565b615ebf60e0830185614251565b615ecd6101008301846144d6565b9a995050505050505050505056fe446f6f6d736461793a20536574746c657273206f66207468652057617374656c616e64a264697066735822122076ca5dc20e6c4a1e6cdbf82cde1a5e6e57edce63d0979c5a810fde414b89241964736f6c6343000815003300000000000000000000000079cf8466c12ac1acb9c1bf1179ea7308cf28eb0300000597a7e03ca484679197fbc312c8120b53a983aad3362bc462536a998a380000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000024

Deployed Bytecode

0x6080604052600436106101d7575f3560e01c806364ec8bdb11610101578063bcccb53611610094578063e00d79ef11610063578063e00d79ef146106a0578063e985e9c5146106dc578063f06d67bb14610718578063f3cb838514610748576101d7565b8063bcccb536146105e4578063c259e1cc14610620578063c87b56dd14610648578063cfa5344014610684576101d7565b80638e30c766116100d05780638e30c7661461054257806395d89b411461056a578063a22cb46514610594578063b88d4fde146105bc576101d7565b806364ec8bdb146104855780636c2b836a1461049b57806370a08231146104dc5780638da5cb5b14610518576101d7565b806313af4035116101795780633f516018116101485780633f516018146103d157806342842e0e146103f95780634e054a67146104215780636352211e14610449576101d7565b806313af40351461033b57806318160ddd1461036357806323b872dd1461038d5780632579cb6d146103b5576101d7565b8063081812fc116101b5578063081812fc1461027d578063095ea7b3146102b95780630c3f6acf146102e157806311f6dcbd14610311576101d7565b806301ffc9a7146101db5780630357f5aa1461021757806306fdde0314610253575b5f80fd5b3480156101e6575f80fd5b5061020160048036038101906101fc919061421b565b610770565b60405161020e9190614260565b60405180910390f35b348015610222575f80fd5b5061023d600480360381019061023891906142b2565b61078d565b60405161024a91906142f5565b60405180910390f35b34801561025e575f80fd5b50610267610809565b6040516102749190614398565b60405180910390f35b348015610288575f80fd5b506102a3600480360381019061029e91906143eb565b610825565b6040516102b09190614455565b60405180910390f35b3480156102c4575f80fd5b506102df60048036038101906102da9190614498565b6108a6565b005b3480156102ec575f80fd5b506102f5610a64565b6040516103089796959493929190614534565b60405180910390f35b34801561031c575f80fd5b50610325610afc565b6040516103329190614260565b60405180910390f35b348015610346575f80fd5b50610361600480360381019061035c91906145a1565b610cc2565b005b34801561036e575f80fd5b50610377610d0d565b60405161038491906145cc565b60405180910390f35b348015610398575f80fd5b506103b360048036038101906103ae91906145e5565b610d39565b005b6103cf60048036038101906103ca919061466b565b61128b565b005b3480156103dc575f80fd5b506103f760048036038101906103f291906145a1565b611876565b005b348015610404575f80fd5b5061041f600480360381019061041a91906145e5565b6118c1565b005b34801561042c575f80fd5b50610447600480360381019061044291906145a1565b6118e0565b005b348015610454575f80fd5b5061046f600480360381019061046a91906143eb565b61192b565b60405161047c9190614455565b60405180910390f35b348015610490575f80fd5b506104996119ac565b005b3480156104a6575f80fd5b506104c160048036038101906104bc91906142b2565b611a3e565b6040516104d3969594939291906146e7565b60405180910390f35b3480156104e7575f80fd5b5061050260048036038101906104fd91906145a1565b611ad6565b60405161050f91906145cc565b60405180910390f35b348015610523575f80fd5b5061052c611aeb565b6040516105399190614455565b60405180910390f35b34801561054d575f80fd5b50610568600480360381019061056391906147a7565b611b10565b005b348015610575575f80fd5b5061057e611bf1565b60405161058b9190614398565b60405180910390f35b34801561059f575f80fd5b506105ba60048036038101906105b5919061482e565b611c2a565b005b3480156105c7575f80fd5b506105e260048036038101906105dd9190614994565b611d2b565b005b3480156105ef575f80fd5b5061060a600480360381019061060591906143eb565b611e5a565b6040516106179190614a14565b60405180910390f35b34801561062b575f80fd5b5061064660048036038101906106419190614a2d565b611e91565b005b348015610653575f80fd5b5061066e600480360381019061066991906143eb565b6124ba565b60405161067b9190614398565b60405180910390f35b61069e60048036038101906106999190614b19565b612569565b005b3480156106ab575f80fd5b506106c660048036038101906106c19190614b81565b6129d0565b6040516106d391906145cc565b60405180910390f35b3480156106e7575f80fd5b5061070260048036038101906106fd9190614bbf565b612a2f565b60405161070f9190614260565b60405180910390f35b348015610723575f80fd5b5061072c612a59565b60405161073f9796959493929190614bfd565b60405180910390f35b348015610753575f80fd5b5061076e600480360381019061076991906145a1565b612cdd565b005b600b602052805f5260405f205f915054906101000a900460ff1681565b5f61079d8263ffffffff16612d28565b6107dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d390614cb4565b60405180910390fd5b60036001830363ffffffff16815481106107f9576107f8614cd2565b5b905f5260205f2001549050919050565b604051806060016040528060238152602001615edc6023913981565b5f61082f82612d28565b61086e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086590614cb4565b60405180910390fd5b60075f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6108af82612d90565b5f6108b98261192b565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610976575060085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6109b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ac90614d49565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a48260075f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b5f805f805f805f80600a9054906101000a900460ff165f60029054906101000a900463ffffffff165f8054906101000a900461ffff16600260149054906101000a900469ffffffffffffffffffff1660025f9054906101000a900469ffffffffffffffffffff16600160149054906101000a900469ffffffffffffffffffff1643965096509650965096509650965090919293949596565b5f8060038054905090505f8060069054906101000a900463ffffffff1663ffffffff1660048054905083030390505f60055f8463ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff1690505f600160055f8663ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a900462ffffff160162ffffff1690507f00000000000000000000000000000000000000000000000000000000000000247f0000000000000000000000000000000000000000000000000000000000015180037f00000000000000000000000000000000000000000000000000000000000000088263ffffffff16021015610c7357600c7f00000000000000000000000000000000000000000000000000000000000000088263ffffffff16027f00000000000000000000000000000000000000000000000000000000000151800381610c6957610c68614d67565b5b0482019150610caa565b600c7f000000000000000000000000000000000000000000000000000000000000002481610ca457610ca3614d67565b5b04820191505b600183118015610cb957508143115b94505050505090565b610cca612eb0565b805f600b6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8060069054906101000a900463ffffffff1663ffffffff166004805490506003805490500303905090565b5f610d438261192b565b9050610d4d610afc565b15610e2b577f00000000000000000000000079cf8466c12ac1acb9c1bf1179ea7308cf28eb0373ffffffffffffffffffffffffffffffffffffffff166382657a85836040518263ffffffff1660e01b8152600401610dab9190614a14565b602060405180830381865afa158015610dc6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dea9190614da8565b15610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2190614e1d565b60405180910390fd5b5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610e6857610e6733612d90565b5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610efd57503373ffffffffffffffffffffffffffffffffffffffff1660075f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610f89575060085f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbf90614d49565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90614e85565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90614eed565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48260095f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815461119790614f38565b9190508190555060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81546111e790614f5f565b919050819055505f73ffffffffffffffffffffffffffffffffffffffff1660075f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112855760075f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b50505050565b611293610afc565b156112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca90614ff0565b60405180910390fd5b5f8260ff1603611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f90615058565b60405180910390fd5b60148260ff16111561135f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611356906150c0565b60405180910390fd5b69ffffffffffffffffffff801647106113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490615128565b60405180910390fd5b5f60016003805490500190505f600a9054906101000a900460ff1615611435575f8081819054906101000a900461ffff1660010191906101000a81548161ffff021916908361ffff160217905550805f60026101000a81548163ffffffff021916908363ffffffff1602179055505f80600a6101000a81548160ff0219169083151502179055505b5f8060069054906101000a900463ffffffff1663ffffffff16600480549050600380549050030390505f817f0000000000000000000000000000000000000000000000000000000000003a98027f00000597a7e03ca484679197fbc312c8120b53a983aad3362bc462536a998a380390505f60055f60038054905063ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff169050804311611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151c90615190565b60405180910390fd5b5f81430390507f00000000000000000000000000000000000000000000000000000000000000198110156115ab57807f0000000000000000000000000000000000000000000000000000000000000019037f000000000000000000000000000000000000000000000000000000000000000f0283816115a7576115a6614d67565b5b0492505b5f336003600160038054905003815481106115c9576115c8614cd2565b5b905f5260205f2001548a6040516020016115e593929190615233565b60405160208183030381529060405280519060200120905083815f1c10611641576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611638906152b9565b60405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000247f0000000000000000000000000000000000000000000000000000000000015180037f00000000000000000000000000000000000000000000000000000000000000088a60ff16880102101561171757600c7f00000000000000000000000000000000000000000000000000000000000000088a60ff168801027f0000000000000000000000000000000000000000000000000000000000015180038161170d5761170c614d67565b5b044301905061174e565b600c7f00000000000000000000000000000000000000000000000000000000000000248161174857611747614d67565b5b04430190505b5f805f90505b8a60ff1663ffffffff168163ffffffff16101561179257611783818a0185838463ffffffff168c01878f612f41565b82019150806001019050611754565b50803410156117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd90615321565b60405180910390fd5b6127105a1161181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181190615389565b60405180910390fd5b80341115611869573373ffffffffffffffffffffffffffffffffffffffff166108fc82340390811502906040515f60405180830381858888f19350505050158015611867573d5f803e3d5ffd5b505b5050505050505050505050565b61187e613399565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118db83838360405180602001604052805f815250611d2b565b505050565b6118e8612eb0565b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f61193582612d28565b611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b90614cb4565b60405180910390fd5b60095f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6119b4613399565b5f600260149054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff169050600260146101000a81549069ffffffffffffffffffff02191690553373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611a3a573d5f803e3d5ffd5b5050565b6005602052805f5260405f205f91509050805f015f9054906101000a900463ffffffff1690805f0160049054906101000a900462ffffff1690805f0160079054906101000a900461ffff1690805f0160099054906101000a900460ff1690805f01600a9054906101000a900469ffffffffffffffffffff1690805f0160149054906101000a900469ffffffffffffffffffff16905086565b6006602052805f5260405f205f915090505481565b5f600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8383905003611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c906153f1565b60405180910390fd5b5f805f90505b84849050811015611ba657611b97858583818110611b7c57611b7b614cd2565b5b9050602002016020810190611b9191906142b2565b8461342a565b82019150806001019050611b5b565b503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611bea573d5f803e3d5ffd5b5050505050565b6040518060400160405280600a81526020017f534554544c454d454e540000000000000000000000000000000000000000000081525081565b611c3382612d90565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c909190614260565b60405180910390a38060085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611d36848484610d39565b5f833b90505f8163ffffffff1614611e53575f84905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168173ffffffffffffffffffffffffffffffffffffffff1663150b7a02338988886040518563ffffffff1660e01b8152600401611db29493929190615461565b6020604051808303815f875af1158015611dce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df291906154bf565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890615534565b60405180910390fd5b505b5050505050565b60048181548110611e69575f80fd5b905f5260205f209060089182820401919006600402915054906101000a900463ffffffff1681565b611e99610afc565b611ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecf90614ff0565b60405180910390fd5b611ee78263ffffffff16612d28565b611f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1d90614cb4565b60405180910390fd5b5f604b43611f349190615552565b90506019811015611fc057611f4e8363ffffffff1661192b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290614e85565b60405180910390fd5b61204a565b6032811015612049575f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205403612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f906155cc565b60405180910390fd5b5b5b5f805f60038054905090505f8060069054906101000a900463ffffffff1663ffffffff166004805490508361207f91906155ea565b61208991906155ea565b90507f00000000000000000000000079cf8466c12ac1acb9c1bf1179ea7308cf28eb0373ffffffffffffffffffffffffffffffffffffffff1663a54f604588836040518363ffffffff1660e01b81526004016120e692919061561d565b60408051808303815f875af1158015612101573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121259190615658565b80945081955050505f808415612412575f64e8d4a510006102006affffffffffffffffffffff16600960055f8e63ffffffff1663ffffffff1681526020019081526020015f205f0160099054906101000a900460ff160260ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff16816121b5576121b4614d67565b5b060290505f8060029054906101000a900463ffffffff1663ffffffff168b63ffffffff16106121ee578a63ffffffff168603905061220e565b60015f60029054906101000a900463ffffffff1663ffffffff1687030190505b5f8282029050661c6bf5263400007f00000000000000000000000079cf8466c12ac1acb9c1bf1179ea7308cf28eb0373ffffffffffffffffffffffffffffffffffffffff16633d7606d28e6040518263ffffffff1660e01b81526004016122759190614a14565b602060405180830381865afa158015612290573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122b491906156c0565b0260055f8e63ffffffff1663ffffffff1681526020019081526020015f205f0160149054906101000a900469ffffffffffffffffffff1660055f8f63ffffffff1663ffffffff1681526020019081526020015f205f01600a9054906101000a900469ffffffffffffffffffff1660028469ffffffffffffffffffff168161233e5761233d614d67565b5b0401010160025f8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060048c908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff1602179055506123e38c63ffffffff16613c2c565b8560019003955060018603612400576123fb8b613d3d565b600194505b505050662386f26fc10000905061241d565b661c6bf52634000090505b8863ffffffff167fb42dc0fdbad9c34e94c321dcafde1913063d2654671596956fcf873387ee0d37878785604051612457939291906156eb565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff166108fc8269ffffffffffffffffffff1690811502906040515f60405180830381858888f193505050501580156124ae573d5f803e3d5ffd5b50505050505050505050565b60606124c58261192b565b50600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b815260040161252091906145cc565b5f60405180830381865afa15801561253a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061256291906157be565b9050919050565b6125788263ffffffff1661192b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125dc9061584f565b60405180910390fd5b69ffffffffffffffffffff80164710612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a90615128565b60405180910390fd5b5f7f00000000000000000000000079cf8466c12ac1acb9c1bf1179ea7308cf28eb0373ffffffffffffffffffffffffffffffffffffffff16632a56946b8461267a8661078d565b85612683610afc565b6040518563ffffffff1660e01b81526004016126a29493929190615912565b6020604051808303815f875af11580156126be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e291906156c0565b90505f805f90505b60048110156127665783816004811061270657612705614cd2565b5b60200201511561275b57661c6bf526340000820191508463ffffffff167f2f3508f35cf9b0ed68f9abba5458799a360ddf42fcd12c6f41fd4860ba71631f826040516127529190615955565b60405180910390a25b8060010190506126ea565b505f8169ffffffffffffffffffff16036127b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ac906159b8565b60405180910390fd5b600469ffffffffffffffffffff166002600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff16816127f6576127f5614d67565b5b04820291508181019050348169ffffffffffffffffffff16111561284f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284690615a20565b60405180910390fd5b6064600f830269ffffffffffffffffffff168161286f5761286e614d67565b5b04600260148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060646055830269ffffffffffffffffffff16816128d7576128d6614d67565b5b04600160148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506127105a11612963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295a90615389565b60405180910390fd5b8069ffffffffffffffffffff163411156129ca573373ffffffffffffffffffffffffffffffffffffffff166108fc8269ffffffffffffffffffff16340390811502906040515f60405180830381858888f193505050501580156129c8573d5f803e3d5ffd5b505b50505050565b5f8060026103e884816129e6576129e5614d67565b5b0401905060088111156129f857600890505b6127106001820160026064875f1c81612a1457612a13614d67565b5b060a0281612a2557612a24614d67565b5b0491505092915050565b6008602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f805f805f805f8060055f60038054905063ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff1663ffffffff1690505f600160055f60038054905063ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a900462ffffff16612ade9190615a3e565b62ffffff1690507f00000000000000000000000000000000000000000000000000000000000000247f0000000000000000000000000000000000000000000000000000000000015180612b3191906155ea565b7f00000000000000000000000000000000000000000000000000000000000000088263ffffffff16612b639190615a74565b1015612be457600c7f00000000000000000000000000000000000000000000000000000000000000088263ffffffff16612b9d9190615a74565b7f0000000000000000000000000000000000000000000000000000000000015180612bc891906155ea565b612bd29190615ab5565b82612bdd9190615ae5565b9150612c1f565b600c7f0000000000000000000000000000000000000000000000000000000000000024612c119190615ab5565b82612c1c9190615ae5565b91505b60036001600380549050612c3391906155ea565b81548110612c4457612c43614cd2565b5b905f5260205f2001546003805490505f60069054906101000a900463ffffffff16600480549050612c759190615b18565b60055f60038054905063ffffffff1663ffffffff1681526020019081526020015f205f015f9054906101000a900463ffffffff16856002600a9054906101000a900469ffffffffffffffffffff16439850985098509850985098509850505090919293949596565b612ce5612eb0565b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660095f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b5f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163b1115612ead57600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636ba06ca4826040518263ffffffff1660e01b8152600401612e2a9190614455565b602060405180830381865afa925050508015612e6457506040513d601f19601f82011682018060405250810190612e619190614da8565b60015b15612eac578015612eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea190615b99565b60405180910390fd5b505b5b50565b5f600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3690614e85565b60405180910390fd5b565b5f662386f26fc1000069ffffffffffffffffffff166002600a9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff16612f859190615ae5565b90505f6064600f69ffffffffffffffffffff1683612fa39190615a74565b612fad9190615ab5565b905080600260148282829054906101000a900469ffffffffffffffffffff16612fd69190615bb7565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055508069ffffffffffffffffffff16826130189190615ae5565b91505f878760405160200161302e929190615c28565b6040516020818303038152906040528051906020012090505f61305182886129d0565b90508144604051602001613066929190615c53565b6040516020818303038152906040528051906020012091506040518060c001604052804363ffffffff1681526020018862ffffff1681526020015f8054906101000a900461ffff1661ffff1681526020018260ff1681526020015f69ffffffffffffffffffff1681526020015f69ffffffffffffffffffff1681525060055f8c63ffffffff1663ffffffff1681526020019081526020015f205f820151815f015f6101000a81548163ffffffff021916908363ffffffff1602179055506020820151815f0160046101000a81548162ffffff021916908362ffffff1602179055506040820151815f0160076101000a81548161ffff021916908361ffff1602179055506060820151815f0160096101000a81548160ff021916908360ff1602179055506080820151815f01600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060a0820151815f0160146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550905050600280600a9054906101000a900469ffffffffffffffffffff166132149190615c7e565b60025f8282829054906101000a900469ffffffffffffffffffff166132399190615bb7565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555064e8d4a510006102006009836132799190615cae565b60ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6132a19190615d00565b6132ab9190615d30565b6002600a8282829054906101000a900469ffffffffffffffffffff166132d19190615bb7565b92506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555061330c8a63ffffffff163384614096565b8473ffffffffffffffffffffffffffffffffffffffff167f444ecbf9f5083183eadb792d6e970912963d46d7530cc1429557b40c8eee836e8b843360018c6133549190615ae5565b6002600a9054906101000a900469ffffffffffffffffffff168c8843604051613384989796959493929190615d6c565b60405180910390a25050509695505050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341f90615e32565b60405180910390fd5b565b5f61343a8363ffffffff1661192b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146134a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349e9061584f565b60405180910390fd5b5f60036001850363ffffffff16815481106134c5576134c4614cd2565b5b905f5260205f20015490505f8060029054906101000a900463ffffffff1663ffffffff168563ffffffff161061350a578463ffffffff1660038054905003905061352f565b60015f60029054906101000a900463ffffffff1663ffffffff16600380549050030190505b5f80600a9054906101000a900460ff166135c95764e8d4a510006102006affffffffffffffffffffff16600960055f8a63ffffffff1663ffffffff1681526020019081526020015f205f0160099054906101000a900460ff160260ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff16816135c2576135c1614d67565b5b0683020290505b5f6135d2610afc565b90508015613875577f00000000000000000000000079cf8466c12ac1acb9c1bf1179ea7308cf28eb0373ffffffffffffffffffffffffffffffffffffffff166382657a85886040518263ffffffff1660e01b81526004016136339190614a14565b602060405180830381865afa15801561364e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136729190614da8565b156136b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a990614e1d565b60405180910390fd5b60028269ffffffffffffffffffff16816136cf576136ce614d67565b5b0491505f8060025f8054906101000a900461ffff1661ffff1611156136fb578160010191508060010190505b60015f60029054906101000a900463ffffffff1663ffffffff16035f60069054906101000a900463ffffffff1663ffffffff1660048054905001038201915060015f60029054906101000a900463ffffffff1663ffffffff160360038054905003810190505f6409502f90008269ffffffffffffffffffff16846406fc23ac000269ffffffffffffffffffff168161379657613795614d67565b5b046402540be400015f60069054906101000a900463ffffffff1663ffffffff16600480549050600380549050030369ffffffffffffffffffff1660025f9054906101000a900469ffffffffffffffffffff1669ffffffffffffffffffff168161380257613801614d67565b5b040269ffffffffffffffffffff168161381e5761381d614d67565b5b04905080850194508060025f8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505050506139b6565b5f600a9054906101000a900460ff166139b55760028269ffffffffffffffffffff16816138a5576138a4614d67565b5b0460025f8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555064e8d4a510006102006affffffffffffffffffffff16600960055f8b63ffffffff1663ffffffff1681526020019081526020015f205f0160099054906101000a900460ff160260ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff168161396b5761396a614d67565b5b06026002600a8282829054906101000a900469ffffffffffffffffffff160392506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505b5b5f600681819054906101000a900463ffffffff1660010191906101000a81548163ffffffff021916908363ffffffff16021790555060055f8863ffffffff1663ffffffff1681526020019081526020015f205f0160149054906101000a900469ffffffffffffffffffff1660055f8963ffffffff1663ffffffff1681526020019081526020015f205f01600a9054906101000a900469ffffffffffffffffffff16661c6bf5263400007f00000000000000000000000079cf8466c12ac1acb9c1bf1179ea7308cf28eb0373ffffffffffffffffffffffffffffffffffffffff16633d7606d28b6040518263ffffffff1660e01b8152600401613ab89190614a14565b602060405180830381865afa158015613ad3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613af791906156c0565b02662386f26fc1000001010182019150613b168763ffffffff16613c2c565b8015613b545760015f60069054906101000a900463ffffffff1663ffffffff16600480549050600380549050030303613b5357613b5286613d3d565b5b5b8663ffffffff167f043a95ff614f8dc4d9248f78dc6c860496987da7edc830f8189494f7eff4f6b0858560055f8c63ffffffff1663ffffffff1681526020019081526020015f205f0160049054906101000a900462ffffff165f60069054906101000a900463ffffffff16600480549050016002600a9054906101000a900469ffffffffffffffffffff16886003805490505f600a9054906101000a900460ff1643604051613c0b99989796959493929190615e50565b60405180910390a28169ffffffffffffffffffff1694505050505092915050565b5f60095f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060065f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060095f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055815f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b613d4c8163ffffffff16612d28565b613d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d8290614cb4565b60405180910390fd5b60025f9054906101000a900469ffffffffffffffffffff1660055f8363ffffffff1663ffffffff1681526020019081526020015f205f01600a8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550600160149054906101000a900469ffffffffffffffffffff1660055f8363ffffffff1663ffffffff1681526020019081526020015f205f0160148282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f64e8d4a510006102006affffffffffffffffffffff16600960055f8663ffffffff1663ffffffff1681526020019081526020015f205f0160099054906101000a900460ff160260ff166a01f4641908c320f0501e0a6affffffffffffffffffffff16901c6affffffffffffffffffffff1681613f0457613f03614d67565b5b060290505f8060029054906101000a900463ffffffff1663ffffffff168363ffffffff161115613f43578263ffffffff16600380549050039050613f68565b60015f60029054906101000a900463ffffffff1663ffffffff16600380549050030190505b5f828202905060028169ffffffffffffffffffff1681613f8b57613f8a614d67565b5b0460055f8663ffffffff1663ffffffff1681526020019081526020015f205f01600a8282829054906101000a900469ffffffffffffffffffff160192506101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f60025f6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505f600160146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550826002600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff16021790555060015f600a6101000a81548160ff02191690831515021790555050505050565b3360095f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815460010191905081905550600381908060018154018082558091505060019003905f5260205f20015f9091909190915055828273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6141fa816141c6565b8114614204575f80fd5b50565b5f81359050614215816141f1565b92915050565b5f602082840312156142305761422f6141be565b5b5f61423d84828501614207565b91505092915050565b5f8115159050919050565b61425a81614246565b82525050565b5f6020820190506142735f830184614251565b92915050565b5f63ffffffff82169050919050565b61429181614279565b811461429b575f80fd5b50565b5f813590506142ac81614288565b92915050565b5f602082840312156142c7576142c66141be565b5b5f6142d48482850161429e565b91505092915050565b5f819050919050565b6142ef816142dd565b82525050565b5f6020820190506143085f8301846142e6565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561434557808201518184015260208101905061432a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61436a8261430e565b6143748185614318565b9350614384818560208601614328565b61438d81614350565b840191505092915050565b5f6020820190508181035f8301526143b08184614360565b905092915050565b5f819050919050565b6143ca816143b8565b81146143d4575f80fd5b50565b5f813590506143e5816143c1565b92915050565b5f60208284031215614400576143ff6141be565b5b5f61440d848285016143d7565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61443f82614416565b9050919050565b61444f81614435565b82525050565b5f6020820190506144685f830184614446565b92915050565b61447781614435565b8114614481575f80fd5b50565b5f813590506144928161446e565b92915050565b5f80604083850312156144ae576144ad6141be565b5b5f6144bb85828601614484565b92505060206144cc858286016143d7565b9150509250929050565b6144df81614279565b82525050565b5f61ffff82169050919050565b6144fb816144e5565b82525050565b5f69ffffffffffffffffffff82169050919050565b61451f81614501565b82525050565b61452e816143b8565b82525050565b5f60e0820190506145475f83018a614251565b61455460208301896144d6565b61456160408301886144f2565b61456e6060830187614516565b61457b6080830186614516565b61458860a0830185614516565b61459560c0830184614525565b98975050505050505050565b5f602082840312156145b6576145b56141be565b5b5f6145c384828501614484565b91505092915050565b5f6020820190506145df5f830184614525565b92915050565b5f805f606084860312156145fc576145fb6141be565b5b5f61460986828701614484565b935050602061461a86828701614484565b925050604061462b868287016143d7565b9150509250925092565b5f60ff82169050919050565b61464a81614635565b8114614654575f80fd5b50565b5f8135905061466581614641565b92915050565b5f805f60608486031215614682576146816141be565b5b5f61468f868287016143d7565b93505060206146a086828701614657565b92505060406146b186828701614484565b9150509250925092565b5f62ffffff82169050919050565b6146d2816146bb565b82525050565b6146e181614635565b82525050565b5f60c0820190506146fa5f8301896144d6565b61470760208301886146c9565b61471460408301876144f2565b61472160608301866146d8565b61472e6080830185614516565b61473b60a0830184614516565b979650505050505050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261476757614766614746565b5b8235905067ffffffffffffffff8111156147845761478361474a565b5b6020830191508360208202830111156147a05761479f61474e565b5b9250929050565b5f805f604084860312156147be576147bd6141be565b5b5f84013567ffffffffffffffff8111156147db576147da6141c2565b5b6147e786828701614752565b935093505060206147fa8682870161429e565b9150509250925092565b61480d81614246565b8114614817575f80fd5b50565b5f8135905061482881614804565b92915050565b5f8060408385031215614844576148436141be565b5b5f61485185828601614484565b92505060206148628582860161481a565b9150509250929050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6148a682614350565b810181811067ffffffffffffffff821117156148c5576148c4614870565b5b80604052505050565b5f6148d76141b5565b90506148e3828261489d565b919050565b5f67ffffffffffffffff82111561490257614901614870565b5b61490b82614350565b9050602081019050919050565b828183375f83830152505050565b5f614938614933846148e8565b6148ce565b9050828152602081018484840111156149545761495361486c565b5b61495f848285614918565b509392505050565b5f82601f83011261497b5761497a614746565b5b813561498b848260208601614926565b91505092915050565b5f805f80608085870312156149ac576149ab6141be565b5b5f6149b987828801614484565b94505060206149ca87828801614484565b93505060406149db878288016143d7565b925050606085013567ffffffffffffffff8111156149fc576149fb6141c2565b5b614a0887828801614967565b91505092959194509250565b5f602082019050614a275f8301846144d6565b92915050565b5f8060408385031215614a4357614a426141be565b5b5f614a508582860161429e565b9250506020614a618582860161429e565b9150509250929050565b5f67ffffffffffffffff821115614a8557614a84614870565b5b602082029050919050565b5f614aa2614a9d84614a6b565b6148ce565b90508060208402830185811115614abc57614abb61474e565b5b835b81811015614ae55780614ad1888261481a565b845260208401935050602081019050614abe565b5050509392505050565b5f82601f830112614b0357614b02614746565b5b6004614b10848285614a90565b91505092915050565b5f8060a08385031215614b2f57614b2e6141be565b5b5f614b3c8582860161429e565b9250506020614b4d85828601614aef565b9150509250929050565b614b60816142dd565b8114614b6a575f80fd5b50565b5f81359050614b7b81614b57565b92915050565b5f8060408385031215614b9757614b966141be565b5b5f614ba485828601614b6d565b9250506020614bb5858286016143d7565b9150509250929050565b5f8060408385031215614bd557614bd46141be565b5b5f614be285828601614484565b9250506020614bf385828601614484565b9150509250929050565b5f60e082019050614c105f83018a6142e6565b614c1d60208301896144d6565b614c2a60408301886144d6565b614c3760608301876144d6565b614c4460808301866144d6565b614c5160a0830185614516565b614c5e60c0830184614525565b98975050505050505050565b7f696e76616c6964000000000000000000000000000000000000000000000000005f82015250565b5f614c9e600783614318565b9150614ca982614c6a565b602082019050919050565b5f6020820190508181035f830152614ccb81614c92565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f7065726d697373696f6e000000000000000000000000000000000000000000005f82015250565b5f614d33600a83614318565b9150614d3e82614cff565b602082019050919050565b5f6020820190508181035f830152614d6081614d27565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f81519050614da281614804565b92915050565b5f60208284031215614dbd57614dbc6141be565b5b5f614dca84828501614d94565b91505092915050565b7f76756c6e657261626c65000000000000000000000000000000000000000000005f82015250565b5f614e07600a83614318565b9150614e1282614dd3565b602082019050919050565b5f6020820190508181035f830152614e3481614dfb565b9050919050565b7f6f776e65720000000000000000000000000000000000000000000000000000005f82015250565b5f614e6f600583614318565b9150614e7a82614e3b565b602082019050919050565b5f6020820190508181035f830152614e9c81614e63565b9050919050565b7f7a65726f000000000000000000000000000000000000000000000000000000005f82015250565b5f614ed7600483614318565b9150614ee282614ea3565b602082019050919050565b5f6020820190508181035f830152614f0481614ecb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614f42826143b8565b91505f8203614f5457614f53614f0b565b5b600182039050919050565b5f614f69826143b8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f9b57614f9a614f0b565b5b600182019050919050565b7f6461726b206167650000000000000000000000000000000000000000000000005f82015250565b5f614fda600883614318565b9150614fe582614fa6565b602082019050919050565b5f6020820190508181035f83015261500781614fce565b9050919050565b7f636f756e74206d696e00000000000000000000000000000000000000000000005f82015250565b5f615042600983614318565b915061504d8261500e565b602082019050919050565b5f6020820190508181035f83015261506f81615036565b9050919050565b7f636f756e74206d617800000000000000000000000000000000000000000000005f82015250565b5f6150aa600983614318565b91506150b582615076565b602082019050919050565b5f6020820190508181035f8301526150d78161509e565b9050919050565b7f62616c616e6365206f766572666c6f77000000000000000000000000000000005f82015250565b5f615112601083614318565b915061511d826150de565b602082019050919050565b5f6020820190508181035f83015261513f81615106565b9050919050565b7f6c617374536574746c65426c6f636b00000000000000000000000000000000005f82015250565b5f61517a600f83614318565b915061518582615146565b602082019050919050565b5f6020820190508181035f8301526151a78161516e565b9050919050565b5f8160601b9050919050565b5f6151c4826151ae565b9050919050565b5f6151d5826151ba565b9050919050565b6151ed6151e882614435565b6151cb565b82525050565b5f819050919050565b61520d615208826142dd565b6151f3565b82525050565b5f819050919050565b61522d615228826143b8565b615213565b82525050565b5f61523e82866151dc565b60148201915061524e82856151fc565b60208201915061525e828461521c565b602082019150819050949350505050565b7f646966666963756c7479000000000000000000000000000000000000000000005f82015250565b5f6152a3600a83614318565b91506152ae8261526f565b602082019050919050565b5f6020820190508181035f8301526152d081615297565b9050919050565b7f636f7374000000000000000000000000000000000000000000000000000000005f82015250565b5f61530b600483614318565b9150615316826152d7565b602082019050919050565b5f6020820190508181035f830152615338816152ff565b9050919050565b7f67617300000000000000000000000000000000000000000000000000000000005f82015250565b5f615373600383614318565b915061537e8261533f565b602082019050919050565b5f6020820190508181035f8301526153a081615367565b9050919050565b7f746f6b656e4964730000000000000000000000000000000000000000000000005f82015250565b5f6153db600883614318565b91506153e6826153a7565b602082019050919050565b5f6020820190508181035f830152615408816153cf565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f6154338261540f565b61543d8185615419565b935061544d818560208601614328565b61545681614350565b840191505092915050565b5f6080820190506154745f830187614446565b6154816020830186614446565b61548e6040830185614525565b81810360608301526154a08184615429565b905095945050505050565b5f815190506154b9816141f1565b92915050565b5f602082840312156154d4576154d36141be565b5b5f6154e1848285016154ab565b91505092915050565b7f72656365697665720000000000000000000000000000000000000000000000005f82015250565b5f61551e600883614318565b9150615529826154ea565b602082019050919050565b5f6020820190508181035f83015261554b81615512565b9050919050565b5f61555c826143b8565b9150615567836143b8565b92508261557757615576614d67565b5b828206905092915050565b7f62616c616e6365000000000000000000000000000000000000000000000000005f82015250565b5f6155b6600783614318565b91506155c182615582565b602082019050919050565b5f6020820190508181035f8301526155e3816155aa565b9050919050565b5f6155f4826143b8565b91506155ff836143b8565b925082820390508181111561561757615616614f0b565b5b92915050565b5f6040820190506156305f8301856144d6565b61563d6020830184614525565b9392505050565b5f8151905061565281614641565b92915050565b5f806040838503121561566e5761566d6141be565b5b5f61567b85828601615644565b925050602061568c85828601614d94565b9150509250929050565b61569f81614501565b81146156a9575f80fd5b50565b5f815190506156ba81615696565b92915050565b5f602082840312156156d5576156d46141be565b5b5f6156e2848285016156ac565b91505092915050565b5f6060820190506156fe5f8301866146d8565b61570b6020830185614251565b6157186040830184614251565b949350505050565b5f67ffffffffffffffff82111561573a57615739614870565b5b61574382614350565b9050602081019050919050565b5f61576261575d84615720565b6148ce565b90508281526020810184848401111561577e5761577d61486c565b5b615789848285614328565b509392505050565b5f82601f8301126157a5576157a4614746565b5b81516157b5848260208601615750565b91505092915050565b5f602082840312156157d3576157d26141be565b5b5f82015167ffffffffffffffff8111156157f0576157ef6141c2565b5b6157fc84828501615791565b91505092915050565b7f6f776e65724f66000000000000000000000000000000000000000000000000005f82015250565b5f615839600783614318565b915061584482615805565b602082019050919050565b5f6020820190508181035f8301526158668161582d565b9050919050565b5f60049050919050565b5f81905092915050565b5f819050919050565b61589381614246565b82525050565b5f6158a4838361588a565b60208301905092915050565b5f602082019050919050565b6158c58161586d565b6158cf8184615877565b92506158da82615881565b805f5b8381101561590a5781516158f18782615899565b96506158fc836158b0565b9250506001810190506158dd565b505050505050565b5f60e0820190506159255f8301876144d6565b61593260208301866142e6565b61593f60408301856158bc565b61594c60c0830184614251565b95945050505050565b5f6020820190506159685f8301846146d8565b92915050565b7f656d7074790000000000000000000000000000000000000000000000000000005f82015250565b5f6159a2600583614318565b91506159ad8261596e565b602082019050919050565b5f6020820190508181035f8301526159cf81615996565b9050919050565b7f6d73672e76616c756500000000000000000000000000000000000000000000005f82015250565b5f615a0a600983614318565b9150615a15826159d6565b602082019050919050565b5f6020820190508181035f830152615a37816159fe565b9050919050565b5f615a48826146bb565b9150615a53836146bb565b9250828201905062ffffff811115615a6e57615a6d614f0b565b5b92915050565b5f615a7e826143b8565b9150615a89836143b8565b9250828202615a97816143b8565b91508282048414831517615aae57615aad614f0b565b5b5092915050565b5f615abf826143b8565b9150615aca836143b8565b925082615ada57615ad9614d67565b5b828204905092915050565b5f615aef826143b8565b9150615afa836143b8565b9250828201905080821115615b1257615b11614f0b565b5b92915050565b5f615b2282614279565b9150615b2d83614279565b9250828201905063ffffffff811115615b4957615b48614f0b565b5b92915050565b7f626c6f636b6564000000000000000000000000000000000000000000000000005f82015250565b5f615b83600783614318565b9150615b8e82615b4f565b602082019050919050565b5f6020820190508181035f830152615bb081615b77565b9050919050565b5f615bc182614501565b9150615bcc83614501565b9250828201905069ffffffffffffffffffff811115615bee57615bed614f0b565b5b92915050565b5f8160e01b9050919050565b5f615c0a82615bf4565b9050919050565b615c22615c1d82614279565b615c00565b82525050565b5f615c3382856151fc565b602082019150615c438284615c11565b6004820191508190509392505050565b5f615c5e82856151fc565b602082019150615c6e828461521c565b6020820191508190509392505050565b5f615c8882614501565b9150615c9383614501565b925082615ca357615ca2614d67565b5b828204905092915050565b5f615cb882614635565b9150615cc383614635565b9250828202615cd181614635565b9150808214615ce357615ce2614f0b565b5b5092915050565b5f6affffffffffffffffffffff82169050919050565b5f615d0a82615cea565b9150615d1583615cea565b925082615d2557615d24614d67565b5b828206905092915050565b5f615d3a82614501565b9150615d4583614501565b9250828202615d5381614501565b9150808214615d6557615d64614f0b565b5b5092915050565b5f61010082019050615d805f83018b6144d6565b615d8d602083018a6142e6565b615d9a6040830189614446565b615da760608301886146c9565b615db46080830187614516565b615dc160a08301866144d6565b615dce60c08301856146d8565b615ddb60e08301846144d6565b9998505050505050505050565b7f63726561746f72000000000000000000000000000000000000000000000000005f82015250565b5f615e1c600783614318565b9150615e2782615de8565b602082019050919050565b5f6020820190508181035f830152615e4981615e10565b9050919050565b5f61012082019050615e645f83018c6142e6565b615e71602083018b614516565b615e7e604083018a6146c9565b615e8b60608301896144d6565b615e986080830188614516565b615ea560a0830187614516565b615eb260c08301866144d6565b615ebf60e0830185614251565b615ecd6101008301846144d6565b9a995050505050505050505056fe446f6f6d736461793a20536574746c657273206f66207468652057617374656c616e64a264697066735822122076ca5dc20e6c4a1e6cdbf82cde1a5e6e57edce63d0979c5a810fde414b89241964736f6c63430008150033

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

00000000000000000000000079cf8466c12ac1acb9c1bf1179ea7308cf28eb0300000597a7e03ca484679197fbc312c8120b53a983aad3362bc462536a998a380000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000024

-----Decoded View---------------
Arg [0] : _darkAge (address): 0x79CF8466c12AC1ACB9c1bF1179ea7308Cf28EB03
Arg [1] : _BASE_DIFFICULTY (uint256): 38597363079105398474523661669562635951089994888546854679819194669304376
Arg [2] : _DIFFICULTY_RAMP (uint256): 15000
Arg [3] : _DIFFICULTY_COOLDOWN (uint256): 25
Arg [4] : _DIFFICULTY_COOLDOWN_SLOPE (uint256): 15
Arg [5] : _COLLAPSE_INITIAL (uint256): 86400
Arg [6] : _COLLAPSE_RAMP (uint256): 8
Arg [7] : _COLLAPSE_MIN (uint256): 36

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 00000000000000000000000079cf8466c12ac1acb9c1bf1179ea7308cf28eb03
Arg [1] : 00000597a7e03ca484679197fbc312c8120b53a983aad3362bc462536a998a38
Arg [2] : 0000000000000000000000000000000000000000000000000000000000003a98
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [5] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000024


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.