public void mount(TaskMonitor monitor) throws IOException, CancelledException {
		MessageLog log = new MessageLog();
		try {
			monitor.setMessage("Opening Mach-O file set...");
			header = new MachHeader(provider).parse();
			SegmentCommand textSegment = header.getSegment(SegmentNames.SEG_TEXT);
			if (textSegment == null) {
				throw new MachException(SegmentNames.SEG_TEXT + " not found!");
			}

			// File set entries
			for (FileSetEntryCommand cmd : header.getLoadCommands(FileSetEntryCommand.class)) {
				MachoFileSetEntry entry = new MachoFileSetEntry(cmd.getFileSetEntryId().getString(),
					cmd.getFileOffset(), false);
				fsIndex.storeFile(entry.id(), fsIndex.getFileCount(), false, -1, entry);
				entrySegmentMap.put(entry,
					new MachHeader(provider, entry.offset()).parseSegments());
			}

			// BRANCH segments, if present
			SegmentCommand branchStubs = header.getSegment(SegmentNames.SEG_BRANCH_STUBS);
			if (branchStubs != null) {
				MachoFileSetEntry entry =
					new MachoFileSetEntry(SegmentNames.SEG_BRANCH_STUBS.substring(2), 0, true);
				fsIndex.storeFile(entry.id(), fsIndex.getFileCount(), false, -1, entry);
				entrySegmentMap.put(entry, List.of(branchStubs));
			}
			SegmentCommand branchGots = header.getSegment(SegmentNames.SEG_BRANCH_GOTS);
			if (branchGots != null) {
				MachoFileSetEntry entry =
					new MachoFileSetEntry(SegmentNames.SEG_BRANCH_GOTS.substring(2), 0, true);
				fsIndex.storeFile(entry.id(), fsIndex.getFileCount(), false, -1, entry);
				entrySegmentMap.put(entry, List.of(branchGots));
			}

			monitor.setMessage("Getting chained pointers...");
			BinaryReader reader = new BinaryReader(provider, header.isLittleEndian());
			List<DyldFixup> fixups = new ArrayList<>();
			long imagebase = textSegment.getVMaddress();
			for (DyldChainedFixupsCommand loadCommand : header
					.getLoadCommands(DyldChainedFixupsCommand.class)) {
				fixups.addAll(loadCommand.getChainedFixups(reader, imagebase, null, log,
					monitor));
			}

			monitor.initialize(fixups.size(), "Fixing chained pointers...");
			byte[] bytes = provider.readBytes(0, provider.length());
			for (DyldFixup fixup : fixups) {
				byte[] newBytes = ExtractedMacho.toBytes(fixup.value(), fixup.size());
				System.arraycopy(newBytes, 0, bytes, (int) fixup.offset(), newBytes.length);
			}
			fixedUpProvider = new ByteArrayProvider(bytes);
		}
		catch (MachException e) {
			throw new IOException(e);
		}
	}
Mounts this file system

@param monitor {@link TaskMonitor}
@throws IOException If there was an issue mounting the file system
@throws CancelledException If the user cancelled the operation
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/fileset/MachoFileSetFileSystem.java