function getIjinData(uint tokenId)
        public
        view
        returns (
            uint8 id,
            uint32 exp,
            uint8 limitBreakCount,
            uint16 ap,
            uint16 hp,
            uint16 kp,
            uint64 installTimestamp,
            uint24 accessCount,
            bool hasDoll,
            uint24 trainerId
        )
    {
        require(0 < tokenId && tokenId < ijins.length);
        IjinData memory ijin = ijins[tokenId];
        id = ijin.id;
        exp = ijin.exp;
        limitBreakCount = ijin.limitBreakCount;
        uint48 compressedStatus = ijin.compressedStatus;
        ap = uint16(compressedStatus >> 32);
        hp = uint16(compressedStatus >> 16);
        kp = uint16(compressedStatus);
        installTimestamp = ijin.installTimestamp;
        accessCount = ijin.accessCount;
        hasDoll = ijin.hasDoll;
        trainerId = ijin.trainerId;
    }