public String[] loadArchiveFromBlob(byte[] blob, boolean isSecondary) throws IOException {
        if (isSecondary && mFileManifest == null) {
            throw new IOException("Can't load secondary archive because no primary archive is loaded yet!");
        }

        ByteArrayIO io = new ByteArrayIO();
        io.setData(blob);
        Archive archive;
        try {
            archive = Archive.load(io);
        } finally {
            // Releases blob memory, but not metadata.
            io.release();
        }

        // uri|nttp_group|wiki_name
        String[] metaData = io.getMetaData().split("\\|");
        if (metaData.length != 3) {
            throw new IOException("Error parsing metadata");
        }
        for (int i = 0; i < metaData.length; i++) {
            if (metaData[i].equals("null")) {
                metaData[i] = "";
                continue;
            }
            metaData[i] = metaData[i].trim();
        }

        validateUriHashes(archive, metaData[0], true);

        FileManifest manifest = FileManifest.fromArchiveRootObject(archive);

        if (isSecondary) {
            WikiTextChanges remoteChanges = new RemoteWikiTextChanges(mFileManifest, archive, manifest);
            // Survived possible exceptions.
            mSecondaryArchive = archive;
            mSecondaryFileManifest = manifest;
            mSecondaryChanges = remoteChanges;
            mSecondaryUri = metaData[0];
            return metaData;
        }

        LocalWikiChanges localChanges = new LocalWikiChanges(archive, manifest);
        // Survived possible exceptions.
        mArchive = archive;
        mFileManifest = manifest;
        mOverlay = localChanges;
        mParentUri = metaData[0];

        String group = metaData[1];
        String name = metaData[2];
        if (!(group.equals("")) || name.equals("")) {
            setFmsGroup(group);
            setBissName(name);
        }

        // Loading primary resets secondary.
        resetSecondaryArchive();

        updateLoadedWikiInfo();
        return metaData;
    }