public static ByteProvider getApiSnapshotJsonFile(GoVer goVer, TaskMonitor monitor)
			throws IOException, CancelledException {
		FileSystemService fsService = FileSystemService.getInstance();

		GoVer baseVer = goVer.withPatch(0);
		File jsonFile = getApiSnapshotFile(baseVer, "", "");
		if (jsonFile == null) {
			return null;
		}

		ByteProvider bp = null;
		if (goVer.getPatch() == 0) {
			// doesn't need diffpatching
			bp = fsService.getByteProvider(fsService.getLocalFSRL(jsonFile), false, monitor);
		}
		else {
			File patchDiffFile = getApiSnapshotFile(goVer, "patchverdiffs/", ".diff");
			if (patchDiffFile != null) {
				FSRL fsrl =
					fsService.getFullyQualifiedFSRL(fsService.getLocalFSRL(jsonFile), monitor);
				bp = fsService.getDerivedByteProviderPush(fsrl, null,
					"go%s.json".formatted(goVer), -1, os -> {
						JsonPatch jsonPatch = JsonPatch.read(patchDiffFile);
						JsonPatchApplier jpa = new JsonPatchApplier(jsonFile);
						monitor.initialize(jsonPatch.getSectionCount(),
							"Patching golang api snapshot %s -> %s".formatted(baseVer, goVer));
						jpa.apply(jsonPatch, monitor);
						OutputStreamWriter osw = new OutputStreamWriter(os, StandardCharsets.UTF_8);
						new Gson().toJson(jpa.getJson(), osw);
						osw.flush(); // don't close outputstream, handled by caller
					}, monitor);
			}
		}
		return bp;
	}
Returns a matching {@link GoApiSnapshot} for the specified golang version.  If an exact
match isn't found, earlier patch revs will be tried until all patch levels are exhausted.   

@param goVer go version (controls which .json file is opened)
@param goArch GOARCH string
@param goOS GOOS string
@param monitor {@link TaskMonitor}
@return {@link GoApiSnapshot} instance, possibly an {@link #EMPTY} instance if no matching
snapshot file is found
@throws IOException if error parsing json or opening the snapshot container file
@throws CancelledException if user cancels
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/golang/rtti/GoApiSnapshot.java