public static HashMap<String, byte[]> unpackZip(byte[] data) throws IOException {
        ByteArrayInputStream inputStream = new ByteArrayInputStream(data);
        ZipInputStream zipInputStream = new ZipInputStream(inputStream);
                
        HashMap<String, byte[]> zipData = new HashMap<>();
        
        try {
            ZipEntry zipEntry = zipInputStream.getNextEntry();
            while (zipEntry != null) {
                String fileName = zipEntry.getName();
                if (fileName.startsWith("/")) {
                    fileName = fileName.substring(1);
                }
                
                // Can't use readStreamToMemory because it closes zipInputStream
                ByteArrayOutputStream outputStream = new ByteArrayOutputStream(1024 * 80);
                IOUtils.copy(zipInputStream, outputStream);
                zipData.put(fileName, outputStream.toByteArray());
                
                zipEntry = zipInputStream.getNextEntry();
            }
        }
        finally {
            IOUtils.closeQuietly(zipInputStream);
        }
        
        return zipData;
    }