@Override
	public long getNestedVendorRamdiskOffset(int index) throws IOException {
		return getVendorRamdiskOffset() +
			ramdiskTableEntryList.get(index).getRamdiskOffset();
	}
https://android.googlesource.com/platform/system/tools/mkbootimg/+/refs/heads/master/include/bootimg/bootimg.h#401

<pre>
The structure of the vendor boot image version 4, which is required to be
present when a version 4 boot image is used, is as follows:

+------------------------+
| vendor boot header     | o pages
+------------------------+
| vendor ramdisk section | p pages
+------------------------+
| dtb                    | q pages
+------------------------+
| vendor ramdisk table   | r pages
+------------------------+
| bootconfig             | s pages
+------------------------+

o = (2128 + page_size - 1) / page_size
p = (vendor_ramdisk_size + page_size - 1) / page_size
q = (dtb_size + page_size - 1) / page_size
r = (vendor_ramdisk_table_size + page_size - 1) / page_size
s = (vendor_bootconfig_size + page_size - 1) / page_size

Note that in version 4 of the vendor boot image, multiple vendor ramdisks can
be included in the vendor boot image. The bootloader can select a subset of
ramdisks to load at runtime. To help the bootloader select the ramdisks, each
ramdisk is tagged with a type tag and a set of hardware identifiers
describing the board, soc or platform that this ramdisk is intended for.

The vendor ramdisk section is consist of multiple ramdisk images concatenated
one after another, and vendor_ramdisk_size is the size of the section, which
is the total size of all the ramdisks included in the vendor boot image.

The vendor ramdisk table holds the size, offset, type, name and hardware
identifiers of each ramdisk. The type field denotes the type of its content.
The hardware identifiers are specified in the board_id field in each table
entry. The board_id field is consist of a vector of unsigned integer words,
and the encoding scheme is defined by the hardware vendor.

For the different type of ramdisks, there are:
   - VENDOR_RAMDISK_TYPE_NONE indicates the value is unspecified.
   - VENDOR_RAMDISK_TYPE_PLATFORM ramdisk contains platform specific bits.
   - VENDOR_RAMDISK_TYPE_RECOVERY ramdisk contains recovery resources.
   - VENDOR_RAMDISK_TYPE_DLKM ramdisk contains dynamic loadable kernel
     modules.

Version 4 of the vendor boot image also adds a bootconfig section to the end
of the image. This section contains Boot Configuration parameters known at
build time. The bootloader is responsible for placing this section directly
after the generic ramdisk, followed by the bootconfig trailer, before
entering the kernel.

0. all entities in the boot image are 4096-byte aligned in flash, all
   entities in the vendor boot image are page_size (determined by the vendor
   and specified in the vendor boot image header) aligned in flash
1. kernel, ramdisk, and DTB are required (size != 0)
2. load the kernel and DTB at the specified physical address (kernel_addr,
   dtb_addr)
3. load the vendor ramdisks at ramdisk_addr
4. load the generic ramdisk immediately following the vendor ramdisk in
   memory
5. load the bootconfig immediately following the generic ramdisk. Add
   additional bootconfig parameters followed by the bootconfig trailer.
6. set up registers for kernel entry as required by your architecture
7. if the platform has a second stage bootloader jump to it (must be
   contained outside boot and vendor boot partitions), otherwise
   jump to kernel_addr
</pre>
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/bootimg/VendorBootImageHeaderV4.java