docs: private void parseZip(final int mbrSize) throws IOException {
  		final byte[] buffer = new byte[1024];
  		String manifestData = null;
  
  		ZipEntry ze;
  		while ((ze = zipInputStream.getNextEntry()) != null) {
  			final String filename = ze.getName();
  
  			if (ze.isDirectory()) {
  				Log.w(TAG, "A directory found in the ZIP: " + filename + "!");
  				continue;
  			}
  
  			// Read file content to byte array
  			final ByteArrayOutputStream baos = new ByteArrayOutputStream();
  			int count;
  			while ((count = zipInputStream.read(buffer)) != -1) {
  				baos.write(buffer, 0, count);
  			}
  			byte[] source = baos.toByteArray();
  
  			// In case of HEX file convert it to BIN
  			if (filename.toLowerCase(Locale.US).endsWith("hex")) {
  				final HexInputStream is = new HexInputStream(source, mbrSize);
  				source = new byte[is.available()];
  				is.read(source);
  				is.close();
  			}
  
  			// Save the file content either as a manifest data or by adding it to entries
  			if (MANIFEST.equals(filename))
  				manifestData = new String(source, "UTF-8");
  			else
  				entries.put(filename, source);
  		}
  
  		// Some validation
  		if (entries.isEmpty()) {
  			throw new FileNotFoundException("No files found in the ZIP. Check if the URI provided is " +
                      "valid and the ZIP contains required files on root level, not in a directory.");
  		}
  
  		if (manifestData != null) {
  			final ManifestFile manifestFile = new Gson().fromJson(manifestData, ManifestFile.class);
  			manifest = manifestFile.getManifest();
  			if (manifest == null) {
  				Log.w(TAG, "Manifest failed to be parsed. Did you add \n" +
  						"-keep class no.nordicsemi.android.dfu.** { *; }\n" +
  						"to your proguard rules?");
  			}
  		} else {
  			Log.w(TAG, "Manifest not found in the ZIP. It is recommended to use a distribution " +
                      "file created with: https://github.com/NordicSemiconductor/pc-nrfutil/ (for Legacy DFU use version 0.5.x)");
  		}
  	}