<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TotalJustice</id>
	<title>Nintendo Switch Brew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TotalJustice"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/TotalJustice"/>
	<updated>2026-04-15T05:12:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NCA&amp;diff=9005</id>
		<title>NCA</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NCA&amp;diff=9005"/>
		<updated>2020-03-30T15:53:57Z</updated>

		<summary type="html">&lt;p&gt;TotalJustice: /* HierarchicalIntegrity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The entire raw NCAs are encrypted.&lt;br /&gt;
&lt;br /&gt;
The only known area which is not encrypted in the raw NCA is the logo section, when the NCA includes that section. Everything else documented on this page is for the plaintext version of that data.&lt;br /&gt;
&lt;br /&gt;
= Encryption =&lt;br /&gt;
The first 0xC00 bytes are encrypted with AES-XTS with sector size 0x200 with a non-standard &amp;quot;tweak&amp;quot; (endianness is reversed, see [https://gist.github.com/SciresM/fe8a631d13c069bd66e9c656ab5b3f7f here]), this encrypted data is an 0x400 NCA header + an 0x200 header for each section in the section table.&lt;br /&gt;
&lt;br /&gt;
For pre-1.0.0 &amp;quot;NCA2&amp;quot; NCAs, the first 0x400 byte are encrypted the same way as in NCA3. However, each section header is individually encrypted as though it were sector 0, instead of the appropriate sector as in NCA3.&lt;br /&gt;
&lt;br /&gt;
= Header =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 signature over the header (data from 0x200 to 0x400) using a fixed key&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 signature over the header (data from 0x200 to 0x400) using a key from [[NPDM]] (or zeroes if not a program)&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;NCA3&amp;quot; (&amp;quot;NCA2&amp;quot;, &amp;quot;NCA1&amp;quot; or &amp;quot;NCA0&amp;quot; for pre-1.0.0 NCAs)&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| 0x1&lt;br /&gt;
| DistributionType (0x00 = System NCA, 0x01 = Gamecard NCA)&lt;br /&gt;
|-&lt;br /&gt;
| 0x205&lt;br /&gt;
| 0x1&lt;br /&gt;
| ContentType (0x00 = Program, 0x01 = Meta, 0x02 = Control, 0x03 = Manual, 0x04 = Data, 0x05 = PublicData)&lt;br /&gt;
|-&lt;br /&gt;
| 0x206&lt;br /&gt;
| 0x1&lt;br /&gt;
| KeyGenerationOld (0x00 = [[1.0.0]], 0x01 = Unused, 0x02 = [[3.0.0]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x207&lt;br /&gt;
| 0x1&lt;br /&gt;
| KeyAreaEncryptionKeyIndex (0x00 = Application, 0x01 = Ocean, 0x02 = System)&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| 0x8&lt;br /&gt;
| ContentSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x210&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramId&lt;br /&gt;
|-&lt;br /&gt;
| 0x218&lt;br /&gt;
| 0x4&lt;br /&gt;
| ContentIndex&lt;br /&gt;
|-&lt;br /&gt;
| 0x21C&lt;br /&gt;
| 0x4&lt;br /&gt;
| SdkAddonVersion (used in &amp;quot;FS_ACCESS: { sdk_version: {byte3}.{byte2}.{byte1}, ...&amp;quot; with byte0 set to 0 and compared with a required minimum value: 0x000B0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x220&lt;br /&gt;
| 0x1&lt;br /&gt;
| KeyGeneration (0x03 = [[3.0.1]], 0x04 = [[4.0.0]], 0x05 = [[5.0.0]], 0x06 = [[6.0.0]], 0x07 = [[6.2.0]], 0x08 = [[7.0.0]], 0x09 = [[8.1.0]], 0x0A = [[9.0.0]], 0x0B = [[9.1.0]], 0xFF = Invalid)&lt;br /&gt;
|-&lt;br /&gt;
| 0x221&lt;br /&gt;
| 0x1&lt;br /&gt;
| [9.0.0+] Header1SignatureKeyGeneration (0 or 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x222&lt;br /&gt;
| 0xE&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x230&lt;br /&gt;
| 0x10&lt;br /&gt;
| RightsId&lt;br /&gt;
|-&lt;br /&gt;
| 0x240&lt;br /&gt;
| 0x10 * 4&lt;br /&gt;
| Array of [[#FsEntry|FsEntry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x280&lt;br /&gt;
| 0x20 * 4&lt;br /&gt;
| Array of SHA256 hashes (over each [[#FsHeader|FsHeader]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| 0x10 * 4&lt;br /&gt;
| EncryptedKeyArea&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When the above &#039;&#039;&#039;KeyGenerationOld&#039;&#039;&#039; field is 0x2 on &amp;gt;= v3.0, different {crypto/keydata} is used for the sections&#039; data. With system content, this is used with every ncatype except ncatype0. The only other exception is {data-content} for the firm titles: this is required in order for older-system-versions to install it.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KeyGeneration&#039;&#039;&#039; 0x3 (with &#039;&#039;&#039;KeyGenerationOld&#039;&#039;&#039; set to 0x2) is used for all [[3.0.1]] sysmodules and the [[System_Version_Title]]. With [[3.0.2]], all updated titles use the crypto from [[3.0.1]] for non-ncatype0, except for firm {data-content}. In some cases various game content uses the above newer crypto as well.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KeyGeneration&#039;&#039;&#039; is always &#039;&#039;&#039;MasterKeyVersion&#039;&#039;&#039; + 1, except for generations 0 and 1 which are both version 0.&lt;br /&gt;
&lt;br /&gt;
The keyindex passed to &amp;lt;key-generation-related code&amp;gt; is determined as follows:&lt;br /&gt;
* Pre-[[3.0.0]]: The &#039;&#039;&#039;KeyAreaEncryptionKeyIndex&#039;&#039;&#039; field (0x207) is passed directly.&lt;br /&gt;
* [[3.0.0]]+: It&#039;s determined using the &#039;&#039;&#039;KeyAreaEncryptionKeyIndex&#039;&#039;&#039; field (0x207) and the &#039;&#039;&#039;KeyGenerationOld&#039;&#039;&#039; field (0x206). The latter field must be 0, 1 or 2. In each ncahdr_keyindex block, it executes &amp;quot;if(ncahdr_x206&amp;gt;=3)&amp;lt;panic&amp;gt;&amp;quot;, but that won&#039;t trigger due to the earlier check. The end result is basically the same as pre-[[3.0.0]], except when ncahdr_x206 == 0x2, final_index is new_base_index+ncahdr_keyindex. Actual implementation loads index from u32_array[ncahdr_crypto_type], where the address of u32_array is different for each ncahdr_keyindex.&lt;br /&gt;
* [[3.0.1]]+: The dedicated range check for the &#039;&#039;&#039;KeyGenerationOld&#039;&#039;&#039; field (0x206) was removed, since the updated code no longer needs it. The output from a function masked with 0xFF is now used instead of ncahdr_x206. The range check for that field was changed from {ncahdr_x206 check with panic described above}, to &amp;quot;if(index&amp;gt;=4)final_index=10;&amp;quot;(skips accessing the array and uses 10 directly). The arrays were updated with an additional entry: final_index=v301_base_index+ncahdr_keyindex.&lt;br /&gt;
** The keydata for the above index10 is not(?) known to be initialized.&lt;br /&gt;
** The new function called by the code described above does:&lt;br /&gt;
** &amp;lt;code&amp;gt;if(ncahdr_x206 &amp;lt; ncahdr_x220){ret = ncahdr_x220; } else { ret = ncahdr_x206; } return ret;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FsEntry ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| StartOffset (in Media Units which are 0x200 bytes) &lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| EndOffset (in Media Units which are 0x200 bytes) &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FsHeader =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Version (always 2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| FsType (0 = RomFs, 1 = PartitionFs)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| HashType (0 = Auto, 2 = HierarchicalSha256, 3 = HierarchicalIntegrity)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| EncryptionType (0 = Auto, 1 = None, 2 = AesCtrOld, 3 = AesCtr, 4 = AesCtrEx)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xF8&lt;br /&gt;
| [[#HashInfo|HashInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x40&lt;br /&gt;
| [[#PatchInfo|PatchInfo]] (only used with game updates RomFs)&lt;br /&gt;
|-&lt;br /&gt;
| 0x140&lt;br /&gt;
| 0x4&lt;br /&gt;
| Generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x144&lt;br /&gt;
| 0x4&lt;br /&gt;
| SecureValue&lt;br /&gt;
|-&lt;br /&gt;
| 0x148&lt;br /&gt;
| 0x30&lt;br /&gt;
| SparseInfo (only used in sections with sparse storage)&lt;br /&gt;
|-&lt;br /&gt;
| 0x178&lt;br /&gt;
| 0x88&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The FsHeader for each section is at absoluteoffset+0x400+(sectionid*0x200), where sectionid corresponds to the index used with the entry/hash tables.&lt;br /&gt;
&lt;br /&gt;
== HashInfo ==&lt;br /&gt;
This contains information specific to the hash type in use.&lt;br /&gt;
&lt;br /&gt;
=== HierarchicalSha256 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA256 hash over the hash-table at section-start+0 with the below hash-table size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Block size in bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Must be 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| Offset of hash-table (normally zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x8&lt;br /&gt;
| Size of hash-table&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| Offset relative to section-start where the PFS0 header is located&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x8&lt;br /&gt;
| Actual byte-size of the PFS0 filesystem relative to the PFS0 header&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0xB0&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== HierarchicalIntegrity ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;IVFC&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic Number (0x20000)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Master hash size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Usually 7? Unknown, could be related to total number of levels maybe?&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 1 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 1 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Level 1 block size (in log2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 2 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 2 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x4&lt;br /&gt;
| Level 2 block size (in log2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 3 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 3 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| Level 3 block size (in log2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 4 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 4 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Level 4 block size (in log2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 5 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 5 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x4&lt;br /&gt;
| Level 5 block size (in log2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x84&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 6 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x90&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 6 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x98&lt;br /&gt;
| 0x4&lt;br /&gt;
| Level 6 block size (in log2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Hash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PatchInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;BKTR&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32, must be &amp;lt;=1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| s32, must be &amp;gt;=1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x20&lt;br /&gt;
| Same as the above 0x20-bytes except with different data.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The above byte-offsets are relative to the start of the section-data.&lt;br /&gt;
&lt;br /&gt;
The two sections specified by the two BKTR entries are usually(?) at the very end of the section data(section_endoffset-{size of BKTR sections}).&lt;br /&gt;
&lt;br /&gt;
=== RomFs Patching ===&lt;br /&gt;
The [[#PatchInfo|PatchInfo]] section enables combining data from an update NCA with the RomFs from a base NCA to create a single patched RomFS image. &lt;br /&gt;
&lt;br /&gt;
The first BKTR entry describes how to map regions of the two RomFs images to create the patched RomFs. It has the following format:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Padding/Unused?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of Buckets&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Total Size of the Virtual RomFS Image&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x3FF0&lt;br /&gt;
| Base Virtual Offset for each Bucket (u64s, padded with 0s until end)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4000&lt;br /&gt;
| 0x4000*X&lt;br /&gt;
| Relocation Buckets&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Where relocation buckets are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Padding/Unused?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of Entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| End offset for this Bucket&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x3FF0&lt;br /&gt;
| Relocation Entries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Where relocation entries are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Address in Patched RomFs&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Address in Source RomFs&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1=Is from Patch RomFS, 0=Is from Base RomFS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The second BKTR entry describes the subsections within the Patch RomFs. It has the following format:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Padding/Unused?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of Buckets&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Total Size of the Physical Patch Image&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x3FF0&lt;br /&gt;
| Base Physical Offset for each Bucket (u64s, padded with 0s until end)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4000&lt;br /&gt;
| 0x4000*X&lt;br /&gt;
| Subsection Buckets&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Where subsection buckets are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Padding/Unused?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of Entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| End offset for this Bucket&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x3FF0&lt;br /&gt;
| Subsection Entries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Where subsection entries are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Address in Patch RomFs&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Padding/Unused?&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Value for subsection AES-CTR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Official code assumes the relocation entries are sorted, and performs a binary search when determining where to read from. Each subsection in the Patch RomFs has its CTR calculated separately from the others based on the value in its entry (the BKTR entries use normal crypto). Thus decrypting a Patch RomFS requires decrypting and parsing the BKTR entries before anything else.&lt;br /&gt;
&lt;br /&gt;
= Logo Section =&lt;br /&gt;
This is a PFS0.&lt;br /&gt;
&lt;br /&gt;
See [[NCA_Content_FS|here]] for the mounted-FS logo contents.&lt;br /&gt;
&lt;br /&gt;
= ExeFS Section =&lt;br /&gt;
This is a PFS0.&lt;br /&gt;
&lt;br /&gt;
See [[ExeFS|here]] for mounted-FS ExeFS contents.&lt;br /&gt;
&lt;br /&gt;
= Game Updates =&lt;br /&gt;
The section-data for ncatype1 RomFS section(section1) uses section-crypto-type 0x4.&lt;br /&gt;
&lt;br /&gt;
Game updates also contain multiple ncatype6 content, which contain &amp;quot;section0_pfs0/fragment&amp;quot;. Some of these are just NCAs, unknown for the rest(presumably NCAs with additional crypto?). The first ncatype6 content fragment file has a NDV0 header, with the NCA starting at offset 0x44.&lt;br /&gt;
&lt;br /&gt;
= PFS0 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| {Hash-table offset from superblock}&lt;br /&gt;
| {Hash-table size from superblock}&lt;br /&gt;
| Table of SHA256 hashes.&lt;br /&gt;
|-&lt;br /&gt;
| {Hash-table &amp;lt;offset+size&amp;gt; from superblock}&lt;br /&gt;
| &lt;br /&gt;
| Zeros for alignment to {alignment size}.&lt;br /&gt;
|-&lt;br /&gt;
| {PFS0 offset from superblock}&lt;br /&gt;
| {PFS0 size from superblock}&lt;br /&gt;
| The actual PFS0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the FS which has magicnum &amp;quot;PFS0&amp;quot; at header+0. This is very similar to [[Gamecard_Format|HFS0]]. A tool for extracting this FS is available [https://gist.github.com/yellows8/1a96c2b846f4ebc4bb45d7f7fa1eb7db here].&lt;br /&gt;
&lt;br /&gt;
The hash table is hashes for every {Block size from superblock} starting at the PFS0 header. The size used for the last hash is {PFS0 filesystem size from superblock} - offset_relativeto_header.&lt;br /&gt;
&lt;br /&gt;
See also the PFS0 superblock above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;PFS0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of files&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of the string table&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Zero/Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| X&lt;br /&gt;
| File Entry Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + X&lt;br /&gt;
| Y&lt;br /&gt;
| String Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + X + Y&lt;br /&gt;
| Z&lt;br /&gt;
| Raw File Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Where File Entry Table consists of Number of Files FileEntries:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Offset of file in Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Size of file in Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Offset of filename in String Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Normally zero?&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>TotalJustice</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NCA&amp;diff=9004</id>
		<title>NCA</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NCA&amp;diff=9004"/>
		<updated>2020-03-30T15:33:02Z</updated>

		<summary type="html">&lt;p&gt;TotalJustice: /* Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The entire raw NCAs are encrypted.&lt;br /&gt;
&lt;br /&gt;
The only known area which is not encrypted in the raw NCA is the logo section, when the NCA includes that section. Everything else documented on this page is for the plaintext version of that data.&lt;br /&gt;
&lt;br /&gt;
= Encryption =&lt;br /&gt;
The first 0xC00 bytes are encrypted with AES-XTS with sector size 0x200 with a non-standard &amp;quot;tweak&amp;quot; (endianness is reversed, see [https://gist.github.com/SciresM/fe8a631d13c069bd66e9c656ab5b3f7f here]), this encrypted data is an 0x400 NCA header + an 0x200 header for each section in the section table.&lt;br /&gt;
&lt;br /&gt;
For pre-1.0.0 &amp;quot;NCA2&amp;quot; NCAs, the first 0x400 byte are encrypted the same way as in NCA3. However, each section header is individually encrypted as though it were sector 0, instead of the appropriate sector as in NCA3.&lt;br /&gt;
&lt;br /&gt;
= Header =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 signature over the header (data from 0x200 to 0x400) using a fixed key&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 signature over the header (data from 0x200 to 0x400) using a key from [[NPDM]] (or zeroes if not a program)&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;NCA3&amp;quot; (&amp;quot;NCA2&amp;quot;, &amp;quot;NCA1&amp;quot; or &amp;quot;NCA0&amp;quot; for pre-1.0.0 NCAs)&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| 0x1&lt;br /&gt;
| DistributionType (0x00 = System NCA, 0x01 = Gamecard NCA)&lt;br /&gt;
|-&lt;br /&gt;
| 0x205&lt;br /&gt;
| 0x1&lt;br /&gt;
| ContentType (0x00 = Program, 0x01 = Meta, 0x02 = Control, 0x03 = Manual, 0x04 = Data, 0x05 = PublicData)&lt;br /&gt;
|-&lt;br /&gt;
| 0x206&lt;br /&gt;
| 0x1&lt;br /&gt;
| KeyGenerationOld (0x00 = [[1.0.0]], 0x01 = Unused, 0x02 = [[3.0.0]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x207&lt;br /&gt;
| 0x1&lt;br /&gt;
| KeyAreaEncryptionKeyIndex (0x00 = Application, 0x01 = Ocean, 0x02 = System)&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| 0x8&lt;br /&gt;
| ContentSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x210&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramId&lt;br /&gt;
|-&lt;br /&gt;
| 0x218&lt;br /&gt;
| 0x4&lt;br /&gt;
| ContentIndex&lt;br /&gt;
|-&lt;br /&gt;
| 0x21C&lt;br /&gt;
| 0x4&lt;br /&gt;
| SdkAddonVersion (used in &amp;quot;FS_ACCESS: { sdk_version: {byte3}.{byte2}.{byte1}, ...&amp;quot; with byte0 set to 0 and compared with a required minimum value: 0x000B0000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x220&lt;br /&gt;
| 0x1&lt;br /&gt;
| KeyGeneration (0x03 = [[3.0.1]], 0x04 = [[4.0.0]], 0x05 = [[5.0.0]], 0x06 = [[6.0.0]], 0x07 = [[6.2.0]], 0x08 = [[7.0.0]], 0x09 = [[8.1.0]], 0x0A = [[9.0.0]], 0x0B = [[9.1.0]], 0xFF = Invalid)&lt;br /&gt;
|-&lt;br /&gt;
| 0x221&lt;br /&gt;
| 0x1&lt;br /&gt;
| [9.0.0+] Header1SignatureKeyGeneration (0 or 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x222&lt;br /&gt;
| 0xE&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x230&lt;br /&gt;
| 0x10&lt;br /&gt;
| RightsId&lt;br /&gt;
|-&lt;br /&gt;
| 0x240&lt;br /&gt;
| 0x10 * 4&lt;br /&gt;
| Array of [[#FsEntry|FsEntry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x280&lt;br /&gt;
| 0x20 * 4&lt;br /&gt;
| Array of SHA256 hashes (over each [[#FsHeader|FsHeader]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| 0x10 * 4&lt;br /&gt;
| EncryptedKeyArea&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When the above &#039;&#039;&#039;KeyGenerationOld&#039;&#039;&#039; field is 0x2 on &amp;gt;= v3.0, different {crypto/keydata} is used for the sections&#039; data. With system content, this is used with every ncatype except ncatype0. The only other exception is {data-content} for the firm titles: this is required in order for older-system-versions to install it.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KeyGeneration&#039;&#039;&#039; 0x3 (with &#039;&#039;&#039;KeyGenerationOld&#039;&#039;&#039; set to 0x2) is used for all [[3.0.1]] sysmodules and the [[System_Version_Title]]. With [[3.0.2]], all updated titles use the crypto from [[3.0.1]] for non-ncatype0, except for firm {data-content}. In some cases various game content uses the above newer crypto as well.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KeyGeneration&#039;&#039;&#039; is always &#039;&#039;&#039;MasterKeyVersion&#039;&#039;&#039; + 1, except for generations 0 and 1 which are both version 0.&lt;br /&gt;
&lt;br /&gt;
The keyindex passed to &amp;lt;key-generation-related code&amp;gt; is determined as follows:&lt;br /&gt;
* Pre-[[3.0.0]]: The &#039;&#039;&#039;KeyAreaEncryptionKeyIndex&#039;&#039;&#039; field (0x207) is passed directly.&lt;br /&gt;
* [[3.0.0]]+: It&#039;s determined using the &#039;&#039;&#039;KeyAreaEncryptionKeyIndex&#039;&#039;&#039; field (0x207) and the &#039;&#039;&#039;KeyGenerationOld&#039;&#039;&#039; field (0x206). The latter field must be 0, 1 or 2. In each ncahdr_keyindex block, it executes &amp;quot;if(ncahdr_x206&amp;gt;=3)&amp;lt;panic&amp;gt;&amp;quot;, but that won&#039;t trigger due to the earlier check. The end result is basically the same as pre-[[3.0.0]], except when ncahdr_x206 == 0x2, final_index is new_base_index+ncahdr_keyindex. Actual implementation loads index from u32_array[ncahdr_crypto_type], where the address of u32_array is different for each ncahdr_keyindex.&lt;br /&gt;
* [[3.0.1]]+: The dedicated range check for the &#039;&#039;&#039;KeyGenerationOld&#039;&#039;&#039; field (0x206) was removed, since the updated code no longer needs it. The output from a function masked with 0xFF is now used instead of ncahdr_x206. The range check for that field was changed from {ncahdr_x206 check with panic described above}, to &amp;quot;if(index&amp;gt;=4)final_index=10;&amp;quot;(skips accessing the array and uses 10 directly). The arrays were updated with an additional entry: final_index=v301_base_index+ncahdr_keyindex.&lt;br /&gt;
** The keydata for the above index10 is not(?) known to be initialized.&lt;br /&gt;
** The new function called by the code described above does:&lt;br /&gt;
** &amp;lt;code&amp;gt;if(ncahdr_x206 &amp;lt; ncahdr_x220){ret = ncahdr_x220; } else { ret = ncahdr_x206; } return ret;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FsEntry ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| StartOffset (in Media Units which are 0x200 bytes) &lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| EndOffset (in Media Units which are 0x200 bytes) &lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FsHeader =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Version (always 2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| FsType (0 = RomFs, 1 = PartitionFs)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| HashType (0 = Auto, 2 = HierarchicalSha256, 3 = HierarchicalIntegrity)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| EncryptionType (0 = Auto, 1 = None, 2 = AesCtrOld, 3 = AesCtr, 4 = AesCtrEx)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xF8&lt;br /&gt;
| [[#HashInfo|HashInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x40&lt;br /&gt;
| [[#PatchInfo|PatchInfo]] (only used with game updates RomFs)&lt;br /&gt;
|-&lt;br /&gt;
| 0x140&lt;br /&gt;
| 0x4&lt;br /&gt;
| Generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x144&lt;br /&gt;
| 0x4&lt;br /&gt;
| SecureValue&lt;br /&gt;
|-&lt;br /&gt;
| 0x148&lt;br /&gt;
| 0x30&lt;br /&gt;
| SparseInfo (only used in sections with sparse storage)&lt;br /&gt;
|-&lt;br /&gt;
| 0x178&lt;br /&gt;
| 0x88&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The FsHeader for each section is at absoluteoffset+0x400+(sectionid*0x200), where sectionid corresponds to the index used with the entry/hash tables.&lt;br /&gt;
&lt;br /&gt;
== HashInfo ==&lt;br /&gt;
This contains information specific to the hash type in use.&lt;br /&gt;
&lt;br /&gt;
=== HierarchicalSha256 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA256 hash over the hash-table at section-start+0 with the below hash-table size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Block size in bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Must be 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| Offset of hash-table (normally zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x8&lt;br /&gt;
| Size of hash-table&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| Offset relative to section-start where the PFS0 header is located&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x8&lt;br /&gt;
| Actual byte-size of the PFS0 filesystem relative to the PFS0 header&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0xB0&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== HierarchicalIntegrity ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;IVFC&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic Number (0x20000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Master hash size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Usually 7? Unknown, could be related to total number of levels maybe?&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 1 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 1 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| Level 1 block size (in log2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 2 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 2 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| Level 2 block size (in log2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 3 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 3 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Level 3 block size (in log2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 4 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 4 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| Level 4 block size (in log2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 5 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 5 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| 0x4&lt;br /&gt;
| Level 5 block size (in log2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x90&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 6 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x98&lt;br /&gt;
| 0x8&lt;br /&gt;
| Level 6 size&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Level 6 block size (in log2)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8&lt;br /&gt;
| 0x20&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8&lt;br /&gt;
| 0x20&lt;br /&gt;
| Hash&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8&lt;br /&gt;
| 0x10&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PatchInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;BKTR&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32, must be &amp;lt;=1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| s32, must be &amp;gt;=1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x20&lt;br /&gt;
| Same as the above 0x20-bytes except with different data.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The above byte-offsets are relative to the start of the section-data.&lt;br /&gt;
&lt;br /&gt;
The two sections specified by the two BKTR entries are usually(?) at the very end of the section data(section_endoffset-{size of BKTR sections}).&lt;br /&gt;
&lt;br /&gt;
=== RomFs Patching ===&lt;br /&gt;
The [[#PatchInfo|PatchInfo]] section enables combining data from an update NCA with the RomFs from a base NCA to create a single patched RomFS image. &lt;br /&gt;
&lt;br /&gt;
The first BKTR entry describes how to map regions of the two RomFs images to create the patched RomFs. It has the following format:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Padding/Unused?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of Buckets&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Total Size of the Virtual RomFS Image&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x3FF0&lt;br /&gt;
| Base Virtual Offset for each Bucket (u64s, padded with 0s until end)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4000&lt;br /&gt;
| 0x4000*X&lt;br /&gt;
| Relocation Buckets&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Where relocation buckets are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Padding/Unused?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of Entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| End offset for this Bucket&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x3FF0&lt;br /&gt;
| Relocation Entries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Where relocation entries are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Address in Patched RomFs&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Address in Source RomFs&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1=Is from Patch RomFS, 0=Is from Base RomFS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The second BKTR entry describes the subsections within the Patch RomFs. It has the following format:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Padding/Unused?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of Buckets&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Total Size of the Physical Patch Image&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x3FF0&lt;br /&gt;
| Base Physical Offset for each Bucket (u64s, padded with 0s until end)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4000&lt;br /&gt;
| 0x4000*X&lt;br /&gt;
| Subsection Buckets&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Where subsection buckets are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Padding/Unused?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of Entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| End offset for this Bucket&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x3FF0&lt;br /&gt;
| Subsection Entries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Where subsection entries are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Address in Patch RomFs&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Padding/Unused?&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Value for subsection AES-CTR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Official code assumes the relocation entries are sorted, and performs a binary search when determining where to read from. Each subsection in the Patch RomFs has its CTR calculated separately from the others based on the value in its entry (the BKTR entries use normal crypto). Thus decrypting a Patch RomFS requires decrypting and parsing the BKTR entries before anything else.&lt;br /&gt;
&lt;br /&gt;
= Logo Section =&lt;br /&gt;
This is a PFS0.&lt;br /&gt;
&lt;br /&gt;
See [[NCA_Content_FS|here]] for the mounted-FS logo contents.&lt;br /&gt;
&lt;br /&gt;
= ExeFS Section =&lt;br /&gt;
This is a PFS0.&lt;br /&gt;
&lt;br /&gt;
See [[ExeFS|here]] for mounted-FS ExeFS contents.&lt;br /&gt;
&lt;br /&gt;
= Game Updates =&lt;br /&gt;
The section-data for ncatype1 RomFS section(section1) uses section-crypto-type 0x4.&lt;br /&gt;
&lt;br /&gt;
Game updates also contain multiple ncatype6 content, which contain &amp;quot;section0_pfs0/fragment&amp;quot;. Some of these are just NCAs, unknown for the rest(presumably NCAs with additional crypto?). The first ncatype6 content fragment file has a NDV0 header, with the NCA starting at offset 0x44.&lt;br /&gt;
&lt;br /&gt;
= PFS0 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| {Hash-table offset from superblock}&lt;br /&gt;
| {Hash-table size from superblock}&lt;br /&gt;
| Table of SHA256 hashes.&lt;br /&gt;
|-&lt;br /&gt;
| {Hash-table &amp;lt;offset+size&amp;gt; from superblock}&lt;br /&gt;
| &lt;br /&gt;
| Zeros for alignment to {alignment size}.&lt;br /&gt;
|-&lt;br /&gt;
| {PFS0 offset from superblock}&lt;br /&gt;
| {PFS0 size from superblock}&lt;br /&gt;
| The actual PFS0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the FS which has magicnum &amp;quot;PFS0&amp;quot; at header+0. This is very similar to [[Gamecard_Format|HFS0]]. A tool for extracting this FS is available [https://gist.github.com/yellows8/1a96c2b846f4ebc4bb45d7f7fa1eb7db here].&lt;br /&gt;
&lt;br /&gt;
The hash table is hashes for every {Block size from superblock} starting at the PFS0 header. The size used for the last hash is {PFS0 filesystem size from superblock} - offset_relativeto_header.&lt;br /&gt;
&lt;br /&gt;
See also the PFS0 superblock above.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;PFS0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of files&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of the string table&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Zero/Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| X&lt;br /&gt;
| File Entry Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + X&lt;br /&gt;
| Y&lt;br /&gt;
| String Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + X + Y&lt;br /&gt;
| Z&lt;br /&gt;
| Raw File Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Where File Entry Table consists of Number of Files FileEntries:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Offset of file in Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Size of file in Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Offset of filename in String Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Normally zero?&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>TotalJustice</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NS_services&amp;diff=8627</id>
		<title>NS services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NS_services&amp;diff=8627"/>
		<updated>2020-01-01T01:59:09Z</updated>

		<summary type="html">&lt;p&gt;TotalJustice: Added Type values for Application Record Format.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aoc:u =&lt;br /&gt;
This is &amp;quot;nn::aocsrv::detail::IAddOnContentManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [1.0.0-6.2.0] CountAddOnContentByApplicationId&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [1.0.0-6.2.0] ListAddOnContentByApplicationId&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CountAddOnContent&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ListAddOnContent&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [1.0.0-6.2.0] GetAddOnContentBaseIdByApplicationId&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetAddOnContentBaseId&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [1.0.0-6.2.0] PrepareAddOnContentByApplicationId&lt;br /&gt;
|-&lt;br /&gt;
| 7 || PrepareAddOnContent&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [4.0.0+] GetAddOnContentListChangedEvent&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [7.0.0+] [[#IPurchaseEventManager|CreateEcPurchasedEventManager]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [9.0.0+] [[#IPurchaseEventManager|CreatePermanentEcPurchasedEventManager]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPurchaseEventManager ==&lt;br /&gt;
This is &amp;quot;nn::ec::IPurchaseEventManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDefaultDeliveryTarget&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetDeliveryTarget&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetPurchasedEventReadableHandle&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PopPurchasedProductInfo&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [9.0.0+] PopPurchasedProductInfoWithUid&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ns:am =&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IApplicationManagerInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] This service was replaced by [[#ns:am2, ns:ec, ns:rid, ns:rt, ns:web|ns:am2]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ListApplicationRecord]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GenerateApplicationRecordCount&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetApplicationRecordUpdateSystemEvent&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetApplicationViewDeprecated&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DeleteApplicationEntity&lt;br /&gt;
|-&lt;br /&gt;
| 5 || DeleteApplicationCompletely&lt;br /&gt;
|-&lt;br /&gt;
| 6 || IsAnyApplicationEntityRedundant&lt;br /&gt;
|-&lt;br /&gt;
| 7 || DeleteRedundantApplicationEntity&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsApplicationEntityMovable&lt;br /&gt;
|-&lt;br /&gt;
| 9 || MoveApplicationEntity&lt;br /&gt;
|-&lt;br /&gt;
| 11 || CalculateApplicationOccupiedSize&lt;br /&gt;
|-&lt;br /&gt;
| 16 || PushApplicationRecord&lt;br /&gt;
|-&lt;br /&gt;
| 17 || ListApplicationRecordContentMeta&lt;br /&gt;
|-&lt;br /&gt;
| 18 || &lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#LaunchApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetApplicationContentPath]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || TerminateApplication&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [2.0.0+] ResolveApplicationContentPath&lt;br /&gt;
|-&lt;br /&gt;
| 26 || BeginInstallApplication&lt;br /&gt;
|-&lt;br /&gt;
| 27 || DeleteApplicationRecord&lt;br /&gt;
|-&lt;br /&gt;
| 30 || RequestApplicationUpdateInfo&lt;br /&gt;
|-&lt;br /&gt;
| 31 || RequestUpdateApplication&lt;br /&gt;
|-&lt;br /&gt;
| 32 || CancelApplicationDownload&lt;br /&gt;
|-&lt;br /&gt;
| 33 || ResumeApplicationDownload&lt;br /&gt;
|-&lt;br /&gt;
| 34 || &lt;br /&gt;
|-&lt;br /&gt;
| 35 || UpdateVersionList&lt;br /&gt;
|-&lt;br /&gt;
| 36 || PushLaunchVersion&lt;br /&gt;
|-&lt;br /&gt;
| 37 || ListRequiredVersion&lt;br /&gt;
|-&lt;br /&gt;
| 38 || CheckApplicationLaunchVersion&lt;br /&gt;
|-&lt;br /&gt;
| 39 || CheckApplicationLaunchRights&lt;br /&gt;
|-&lt;br /&gt;
| 40 || GetApplicationLogoData&lt;br /&gt;
|-&lt;br /&gt;
| 41 || CalculateApplicationDownloadRequiredSize&lt;br /&gt;
|-&lt;br /&gt;
| 42 || CleanupSdCard&lt;br /&gt;
|-&lt;br /&gt;
| 43 || CheckSdCardMountStatus&lt;br /&gt;
|-&lt;br /&gt;
| 44 || GetSdCardMountStatusChangedEvent&lt;br /&gt;
|-&lt;br /&gt;
| 45 || GetGameCardAttachmentEvent&lt;br /&gt;
|-&lt;br /&gt;
| 46 || GetGameCardAttachmentInfo&lt;br /&gt;
|-&lt;br /&gt;
| 47 || [[#GetTotalSpaceSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 48 || [[#GetFreeSpaceSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 49 || GetSdCardRemovedEvent&lt;br /&gt;
|-&lt;br /&gt;
| 52 || GetGameCardUpdateDetectionEvent&lt;br /&gt;
|-&lt;br /&gt;
| 53 || DisableApplicationAutoDelete&lt;br /&gt;
|-&lt;br /&gt;
| 54 || EnableApplicationAutoDelete&lt;br /&gt;
|-&lt;br /&gt;
| 55 || [[#GetApplicationDesiredLanguage]]&lt;br /&gt;
|-&lt;br /&gt;
| 56 || SetApplicationTerminateResult&lt;br /&gt;
|-&lt;br /&gt;
| 57 || ClearApplicationTerminateResult&lt;br /&gt;
|-&lt;br /&gt;
| 58 || GetLastSdCardMountUnexpectedResult&lt;br /&gt;
|-&lt;br /&gt;
| 59 || ConvertApplicationLanguageToLanguageCode&lt;br /&gt;
|-&lt;br /&gt;
| 60 || [[#ConvertLanguageCodeToApplicationLanguage]]&lt;br /&gt;
|-&lt;br /&gt;
| 61 || GetBackgroundDownloadStressTaskInfo&lt;br /&gt;
|-&lt;br /&gt;
| 62 || GetGameCardStopper&lt;br /&gt;
|-&lt;br /&gt;
| 63 || IsSystemProgramInstalled&lt;br /&gt;
|-&lt;br /&gt;
| 64 || [2.0.0+] StartApplyDeltaTask&lt;br /&gt;
|-&lt;br /&gt;
| 65 || [2.0.0+] GetRequestServerStopper&lt;br /&gt;
|-&lt;br /&gt;
| 100 || ResetToFactorySettings&lt;br /&gt;
|-&lt;br /&gt;
| 101 || ResetToFactorySettingsWithoutUserSaveData&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [2.0.0+] ResetToFactorySettingsForRefurbishment&lt;br /&gt;
|-&lt;br /&gt;
| 200 || CalculateUserSaveDataStatistics&lt;br /&gt;
|-&lt;br /&gt;
| 201 || DeleteUserSaveDataAll&lt;br /&gt;
|-&lt;br /&gt;
| 210 || DeleteUserSystemSaveData&lt;br /&gt;
|-&lt;br /&gt;
| 220 || UnregisterNetworkServiceAccount&lt;br /&gt;
|-&lt;br /&gt;
| 300 || GetApplicationShellEvent&lt;br /&gt;
|-&lt;br /&gt;
| 301 || PopApplicationShellEventInfo&lt;br /&gt;
|-&lt;br /&gt;
| 302 || LaunchLibraryApplet&lt;br /&gt;
|-&lt;br /&gt;
| 303 || TerminateLibraryApplet&lt;br /&gt;
|-&lt;br /&gt;
| 304 || LaunchSystemApplet&lt;br /&gt;
|-&lt;br /&gt;
| 305 || TerminateSystemApplet&lt;br /&gt;
|-&lt;br /&gt;
| 306 || LaunchOverlayApplet&lt;br /&gt;
|-&lt;br /&gt;
| 307 || TerminateOverlayApplet&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [[#GetApplicationControlData]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || InvalidateAllApplicationControlCache&lt;br /&gt;
|-&lt;br /&gt;
| 402 || RequestDownloadApplicationControlData&lt;br /&gt;
|-&lt;br /&gt;
| 403 || GetMaxApplicationControlCacheCount&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [2.0.0+] InvalidateApplicationControlCache&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [2.0.0+] ListApplicationControlCacheEntryInfo&lt;br /&gt;
|-&lt;br /&gt;
| 502 || [2.0.0+] RequestCheckGameCardRegistration&lt;br /&gt;
|-&lt;br /&gt;
| 503 || [2.0.0+] RequestGameCardRegistrationGoldPoint&lt;br /&gt;
|-&lt;br /&gt;
| 504 || [2.0.0+] RequestRegisterGameCard&lt;br /&gt;
|-&lt;br /&gt;
| 600 || [2.0.0+] CountApplicationContentMeta&lt;br /&gt;
|-&lt;br /&gt;
| 601 || [2.0.0+] [[#ListApplicationContentMetaStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 602 || [2.0.0+] ListAvailableAddOnContent&lt;br /&gt;
|-&lt;br /&gt;
| 603 || [2.0.0+] GetOwnedApplicationContentMetaStatus&lt;br /&gt;
|-&lt;br /&gt;
| 604 || [2.0.0+] RegisterContentsExternalKey&lt;br /&gt;
|-&lt;br /&gt;
| 605 || [2.0.0+] ListApplicationContentMetaStatusWithRightsCheck&lt;br /&gt;
|-&lt;br /&gt;
| 700 || [2.0.0+] PushDownloadTaskList&lt;br /&gt;
|-&lt;br /&gt;
| 701 || [2.0.0+] ClearTaskStatusList&lt;br /&gt;
|-&lt;br /&gt;
| 702 || [2.0.0+] RequestDownloadTaskList&lt;br /&gt;
|-&lt;br /&gt;
| 703 || [2.0.0+] RequestEnsureDownloadTask&lt;br /&gt;
|-&lt;br /&gt;
| 704 || [2.0.0+] ListDownloadTaskStatus&lt;br /&gt;
|-&lt;br /&gt;
| 705 || [2.0.0+] RequestDownloadTaskListData&lt;br /&gt;
|-&lt;br /&gt;
| 800 || [2.0.0+] RequestVersionList&lt;br /&gt;
|-&lt;br /&gt;
| 801 || [2.0.0+] ListVersionList&lt;br /&gt;
|-&lt;br /&gt;
| 900 || [2.0.0+] GetApplicationRecord&lt;br /&gt;
|-&lt;br /&gt;
| 901 || [2.0.0+] GetApplicationRecordProperty&lt;br /&gt;
|-&lt;br /&gt;
| 902 || [2.0.0+] EnableApplicationAutoUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 903 || [2.0.0+] DisableApplicationAutoUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 904 || [2.0.0+] TouchApplication&lt;br /&gt;
|-&lt;br /&gt;
| 905 || [2.0.0+] RequestApplicationUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 906 || [2.0.0+] IsApplicationUpdateRequested&lt;br /&gt;
|-&lt;br /&gt;
| 907 || [2.0.0+] WithdrawApplicationUpdateRequest&lt;br /&gt;
|-&lt;br /&gt;
| 908 || [2.0.0+] ListApplicationRecordInstalledContentMeta&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [2.0.0+] RequestVerifyApplicationDeprecated&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [2.0.0+] CorruptApplicationForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 1200 || [2.0.0+] [[#NeedsUpdateVulnerability]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [2.0.0+] IsAnyApplicationEntityInstalled&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [2.0.0+] DeleteApplicationContentEntities&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [2.0.0+] CleanupUnrecordedApplicationEntity&lt;br /&gt;
|-&lt;br /&gt;
| 1400 || [2.0.0+] PrepareShutdown&lt;br /&gt;
|-&lt;br /&gt;
| 1500 || [2.0.0+] FormatSdCard&lt;br /&gt;
|-&lt;br /&gt;
| 1501 || [2.0.0+] NeedsSystemUpdateToFormatSdCard&lt;br /&gt;
|-&lt;br /&gt;
| 1502 || [2.0.0+] GetLastSdCardFormatUnexpectedResult&lt;br /&gt;
|-&lt;br /&gt;
| 1503 || [2.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 1600 || [2.0.0+] GetSystemSeedForPseudoDeviceId&lt;br /&gt;
|-&lt;br /&gt;
| 1700 || [2.0.0+] ListApplicationDownloadingContentMeta&lt;br /&gt;
|-&lt;br /&gt;
| 1800 || [2.0.0+] IsNotificationSetupCompleted&lt;br /&gt;
|-&lt;br /&gt;
| 1801 || [2.0.0+] GetLastNotificationInfoCount&lt;br /&gt;
|-&lt;br /&gt;
| 1802 || [2.0.0+] ListLastNotificationInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ListApplicationRecord ==&lt;br /&gt;
Takes a type-0x6 output buffer containing an array of the below record and an s32 entry_offset, returns an output s32 out_entrycount.&lt;br /&gt;
&lt;br /&gt;
Returns an array of entries with the below format using the specified offset and count.&lt;br /&gt;
&lt;br /&gt;
=== Application Record Format ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[NCM_services#ApplicationId|ApplicationId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x1&lt;br /&gt;
| Type? (Known values: 0x2=Installing?, 0x3=Installed / Gamecard inserted, 0x5=Gamecard not inserted, 0xB=Archived)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unknown, usually 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unknown, usually zeros?&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unknown, seems to change between reboots and removing/reinserting gamecards&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| 0x7&lt;br /&gt;
| Unknown, usually zeros?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LaunchApplication ==&lt;br /&gt;
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output u64 PID.&lt;br /&gt;
&lt;br /&gt;
Launches an application title which is registered with NS.&lt;br /&gt;
&lt;br /&gt;
== GetApplicationContentPath ==&lt;br /&gt;
Takes a 0x16-type output buffer, an u8 [[NCM_services#ContentMetaType|ContentMetaType]], and an [[NCM_services#ApplicationId|ApplicationId]].&lt;br /&gt;
&lt;br /&gt;
The input [[NCM_services#ApplicationId|ApplicationId]] is used with the application-title table like various other cmds, anything not in that table can&#039;t be used with this.&lt;br /&gt;
&lt;br /&gt;
Returns a string path for the specified type of patch content with this [[NCM_services#ApplicationId|ApplicationId]], otherwise returns regular-application paths when update-title not installed. Returns an error when the specified type of content doesn&#039;t exist for this title. Starts with &amp;quot;@{SdCardContent,UserContent}://&amp;quot; and ends in &amp;quot;.nca&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
For gamecard content, the output path is: &amp;quot;@GcSXXXXXXXX:/&amp;lt;NcaId&amp;gt;.nca&amp;quot;. NCA-type0 with gamecard returns 0 with an empty output string.&lt;br /&gt;
&lt;br /&gt;
The output string is then used by the user-process with [[Filesystem_services|FS]] to mount the content.&lt;br /&gt;
&lt;br /&gt;
== GetTotalSpaceSize ==&lt;br /&gt;
Takes an input media-id that must be 5.&lt;br /&gt;
&lt;br /&gt;
Returns the u64 from [[Content_Manager_services#IContentStorage]] cmd22.&lt;br /&gt;
&lt;br /&gt;
== GetFreeSpaceSize ==&lt;br /&gt;
Takes an input media-id that must be 5.&lt;br /&gt;
&lt;br /&gt;
Returns the u64 from [[Content_Manager_services#IContentStorage]] cmd23.&lt;br /&gt;
&lt;br /&gt;
== GetApplicationDesiredLanguage ==&lt;br /&gt;
Takes an input u8 language-bitmask, returns an output u8 [[control.nacp]] langentry index.&lt;br /&gt;
&lt;br /&gt;
User-processes generate the language-bitmask with the following for all 16 lang-entries: &amp;lt;code&amp;gt;if(&amp;lt;either string in langentry[i] is non-empty&amp;gt;)bitmask |= 1&amp;lt;&amp;lt;i&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ConvertLanguageCodeToApplicationLanguage ==&lt;br /&gt;
Takes an input u8 pointer for the resulting Id to be written to and a string represented as a u64 (i.e 0x53552D6E65 for &#039;en-US&#039;).&lt;br /&gt;
&lt;br /&gt;
Returns 0 if an ID was successfully found, otherwise returns 0x25810.&lt;br /&gt;
&lt;br /&gt;
== GetApplicationControlData ==&lt;br /&gt;
Takes an input u8 [[#ApplicationControlSource]], an [[NCM_services#ApplicationId|ApplicationId]], and a type-0x6 output buffer. Returns an output u32 for actual_size. Official user-processes use buffer size 0x24000. [[qlaunch]] only uses flag value 0x1 (Storage if not in cache).&lt;br /&gt;
&lt;br /&gt;
Loads cached [[control.nacp]] to buf+0 and the cached icon to buf+0x4000. Returns an error if the buffer is too small.&lt;br /&gt;
&lt;br /&gt;
===ApplicationControlSource===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| CacheOnly (Returns data from cache)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| Storage (Returns data from storage if not present in cache)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| StorageOnly (Returns data from storage without using cache)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ListApplicationContentMetaStatus ==&lt;br /&gt;
Takes a type-0x6 output buffer containing an array of the below entries, an input s32 index and [[NCM_services#ApplicationId|ApplicationId]], returns an output s32 out_entrycount.&lt;br /&gt;
&lt;br /&gt;
Returns 0x10-byte entries using the specified [[NCM_services#ApplicationId|ApplicationId]] starting at the specified index. Can only return game titles. The second entry if any is the update-title usually. When the input entryindex is &amp;gt;= totalentries, this will return 0 with out_entrycount=0.&lt;br /&gt;
&lt;br /&gt;
Entry structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#ContentMetaType|ContentMetaType]] (&amp;quot;type&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#StorageId|StorageId]] (&amp;quot;installedStorage&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unknown. Non-zero with output from cmd 605, differs for app/update titles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[NCM_services#ApplicationId|ApplicationId]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ns:am2, ns:ec, ns:rid, ns:rt, ns:web =&lt;br /&gt;
These services are all, at the top level, &amp;quot;nn::ns::detail::IServiceGetterInterface&amp;quot;. These commands check a state field for a command-specific bit and returns an error if not set, this is likely a permissions check for service+command.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 7988 || [6.0.0+] [[#IDynamicRightsInterface|GetDynamicRightsInterface]].&lt;br /&gt;
|-&lt;br /&gt;
| 7989 || [5.1.0+] [[#IReadOnlyApplicationControlDataInterface|GetReadOnlyApplicationControlDataInterface]].&lt;br /&gt;
|-&lt;br /&gt;
| 7991 || [5.0.0+] [[#IReadOnlyApplicationRecordInterface|GetReadOnlyApplicationRecordInterface]].&lt;br /&gt;
|-&lt;br /&gt;
| 7992 || [4.0.0+] [[#IECommerceInterface|GetECommerceInterface]]&lt;br /&gt;
|-&lt;br /&gt;
| 7993 || [4.0.0+] [[#IApplicationVersionInterface|GetApplicationVersionInterface]]&lt;br /&gt;
|-&lt;br /&gt;
| 7994 || [[#IFactoryResetInterface|GetFactoryResetInterface]]&lt;br /&gt;
|-&lt;br /&gt;
| 7995 || [[#IAccountProxyInterface|GetAccountProxyInterface]]&lt;br /&gt;
|-&lt;br /&gt;
| 7996 || [[#IApplicationManagerInterface|GetApplicationManagerInterface]]&lt;br /&gt;
|-&lt;br /&gt;
| 7997 || [[#IDownloadTaskInterface|GetDownloadTaskInterface]]&lt;br /&gt;
|-&lt;br /&gt;
| 7998 || [[#IContentManagementInterface|GetContentManagementInterface]]&lt;br /&gt;
|-&lt;br /&gt;
| 7999 || [[#IDocumentInterface|GetDocumentInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IAccountProxyInterface ===&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IAccountProxyInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserAccount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IApplicationManagerInterface ===&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IApplicationManagerInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ListApplicationRecord]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GenerateApplicationRecordCount&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetApplicationRecordUpdateSystemEvent&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetApplicationViewDeprecated&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DeleteApplicationEntity&lt;br /&gt;
|-&lt;br /&gt;
| 5 || DeleteApplicationCompletely&lt;br /&gt;
|-&lt;br /&gt;
| 6 || IsAnyApplicationEntityRedundant&lt;br /&gt;
|-&lt;br /&gt;
| 7 || DeleteRedundantApplicationEntity&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsApplicationEntityMovable&lt;br /&gt;
|-&lt;br /&gt;
| 9 || MoveApplicationEntity&lt;br /&gt;
|-&lt;br /&gt;
| 11 || CalculateApplicationOccupiedSize&lt;br /&gt;
|-&lt;br /&gt;
| 16 || PushApplicationRecord&lt;br /&gt;
|-&lt;br /&gt;
| 17 || ListApplicationRecordContentMeta&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [1.0.0-5.1.0] LaunchApplicationOld&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetApplicationContentPath]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || TerminateApplication&lt;br /&gt;
|-&lt;br /&gt;
| 23 || ResolveApplicationContentPath&lt;br /&gt;
|-&lt;br /&gt;
| 26 || BeginInstallApplication&lt;br /&gt;
|-&lt;br /&gt;
| 27 || DeleteApplicationRecord&lt;br /&gt;
|-&lt;br /&gt;
| 30 || [[#RequestApplicationUpdateInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 31 || [1.0.0-3.0.2] &lt;br /&gt;
|-&lt;br /&gt;
| 32 || CancelApplicationDownload&lt;br /&gt;
|-&lt;br /&gt;
| 33 || ResumeApplicationDownload&lt;br /&gt;
|-&lt;br /&gt;
| 35 || UpdateVersionList&lt;br /&gt;
|-&lt;br /&gt;
| 36 || PushLaunchVersion&lt;br /&gt;
|-&lt;br /&gt;
| 37 || ListRequiredVersion&lt;br /&gt;
|-&lt;br /&gt;
| 38 || CheckApplicationLaunchVersion&lt;br /&gt;
|-&lt;br /&gt;
| 39 || [1.0.0-6.2.0] CheckApplicationLaunchRights&lt;br /&gt;
|-&lt;br /&gt;
| 40 || GetApplicationLogoData&lt;br /&gt;
|-&lt;br /&gt;
| 41 || CalculateApplicationDownloadRequiredSize&lt;br /&gt;
|-&lt;br /&gt;
| 42 || CleanupSdCard&lt;br /&gt;
|-&lt;br /&gt;
| 43 || CheckSdCardMountStatus&lt;br /&gt;
|-&lt;br /&gt;
| 44 || GetSdCardMountStatusChangedEvent&lt;br /&gt;
|-&lt;br /&gt;
| 45 || GetGameCardAttachmentEvent&lt;br /&gt;
|-&lt;br /&gt;
| 46 || GetGameCardAttachmentInfo&lt;br /&gt;
|-&lt;br /&gt;
| 47 || [[#GetTotalSpaceSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 48 || [[#GetFreeSpaceSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 49 || GetSdCardRemovedEvent&lt;br /&gt;
|-&lt;br /&gt;
| 52 || GetGameCardUpdateDetectionEvent&lt;br /&gt;
|-&lt;br /&gt;
| 53 || DisableApplicationAutoDelete&lt;br /&gt;
|-&lt;br /&gt;
| 54 || EnableApplicationAutoDelete&lt;br /&gt;
|-&lt;br /&gt;
| 55 || GetApplicationDesiredLanguage&lt;br /&gt;
|-&lt;br /&gt;
| 56 || SetApplicationTerminateResult&lt;br /&gt;
|-&lt;br /&gt;
| 57 || ClearApplicationTerminateResult&lt;br /&gt;
|-&lt;br /&gt;
| 58 || GetLastSdCardMountUnexpectedResult&lt;br /&gt;
|-&lt;br /&gt;
| 59 || ConvertApplicationLanguageToLanguageCode&lt;br /&gt;
|-&lt;br /&gt;
| 60 || [[#ConvertLanguageCodeToApplicationLanguage]]&lt;br /&gt;
|-&lt;br /&gt;
| 61 || GetBackgroundDownloadStressTaskInfo&lt;br /&gt;
|-&lt;br /&gt;
| 62 || GetGameCardStopper&lt;br /&gt;
|-&lt;br /&gt;
| 63 || IsSystemProgramInstalled&lt;br /&gt;
|-&lt;br /&gt;
| 64 || StartApplyDeltaTask&lt;br /&gt;
|-&lt;br /&gt;
| 65 || GetRequestServerStopper&lt;br /&gt;
|-&lt;br /&gt;
| 66 || [3.0.0+] GetBackgroundApplyDeltaStressTaskInfo&lt;br /&gt;
|-&lt;br /&gt;
| 67 || [3.0.0+] CancelApplicationApplyDelta&lt;br /&gt;
|-&lt;br /&gt;
| 68 || [3.0.0+] ResumeApplicationApplyDelta&lt;br /&gt;
|-&lt;br /&gt;
| 69 || [3.0.0+] CalculateApplicationApplyDeltaRequiredSize&lt;br /&gt;
|-&lt;br /&gt;
| 70 || [3.0.0+] ResumeAll&lt;br /&gt;
|-&lt;br /&gt;
| 71 || [3.0.0+] GetStorageSize&lt;br /&gt;
|-&lt;br /&gt;
| 80 || [3.0.0+] RequestDownloadApplication&lt;br /&gt;
|-&lt;br /&gt;
| 81 || [3.0.0+] RequestDownloadAddOnContent&lt;br /&gt;
|-&lt;br /&gt;
| 82 || [3.0.0+] DownloadApplication&lt;br /&gt;
|-&lt;br /&gt;
| 83 || [4.0.0-6.2.0] CheckApplicationResumeRights&lt;br /&gt;
|-&lt;br /&gt;
| 84 || [4.0.0+] GetDynamicCommitEvent&lt;br /&gt;
|-&lt;br /&gt;
| 85 || [4.0.0+] RequestUpdateApplication2&lt;br /&gt;
|-&lt;br /&gt;
| 86 || [4.0.0+] EnableApplicationCrashReport&lt;br /&gt;
|-&lt;br /&gt;
| 87 || [4.0.0+] IsApplicationCrashReportEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 90 || [4.0.0-8.1.0] BoostSystemMemoryResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| 91 || [5.0.0+] DeprecatedLaunchApplication&lt;br /&gt;
|-&lt;br /&gt;
| 92 || [5.0.0+] GetRunningApplicationProgramId&lt;br /&gt;
|-&lt;br /&gt;
| 93 || [5.0.0+] GetMainApplicationProgramIndex&lt;br /&gt;
|-&lt;br /&gt;
| 94 || [6.0.0+] LaunchApplication&lt;br /&gt;
|-&lt;br /&gt;
| 95 || [6.0.0+] GetApplicationLaunchInfo&lt;br /&gt;
|-&lt;br /&gt;
| 96 || [6.0.0+] AcquireApplicationLaunchInfo&lt;br /&gt;
|-&lt;br /&gt;
| 97 || [6.0.0+] GetMainApplicationProgramIndexByApplicationLaunchInfo&lt;br /&gt;
|-&lt;br /&gt;
| 98 || [6.0.0+] EnableApplicationAllThreadDumpOnCrash&lt;br /&gt;
|-&lt;br /&gt;
| 99 || [8.0.0+] [[#LaunchDevMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || ResetToFactorySettings&lt;br /&gt;
|-&lt;br /&gt;
| 101 || ResetToFactorySettingsWithoutUserSaveData&lt;br /&gt;
|-&lt;br /&gt;
| 102 || ResetToFactorySettingsForRefurbishment&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [9.1.0+] ResetToFactorySettingsWithPlatformRegion&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [9.1.0+] ResetToFactorySettingsWithPlatformRegionAuthentication&lt;br /&gt;
|-&lt;br /&gt;
| 200 || CalculateUserSaveDataStatistics&lt;br /&gt;
|-&lt;br /&gt;
| 201 || DeleteUserSaveDataAll&lt;br /&gt;
|-&lt;br /&gt;
| 210 || DeleteUserSystemSaveData&lt;br /&gt;
|-&lt;br /&gt;
| 211 || [6.0.0+] DeleteSaveData&lt;br /&gt;
|-&lt;br /&gt;
| 220 || UnregisterNetworkServiceAccount&lt;br /&gt;
|-&lt;br /&gt;
| 221 || [6.0.0+] UnregisterNetworkServiceAccountWithUserSaveDataDeletion&lt;br /&gt;
|-&lt;br /&gt;
| 300 || GetApplicationShellEvent&lt;br /&gt;
|-&lt;br /&gt;
| 301 || PopApplicationShellEventInfo&lt;br /&gt;
|-&lt;br /&gt;
| 302 || LaunchLibraryApplet&lt;br /&gt;
|-&lt;br /&gt;
| 303 || TerminateLibraryApplet&lt;br /&gt;
|-&lt;br /&gt;
| 304 || LaunchSystemApplet&lt;br /&gt;
|-&lt;br /&gt;
| 305 || TerminateSystemApplet&lt;br /&gt;
|-&lt;br /&gt;
| 306 || LaunchOverlayApplet&lt;br /&gt;
|-&lt;br /&gt;
| 307 || TerminateOverlayApplet&lt;br /&gt;
|-&lt;br /&gt;
| 400 || GetApplicationControlData&lt;br /&gt;
|-&lt;br /&gt;
| 401 || InvalidateAllApplicationControlCache&lt;br /&gt;
|-&lt;br /&gt;
| 402 || RequestDownloadApplicationControlData&lt;br /&gt;
|-&lt;br /&gt;
| 403 || GetMaxApplicationControlCacheCount&lt;br /&gt;
|-&lt;br /&gt;
| 404 || InvalidateApplicationControlCache&lt;br /&gt;
|-&lt;br /&gt;
| 405 || ListApplicationControlCacheEntryInfo&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [6.0.0+] GetApplicationControlProperty&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [8.0.0+] [[#ListApplicationTitle]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [8.0.0+] [[#ListApplicationIcon]]&lt;br /&gt;
|-&lt;br /&gt;
| 502 || RequestCheckGameCardRegistration&lt;br /&gt;
|-&lt;br /&gt;
| 503 || [[#RequestGameCardRegistrationGoldPoint]]&lt;br /&gt;
|-&lt;br /&gt;
| 504 || RequestRegisterGameCard&lt;br /&gt;
|-&lt;br /&gt;
| 505 || [3.0.0+] GetGameCardMountFailureEvent&lt;br /&gt;
|-&lt;br /&gt;
| 506 || [3.0.0+] IsGameCardInserted&lt;br /&gt;
|-&lt;br /&gt;
| 507 || [3.0.0+] EnsureGameCardAccess&lt;br /&gt;
|-&lt;br /&gt;
| 508 || [3.0.0+] GetLastGameCardMountFailureResult&lt;br /&gt;
|-&lt;br /&gt;
| 509 || [5.0.0+] ListApplicationIdOnGameCard&lt;br /&gt;
|-&lt;br /&gt;
| 510 || [9.0.0+] [[#GetGameCardPlatformRegion]]&lt;br /&gt;
|-&lt;br /&gt;
| 600 || CountApplicationContentMeta&lt;br /&gt;
|-&lt;br /&gt;
| 601 || [[#ListApplicationContentMetaStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 602 || [2.0.0-5.1.0] ListAvailableAddOnContent&lt;br /&gt;
|-&lt;br /&gt;
| 603 || GetOwnedApplicationContentMetaStatus&lt;br /&gt;
|-&lt;br /&gt;
| 604 || RegisterContentsExternalKey&lt;br /&gt;
|-&lt;br /&gt;
| 605 || ListApplicationContentMetaStatusWithRightsCheck&lt;br /&gt;
|-&lt;br /&gt;
| 606 || [3.0.0+] GetContentMetaStorage&lt;br /&gt;
|-&lt;br /&gt;
| 607 || [6.0.0+] ListAvailableAddOnContent&lt;br /&gt;
|-&lt;br /&gt;
| 700 || PushDownloadTaskList&lt;br /&gt;
|-&lt;br /&gt;
| 701 || ClearTaskStatusList&lt;br /&gt;
|-&lt;br /&gt;
| 702 || RequestDownloadTaskList&lt;br /&gt;
|-&lt;br /&gt;
| 703 || RequestEnsureDownloadTask&lt;br /&gt;
|-&lt;br /&gt;
| 704 || ListDownloadTaskStatus&lt;br /&gt;
|-&lt;br /&gt;
| 705 || [[#RequestDownloadTaskListData]]&lt;br /&gt;
|-&lt;br /&gt;
| 800 || RequestVersionList&lt;br /&gt;
|-&lt;br /&gt;
| 801 || ListVersionList&lt;br /&gt;
|-&lt;br /&gt;
| 802 || [3.0.0+] [[#RequestVersionListData]]&lt;br /&gt;
|-&lt;br /&gt;
| 900 || GetApplicationRecord&lt;br /&gt;
|-&lt;br /&gt;
| 901 || GetApplicationRecordProperty&lt;br /&gt;
|-&lt;br /&gt;
| 902 || EnableApplicationAutoUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 903 || DisableApplicationAutoUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 904 || TouchApplication&lt;br /&gt;
|-&lt;br /&gt;
| 905 || RequestApplicationUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 906 || IsApplicationUpdateRequested&lt;br /&gt;
|-&lt;br /&gt;
| 907 || WithdrawApplicationUpdateRequest&lt;br /&gt;
|-&lt;br /&gt;
| 908 || ListApplicationRecordInstalledContentMeta&lt;br /&gt;
|-&lt;br /&gt;
| 909 || [3.0.0+] WithdrawCleanupAddOnContentsWithNoRightsRecommendation&lt;br /&gt;
|-&lt;br /&gt;
| 910 || [5.0.0+] HasApplicationRecord&lt;br /&gt;
|-&lt;br /&gt;
| 911 || [5.1.0+] SetPreInstalledApplication&lt;br /&gt;
|-&lt;br /&gt;
| 912 || [5.1.0+] ClearPreInstalledApplicationFlag&lt;br /&gt;
|-&lt;br /&gt;
| 913 || [9.0.0+] ListAllApplicationRecord&lt;br /&gt;
|-&lt;br /&gt;
| 914 || [9.0.0+] HideApplicationRecord&lt;br /&gt;
|-&lt;br /&gt;
| 915 || [9.0.0+] ShowApplicationRecord&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || RequestVerifyApplicationDeprecated&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || CorruptApplicationForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 1002 || [3.0.0+] RequestVerifyAddOnContentsRights&lt;br /&gt;
|-&lt;br /&gt;
| 1003 || [5.0.0+] RequestVerifyApplication&lt;br /&gt;
|-&lt;br /&gt;
| 1004 || [5.0.0+] CorruptContentForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 1200 || [[#NeedsUpdateVulnerability]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || IsAnyApplicationEntityInstalled&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || DeleteApplicationContentEntities&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || CleanupUnrecordedApplicationEntity&lt;br /&gt;
|-&lt;br /&gt;
| 1303 || [3.0.0+] CleanupAddOnContentsWithNoRights&lt;br /&gt;
|-&lt;br /&gt;
| 1304 || [3.0.0+] DeleteApplicationContentEntity&lt;br /&gt;
|-&lt;br /&gt;
| 1308 || [5.0.0+] DeleteApplicationCompletelyForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 1309 || [6.0.0+] CleanupUnavailableAddOnContents&lt;br /&gt;
|-&lt;br /&gt;
| 1400 || PrepareShutdown&lt;br /&gt;
|-&lt;br /&gt;
| 1500 || FormatSdCard&lt;br /&gt;
|-&lt;br /&gt;
| 1501 || NeedsSystemUpdateToFormatSdCard&lt;br /&gt;
|-&lt;br /&gt;
| 1502 || GetLastSdCardFormatUnexpectedResult&lt;br /&gt;
|-&lt;br /&gt;
| 1504 || [3.0.0+] InsertSdCard&lt;br /&gt;
|-&lt;br /&gt;
| 1505 || [3.0.0+] RemoveSdCard&lt;br /&gt;
|-&lt;br /&gt;
| 1506 || [9.0.0+] GetSdCardStartupStatus&lt;br /&gt;
|-&lt;br /&gt;
| 1600 || GetSystemSeedForPseudoDeviceId&lt;br /&gt;
|-&lt;br /&gt;
| 1601 || [3.0.0+] ResetSystemSeedForPseudoDeviceId&lt;br /&gt;
|-&lt;br /&gt;
| 1700 || ListApplicationDownloadingContentMeta&lt;br /&gt;
|-&lt;br /&gt;
| 1701 || [3.0.0+] GetApplicationView&lt;br /&gt;
|-&lt;br /&gt;
| 1702 || [3.0.0+] GetApplicationDownloadTaskStatus&lt;br /&gt;
|-&lt;br /&gt;
| 1703 || [4.0.0+] GetApplicationViewDownloadErrorContext&lt;br /&gt;
|-&lt;br /&gt;
| 1704 || [8.0.0+] GetApplicationViewWithPromotionInfo&lt;br /&gt;
|-&lt;br /&gt;
| 1800 || IsNotificationSetupCompleted&lt;br /&gt;
|-&lt;br /&gt;
| 1801 || GetLastNotificationInfoCount&lt;br /&gt;
|-&lt;br /&gt;
| 1802 || ListLastNotificationInfo&lt;br /&gt;
|-&lt;br /&gt;
| 1803 || [3.0.0+] ListNotificationTask&lt;br /&gt;
|-&lt;br /&gt;
| 1900 || [3.0.0+] IsActiveAccount&lt;br /&gt;
|-&lt;br /&gt;
| 1901 || [4.0.0+] RequestDownloadApplicationPrepurchasedRights&lt;br /&gt;
|-&lt;br /&gt;
| 1902 || [5.0.0+] GetApplicationTicketInfo&lt;br /&gt;
|-&lt;br /&gt;
| 2000 || [4.0.0+] [[#GetSystemDeliveryInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 2001 || [4.0.0+] [[#SelectLatestSystemDeliveryInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 2002 || [4.0.0+] [[#VerifyDeliveryProtocolVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 2003 || [4.0.0+] [[#GetApplicationDeliveryInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 2004 || [4.0.0+] [[#HasAllContentsToDeliver]]&lt;br /&gt;
|-&lt;br /&gt;
| 2005 || [4.0.0+] [[#CompareApplicationDeliveryInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 2006 || [4.0.0+] [[#CanDeliverApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 2007 || [4.0.0+] [[#ListContentMetaKeyToDeliverApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 2008 || [4.0.0+] [[#NeedsSystemUpdateToDeliverApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 2009 || [4.0.0+] [[#EstimateRequiredSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2010 || [4.0.0+] [[#RequestReceiveApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 2011 || [4.0.0+] [[#CommitReceiveApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 2012 || [4.0.0+] [[#GetReceiveApplicationProgress]]&lt;br /&gt;
|-&lt;br /&gt;
| 2013 || [4.0.0+] [[#RequestSendApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 2014 || [4.0.0+] [[#GetSendApplicationProgress]]&lt;br /&gt;
|-&lt;br /&gt;
| 2015 || [4.0.0+] [[#CompareSystemDeliveryInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 2016 || [4.0.0+] [[#ListNotCommittedContentMeta]]&lt;br /&gt;
|-&lt;br /&gt;
| 2017 || [4.0.0+] [[#RecoverDownloadTask]]&lt;br /&gt;
|-&lt;br /&gt;
| 2018 || [5.0.0+] [[#GetApplicationDeliveryInfoHash]]&lt;br /&gt;
|-&lt;br /&gt;
| 2050 || [6.0.0+] GetApplicationRightsOnClient&lt;br /&gt;
|-&lt;br /&gt;
| 2051 || [9.0.0+] InvalidateRightsIdCache&lt;br /&gt;
|-&lt;br /&gt;
| 2100 || [6.0.0+] GetApplicationTerminateResult&lt;br /&gt;
|-&lt;br /&gt;
| 2101 || [6.0.0+] GetRawApplicationTerminateResult&lt;br /&gt;
|-&lt;br /&gt;
| 2150 || [6.0.0+] CreateRightsEnvironment&lt;br /&gt;
|-&lt;br /&gt;
| 2151 || [6.0.0+] DestroyRightsEnvironment&lt;br /&gt;
|-&lt;br /&gt;
| 2152 || [6.0.0+] ActivateRightsEnvironment&lt;br /&gt;
|-&lt;br /&gt;
| 2153 || [6.0.0+] DeactivateRightsEnvironment&lt;br /&gt;
|-&lt;br /&gt;
| 2154 || [6.0.0+] ForceActivateRightsContextForExit&lt;br /&gt;
|-&lt;br /&gt;
| 2155 || [7.0.0+] UpdateRightsEnvironmentStatus&lt;br /&gt;
|-&lt;br /&gt;
| 2156 || [9.0.0+] CreateRightsEnvironmentForPreomia&lt;br /&gt;
|-&lt;br /&gt;
| 2160 || [6.0.0+] AddTargetApplicationToRightsEnvironment&lt;br /&gt;
|-&lt;br /&gt;
| 2161 || [6.0.0+] SetUsersToRightsEnvironment&lt;br /&gt;
|-&lt;br /&gt;
| 2170 || [6.0.0+] GetRightsEnvironmentStatus&lt;br /&gt;
|-&lt;br /&gt;
| 2171 || [6.0.0+] GetRightsEnvironmentStatusChangedEvent&lt;br /&gt;
|-&lt;br /&gt;
| 2180 || [6.0.0+] RequestExtendExpirationInRightsEnvironment&lt;br /&gt;
|-&lt;br /&gt;
| 2181 || [6.0.0+] GetResultOfExtendExpirationInRightsEnvironment&lt;br /&gt;
|-&lt;br /&gt;
| 2182 || [6.0.0+] SetActiveRightsContextUsingStateToRightsEnvironment&lt;br /&gt;
|-&lt;br /&gt;
| 2190 || [6.0.0+] [[#GetRightsEnvironmentHandleForApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 2199 || [6.0.0+] GetRightsEnvironmentCountForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 2200 || [6.0.0+] GetGameCardApplicationCopyIdentifier&lt;br /&gt;
|-&lt;br /&gt;
| 2201 || [6.0.0+] GetInstalledApplicationCopyIdentifier&lt;br /&gt;
|-&lt;br /&gt;
| 2250 || [6.0.0-6.2.0] RequestReportActiveELicence&lt;br /&gt;
|-&lt;br /&gt;
| 2300 || [6.0.0-8.1.0] ListEventLog&lt;br /&gt;
|-&lt;br /&gt;
| 2350 || [7.0.0+] PerformAutoUpdateByApplicationId&lt;br /&gt;
|-&lt;br /&gt;
| 2351 || [9.0.0+] [[#RequestNoDownloadRightsErrorResolution]]&lt;br /&gt;
|-&lt;br /&gt;
| 2352 || [9.0.0+] [[#RequestResolveNoDownloadRightsError]]&lt;br /&gt;
|-&lt;br /&gt;
| 2400 || [8.0.0+] GetPromotionInfo&lt;br /&gt;
|-&lt;br /&gt;
| 2401 || [8.0.0+] CountPromotionInfo&lt;br /&gt;
|-&lt;br /&gt;
| 2402 || [8.0.0+] ListPromotionInfo&lt;br /&gt;
|-&lt;br /&gt;
| 2403 || [8.0.0+] ImportPromotionJsonForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 2404 || [8.0.0+] ClearPromotionInfoForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 2500 || [8.0.0+] ConfirmAvailableTime&lt;br /&gt;
|-&lt;br /&gt;
| 2510 || [9.0.0+] [[#CreateApplicationResource]]&lt;br /&gt;
|-&lt;br /&gt;
| 2511 || [9.0.0+] [[#GetApplicationResource]]&lt;br /&gt;
|-&lt;br /&gt;
| 2513 || [9.0.0+] LaunchPreomia&lt;br /&gt;
|-&lt;br /&gt;
| 2514 || [9.0.0+] ClearTaskOfAsyncTaskManager&lt;br /&gt;
|-&lt;br /&gt;
| 2800 || [9.0.0+] GetApplicationIdOfPreomia&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] RequestDownloadAddOnContent now takes an additional 8-bytes of input.&lt;br /&gt;
&lt;br /&gt;
==== RequestApplicationUpdateInfo ====&lt;br /&gt;
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncValue]].&lt;br /&gt;
&lt;br /&gt;
The data that can be read from the [[#IAsyncValue]] is [[#ApplicationUpdateInfo]].&lt;br /&gt;
&lt;br /&gt;
==== LaunchDevMenu ====&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by AM cmd [[Applet_Manager_services#LaunchDevMenu|LaunchDevMenu]].&lt;br /&gt;
&lt;br /&gt;
This loads ProgramIds from [[System_Settings|system-settings]] &amp;lt;code&amp;gt;ns.applet!devmenu_id&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ns.applet!devoverlaydisp_id&amp;lt;/code&amp;gt;, which only exists on devunits. An error is thrown if loading these fail.&lt;br /&gt;
&lt;br /&gt;
[[NCM_services#ncm|OpenContentMetaDatabase]] is used with StorageId = NandSystem, then IContentMetaDatabase GetLatestContentMetaKey is used with both of the above ProgramIds to verify that the cmd is successful.&lt;br /&gt;
&lt;br /&gt;
Then if the above succeeds, the above titles are launched with the above StorageId via [[Process_Manager_services|pmshell]] LaunchProgram, with a 0.5s sleep-thread afterwards on success.&lt;br /&gt;
&lt;br /&gt;
==== ListApplicationTitle ====&lt;br /&gt;
Takes a total of 0x10-bytes of input, a type-0x5 input buffer, an input handle, returns an output Event handle and an [[#IAsyncValue]].&lt;br /&gt;
&lt;br /&gt;
==== ListApplicationIcon ====&lt;br /&gt;
Takes a total of 0x10-bytes of input, a type-0x5 input buffer, an input handle, returns an output Event handle and an [[#IAsyncValue]].&lt;br /&gt;
&lt;br /&gt;
==== RequestGameCardRegistrationGoldPoint ====&lt;br /&gt;
Takes a total of 0x18-bytes of input, returns an output Event handle and an [[#IAsyncValue]].&lt;br /&gt;
&lt;br /&gt;
==== GetGameCardPlatformRegion ====&lt;br /&gt;
No input, returns an u8 &#039;&#039;&#039;GameCardPlatformRegion&#039;&#039;&#039; (0x00 = Global, 0x01 = China).&lt;br /&gt;
&lt;br /&gt;
This calls [[Filesystem_services#IDeviceOperator|fsp-srv IDeviceOperator]] GetGameCardCompatibilityType and returns the result.&lt;br /&gt;
&lt;br /&gt;
==== RequestDownloadTaskListData ====&lt;br /&gt;
No input, returns an output Event handle and an [[#IAsyncValue]].&lt;br /&gt;
&lt;br /&gt;
==== GetRightsEnvironmentHandleForApplication ====&lt;br /&gt;
No input, returns a total of 8-bytes of output.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now takes a total of 8-bytes of input, returns a total of 8-bytes of output.&lt;br /&gt;
&lt;br /&gt;
==== RequestNoDownloadRightsErrorResolution ====&lt;br /&gt;
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncValue]].&lt;br /&gt;
&lt;br /&gt;
The data that can be read from the [[#IAsyncValue]] is [[#NoDownloadRightsErrorResolution]].&lt;br /&gt;
&lt;br /&gt;
==== RequestResolveNoDownloadRightsError ====&lt;br /&gt;
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncValue]].&lt;br /&gt;
&lt;br /&gt;
The data that can be read from the [[#IAsyncValue]] is [[#NoDownloadRightsErrorResolution]].&lt;br /&gt;
&lt;br /&gt;
==== CreateApplicationResource ====&lt;br /&gt;
Returns an [[#IApplicationResource]].&lt;br /&gt;
&lt;br /&gt;
==== GetApplicationResource ====&lt;br /&gt;
Returns an [[#IApplicationResource]].&lt;br /&gt;
&lt;br /&gt;
==== GetSystemDeliveryInfo ====&lt;br /&gt;
Takes a type-0x16 output buffer containing a [[#SystemDeliveryInfo]], no output.&lt;br /&gt;
&lt;br /&gt;
This generates a [[#SystemDeliveryInfo]] using the currently installed SystemUpdate meta title.&lt;br /&gt;
&lt;br /&gt;
==== SelectLatestSystemDeliveryInfo ====&lt;br /&gt;
Takes a type-0x15 input buffer containing a [[#SystemDeliveryInfo]], a type-0x5 input buffer containing an array of [[#SystemDeliveryInfo]], a type-0x5 input buffer containing an array of [[#ApplicationDeliveryInfo]], and returns an output s32.&lt;br /&gt;
&lt;br /&gt;
This determines the latest version from the input [[#ApplicationDeliveryInfo]] array, using value 0 if the array is empty. If this value is less than a state field, the state field value is used instead. Then this selects a [[#SystemDeliveryInfo]] with the latest version from the input array, where the minimum version is the previously mentioned value. The version must also be also be at least the version value from the type-0x15 [[#SystemDeliveryInfo]] buffer. This also does various validation, etc. The output s32 is an index in that array for the selected entry, -1 if none found.&lt;br /&gt;
&lt;br /&gt;
==== VerifyDeliveryProtocolVersion ====&lt;br /&gt;
Takes a type-0x15 input buffer containing a [[#SystemDeliveryInfo]], no output.&lt;br /&gt;
&lt;br /&gt;
This validates the [[#SystemDeliveryInfo]] HMAC and the protocol-version fields. Then the meta version is compared with a state field, an error is returned on match otherwise 0 is returned.&lt;br /&gt;
&lt;br /&gt;
==== GetApplicationDeliveryInfo ====&lt;br /&gt;
Takes a type-0x6 output buffer containing an array of [[#ApplicationDeliveryInfo]], an input u32 bitmask &amp;lt;code&amp;gt;nn::ns::ApplicationDeliveryAttributeTag&amp;lt;/code&amp;gt;, an [[NCM_services#ApplicationId|ApplicationId]], and returns an output s32 total_out.&lt;br /&gt;
&lt;br /&gt;
An error is thrown if any bit is set in ApplicationDeliveryAttributeTag besides bit1. The output array-count must be at least 1: only 1 entry will be written to this array (hence on success total_out will also only be 1 on success).&lt;br /&gt;
&lt;br /&gt;
==== HasAllContentsToDeliver ====&lt;br /&gt;
Takes a type-0x5 input buffer containing an array of [[#ApplicationDeliveryInfo]], returns an output u8 bool.&lt;br /&gt;
&lt;br /&gt;
The array-count must match 1. After validating the [[#ApplicationDeliveryInfo]], the output bool is set to u32 [[#ApplicationDeliveryInfo]]+0x1C &amp;amp; 0x10000002 != 0x2, then this returns 0.&lt;br /&gt;
&lt;br /&gt;
==== CompareApplicationDeliveryInfo ====&lt;br /&gt;
Takes two type-0x5 input buffers containing an array of [[#ApplicationDeliveryInfo]], returns an output s32.&lt;br /&gt;
&lt;br /&gt;
The array-count for both buffers must be 1, otherwise an error is returned.&lt;br /&gt;
&lt;br /&gt;
Both [[#ApplicationDeliveryInfo]] are validated, then the application-version in the first/second buffer are compared. The output s32 is set to the comparison result: -1 for less than, 0 for equal, and 1 for higher than.&lt;br /&gt;
&lt;br /&gt;
==== CanDeliverApplication ====&lt;br /&gt;
Takes two type-0x5 input buffers containing an array of [[#ApplicationDeliveryInfo]], returns an output u8 bool.&lt;br /&gt;
&lt;br /&gt;
The array-count for the second buffer must be 1 and the array-count for the first buffer must be &amp;lt;=1, otherwise an error is returned. If the array-count for the first buffer is 0, this will return 0 with the output bool set to 0.&lt;br /&gt;
&lt;br /&gt;
==== ListContentMetaKeyToDeliverApplication ====&lt;br /&gt;
Takes a type-0x6 output buffer containing an array of [[NCM_services#ContentMetaKey|ContentMetaKey]], a type-0x5 input buffer containing an array of [[#ApplicationDeliveryInfo]], a s32, and returns an output s32 total_out.&lt;br /&gt;
&lt;br /&gt;
The array-count for ContentMetaKey must be at least 1, and for ApplicationDeliveryInfo it must match 1.&lt;br /&gt;
&lt;br /&gt;
This will only return 1 ContentMetaKey entry. This will not output the entry when the input s32 is larger than 0. This also does other validation, etc.&lt;br /&gt;
&lt;br /&gt;
==== NeedsSystemUpdateToDeliverApplication ====&lt;br /&gt;
Takes a type-0x15 input buffer containing a [[#SystemDeliveryInfo]], a type-0x5 input buffer containing an array of [[#ApplicationDeliveryInfo]], and returns an output u8 bool.&lt;br /&gt;
&lt;br /&gt;
The array-count must match 1.&lt;br /&gt;
&lt;br /&gt;
After validation etc, this sets the output bool by comparing system-version fields in the [[#SystemDeliveryInfo]]/[[#ApplicationDeliveryInfo]] and with a state field.&lt;br /&gt;
&lt;br /&gt;
==== EstimateRequiredSize ====&lt;br /&gt;
Takes a type-0x5 input buffer containing an array of [[NCM_services#ContentMetaKey|ContentMetaKey]], returns an output s64.&lt;br /&gt;
&lt;br /&gt;
When the array-count is less than 1, this will return 0 with the s64 set to 0.&lt;br /&gt;
&lt;br /&gt;
==== RequestReceiveApplication ====&lt;br /&gt;
Takes a type-0x5 input buffer containing an array of [[NCM_services#ContentMetaKey|ContentMetaKey]], a [[NCM_services#StorageId|StorageId]], an u16 port, an u32 Ipv4Address, an [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]].&lt;br /&gt;
&lt;br /&gt;
[[qlaunch]] uses value Any for the StorageId, and value 55556 for the port.&lt;br /&gt;
&lt;br /&gt;
An error is thrown if a state ref-count is zero. An error is thrown if [[NIM_services|nim]] ListApplicationApplyDeltaTask returns a task.&lt;br /&gt;
&lt;br /&gt;
This loops through the input [[NCM_services#ContentMetaKey|ContentMetaKey]] array, throwing an error if the [[NCM_services#ContentMetaType|ContentMetaType]] doesn&#039;t match Patch. The input array is copied into state which is used later by the thread for [[NIM_services|nim]] cmd53, max entries is 0x12.&lt;br /&gt;
&lt;br /&gt;
This does various setup then creates the [[#IAsyncResult]] + the async thread which handles the [[#IAsyncResult]] operation. Then the thread does:&lt;br /&gt;
&lt;br /&gt;
* Calls a func which does:&lt;br /&gt;
** Throws an error if a state flag is set.&lt;br /&gt;
** Uses [[NIM_services|nim]] cmd53, returning the Result on failure.&lt;br /&gt;
** Uses [[NIM_services|nim]] cmd56, returning the Result on failure. Waits for the IAsyncResult operation from this to finish, then uses the Get cmd to get the output Result.&lt;br /&gt;
** Handles cleanup and returns.&lt;br /&gt;
* On success, this loads various data which is then used for saving a SystemPlayReport when a state flag is set.&lt;br /&gt;
** The EventId is &amp;quot;receive_app_contents&amp;quot; with ApplicationId &amp;lt;NS ProgramId&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== CommitReceiveApplication ====&lt;br /&gt;
Takes an input [[NCM_services#ApplicationId|ApplicationId]], no output.&lt;br /&gt;
&lt;br /&gt;
==== GetReceiveApplicationProgress ====&lt;br /&gt;
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output [[#ReceiveApplicationProgress]].&lt;br /&gt;
&lt;br /&gt;
An error is thrown if a state ref-count is zero. An error is thrown if [[NIM_services|nim]] ListApplicationApplyDeltaTask returns a task.&lt;br /&gt;
&lt;br /&gt;
Uses [[NIM_services|nim]] cmd67, throwing an error if no task is returned. Then [[NIM_services|nim]] cmd57 is used, returning the error from there on failure. Lastly, this writes the 0x10-bytes from output+8 from the latter cmd to the output [[#ReceiveApplicationProgress]], and returns 0.&lt;br /&gt;
&lt;br /&gt;
==== RequestSendApplication ====&lt;br /&gt;
Takes a type-0x5 input buffer containing an array of [[NCM_services#ContentMetaKey|ContentMetaKey]], an u16 port, an u32 Ipv4Address, an [[NCM_services#ApplicationId|ApplicationId]], returns an output Event handle and an [[#IAsyncResult]].&lt;br /&gt;
&lt;br /&gt;
[[qlaunch]] uses value 55556 for the port.&lt;br /&gt;
&lt;br /&gt;
An error is thrown if a state ref-count is zero. An error is thrown if [[NIM_services|nim]] ListApplicationApplyDeltaTask returns a task.&lt;br /&gt;
&lt;br /&gt;
The [[NCM_services#ContentMetaType|ContentMetaType]] must match Patch.&lt;br /&gt;
&lt;br /&gt;
This does various setup and selects a ContentMetaKey to use from the input, then creates the [[#IAsyncResult]] + the async thread which handles the [[#IAsyncResult]] operation. Then the thread does:&lt;br /&gt;
&lt;br /&gt;
* Calls a func which does:&lt;br /&gt;
** Throws an error if a state flag is set.&lt;br /&gt;
** Uses [[NIM_services|nim]] cmd60, returning the Result on failure.&lt;br /&gt;
** Uses [[NIM_services|nim]] cmd61, returning the Result on failure. Waits for the IAsyncResult operation from this to finish, then uses the Get cmd to get the output Result.&lt;br /&gt;
** Handles cleanup and returns.&lt;br /&gt;
* On success, this loads various data which is then used for saving a SystemPlayReport when a state flag is set.&lt;br /&gt;
** The EventId is &amp;quot;send_app_contents&amp;quot; with ApplicationId &amp;lt;NS ProgramId&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== GetSendApplicationProgress ====&lt;br /&gt;
Takes an input [[NCM_services#ApplicationId|ApplicationId]], returns an output [[#SendApplicationProgress]].&lt;br /&gt;
&lt;br /&gt;
Same as [[#GetReceiveApplicationProgress]] except this is the Send version, and uses [[NIM_services|nim]] cmd68/cmd63 instead.&lt;br /&gt;
&lt;br /&gt;
==== CompareSystemDeliveryInfo ====&lt;br /&gt;
Takes two type-0x15 input buffers containing a [[#SystemDeliveryInfo]], returns an output s32.&lt;br /&gt;
&lt;br /&gt;
This is essentially the same as [[#CompareApplicationDeliveryInfo]], except this compares the [[#SystemDeliveryInfo]] SystemUpdate version.&lt;br /&gt;
&lt;br /&gt;
==== ListNotCommittedContentMeta ====&lt;br /&gt;
Takes a type-0x6 output buffer containing an array of [[NCM_services#ContentMetaKey|ContentMetaKey]], a s32, an [[NCM_services#ApplicationId|ApplicationId]], returns an output s32 total_out.&lt;br /&gt;
&lt;br /&gt;
==== RecoverDownloadTask ====&lt;br /&gt;
Takes a type-0x5 input buffer containing an array of {unknown} and an input u64, no output.&lt;br /&gt;
&lt;br /&gt;
==== GetApplicationDeliveryInfoHash ====&lt;br /&gt;
Takes a type-0x5 input buffer containing an array of [[#ApplicationDeliveryInfo]], returns an output 0x20-byte SHA256 hash.&lt;br /&gt;
&lt;br /&gt;
This extracts data from the input array for hashing with SHA256, with validation being done when handling each entry.&lt;br /&gt;
&lt;br /&gt;
=== IApplicationVersionInterface ===&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IApplicationVersionInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [4.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetLaunchRequiredVersion&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UpgradeLaunchRequiredVersion&lt;br /&gt;
|-&lt;br /&gt;
| 35 || UpdateVersionList&lt;br /&gt;
|-&lt;br /&gt;
| 36 || PushLaunchVersion&lt;br /&gt;
|-&lt;br /&gt;
| 37 || ListRequiredVersion&lt;br /&gt;
|-&lt;br /&gt;
| 800 || RequestVersionList&lt;br /&gt;
|-&lt;br /&gt;
| 801 || ListVersionList&lt;br /&gt;
|-&lt;br /&gt;
| 802 || [[#RequestVersionListData]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || PerformAutoUpdate&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RequestVersionListData ====&lt;br /&gt;
No input, returns an output Event handle and an [[#IAsyncValue]].&lt;br /&gt;
&lt;br /&gt;
The data that can be read from the [[#IAsyncValue]] is [[#VersionListData]].&lt;br /&gt;
&lt;br /&gt;
=== IContentManagerInterface ===&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IContentManagementInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 11 || CalculateApplicationOccupiedSize&lt;br /&gt;
|-&lt;br /&gt;
| 43 || CheckSdCardMountStatus&lt;br /&gt;
|-&lt;br /&gt;
| 47 || GetTotalSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| 48 || GetFreeSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| 600 || CountApplicationContentMeta&lt;br /&gt;
|-&lt;br /&gt;
| 601 || ListApplicationContentMetaStatus&lt;br /&gt;
|-&lt;br /&gt;
| 605 || ListApplicationContentMetaStatusWithRightsCheck&lt;br /&gt;
|-&lt;br /&gt;
| 607 || IsAnyApplicationRunning&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IDocumentInterface ===&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IDocumentInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 21 || GetApplicationContentPath&lt;br /&gt;
|-&lt;br /&gt;
| 23 || ResolveApplicationContentPath&lt;br /&gt;
|-&lt;br /&gt;
| 92 || [5.0.0+] GetRunningApplicationProgramId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IDownloadTaskInterface ===&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IDownloadTaskInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 701 || ClearTaskStatusList&lt;br /&gt;
|-&lt;br /&gt;
| 702 || RequestDownloadTaskList&lt;br /&gt;
|-&lt;br /&gt;
| 703 || RequestEnsureDownloadTask&lt;br /&gt;
|-&lt;br /&gt;
| 704 || ListDownloadTaskStatus&lt;br /&gt;
|-&lt;br /&gt;
| 705 || [[#RequestDownloadTaskListData]]&lt;br /&gt;
|-&lt;br /&gt;
| 706 || [4.0.0+] TryCommitCurrentApplicationDownloadTask&lt;br /&gt;
|-&lt;br /&gt;
| 707 || [4.0.0+] EnableAutoCommit&lt;br /&gt;
|-&lt;br /&gt;
| 708 || [4.0.0+] DisableAutoCommit&lt;br /&gt;
|-&lt;br /&gt;
| 709 || [4.0.0+] TriggerDynamicCommitEvent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IReadOnlyApplicationRecordInterface ===&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IReadOnlyApplicationRecordInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [5.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || HasApplicationRecord || Same as [[#IApplicationManagerInterface]] cmd 910&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IReadOnlyApplicationControlDataInterface ===&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IReadOnlyApplicationControlDataInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [5.1.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetApplicationControlData]] || Same as [[#IApplicationManagerInterface]] cmd 400&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetApplicationDesiredLanguage]] || Same as [[#IApplicationManagerInterface]] cmd 55&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ConvertApplicationLanguageToLanguageCode || Same as [[#IApplicationManagerInterface]] cmd 59&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#ConvertLanguageCodeToApplicationLanguage]] || Same as [[#IApplicationManagerInterface]] cmd 60&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [9.0.0+] SelectApplicationDesiredLanguage ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IDynamicRightsInterface ===&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IDynamicRightsInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [6.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#RequestApplicationRightsOnServer]] || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestAssignRights || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || DeprecatedRequestAssignRightsToResume || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || VerifyActivatedRightsOwners || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || DeprecatedGetApplicationRightsStatus || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || RequestPrefetchForDynamicRights || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || GetDynamicRightsState || &lt;br /&gt;
|-&lt;br /&gt;
| 9 || [7.0.0+] [[#RequestApplicationRightsOnServerToResume]] || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || [7.0.0+] RequestAssignRightsToResume || &lt;br /&gt;
|-&lt;br /&gt;
| 11 || [7.0.0+] GetActivatedRightsUsers || &lt;br /&gt;
|-&lt;br /&gt;
| 12 || [8.0.0+] GetApplicationRightsStatus ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [8.0.0+] GetRunningApplicationStatus ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RequestApplicationRightsOnServer ====&lt;br /&gt;
Takes a total of 0x20-bytes of input, returns an output Event handle and an [[#IAsyncValue]].&lt;br /&gt;
&lt;br /&gt;
==== RequestApplicationRightsOnServerToResume ====&lt;br /&gt;
Takes a total of 8-bytes of input, returns an output Event handle and an [[#IAsyncValue]].&lt;br /&gt;
&lt;br /&gt;
=== IECommerceInterface===&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IECommerceInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [4.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestLinkDevice || Takes a total of 0x10-bytes of input, returns an [[#IAsyncResult]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [6.0.0+] RequestCleanupAllPreInstalledApplications || No input, returns an [[#IAsyncResult]].&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [6.0.0+] RequestCleanupPreInstalledApplication || Takes a total of 0x8-bytes of input, returns an [[#IAsyncResult]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [6.0.0+] RequestSyncRights || No input, returns an [[#IAsyncResult]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [6.0.0+] RequestUnlinkDevice || Takes a total of 0x10-bytes of input, returns an [[#IAsyncResult]].&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [6.1.0+] RequestRevokeAllELicense || Takes a total of 0x10-bytes of input, returns an [[#IAsyncResult]].&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [9.0.0+] RequestSyncRightsBasedOnAssignedELicenses ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IFactoryResetInterface ===&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IFactoryResetInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 100 || ResetToFactorySettings&lt;br /&gt;
|-&lt;br /&gt;
| 101 || ResetToFactorySettingsWithoutUserSaveData&lt;br /&gt;
|-&lt;br /&gt;
| 102 || ResetToFactorySettingsForRefurbishment&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [9.1.0+] ResetToFactorySettingsWithPlatformRegion&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [9.1.0+] ResetToFactorySettingsWithPlatformRegionAuthentication&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IApplicationResource ===&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IApplicationResource&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [9.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Attach&lt;br /&gt;
|-&lt;br /&gt;
| 1 || BoostSystemMemoryResourceLimit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ns:vm =&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IVulnerabilityManagerInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1200 || [3.0.0+] [[#NeedsUpdateVulnerability]]&lt;br /&gt;
|-&lt;br /&gt;
| 1201 || [4.0.0+] [[#UpdateSafeSystemVersionForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1202 || [4.0.0+] [[#GetSafeSystemVersion]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NeedsUpdateVulnerability ==&lt;br /&gt;
No input, returns an output u8 bool flag.&lt;br /&gt;
&lt;br /&gt;
Web-applets use this command to check if the system needs an update.&lt;br /&gt;
&lt;br /&gt;
== UpdateSafeSystemVersionForDebug ==&lt;br /&gt;
Takes an input [[NCM_services#ApplicationId|ApplicationId]] and an u32 &#039;&#039;&#039;version&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This command is not available for retail units. On a debug unit, if the [[System_Settings|system setting]] &amp;lt;code&amp;gt;vulnerability!enable_debug&amp;lt;/code&amp;gt; is set, this mounts the system savegame [[Flash_Filesystem#System_Savegames|0x8000000000000049]] as &amp;quot;ns_ssversion:/&amp;quot;, opens the file &amp;quot;ns_ssversion:/entry&amp;quot; and writes the supplied [[NCM_services#ApplicationId|ApplicationId]] and &#039;&#039;&#039;version&#039;&#039;&#039; in it.&lt;br /&gt;
&lt;br /&gt;
Finally, it calls [[NCM_services#ncm|OpenContentMetaDatabase]] with [[NCM_services#StorageId|StorageId]] 3, then calls [[NCM_services#IContentMetaDatabase|GetLatestContentMetaKey]] with the supplied [[NCM_services#ApplicationId|ApplicationId]] and compares the version field from the returned [[CNMT#Content_Meta_Records|Content Meta Record]] with the supplied &#039;&#039;&#039;version&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
If the supplied &#039;&#039;&#039;version&#039;&#039;&#039; is higher than the one in NCM&#039;s database, the value returned by [[NS_Services#NeedsUpdateVulnerability|NeedsUpdateVulnerability]] is set to &amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== GetSafeSystemVersion ==&lt;br /&gt;
No input, returns an output [[NCM_services#ContentMetaKey|ContentMetaKey]] with the cached contents of &amp;quot;ns_ssversion:/entry&amp;quot; ([[NCM_services#ApplicationId|ApplicationId]], u32 &#039;&#039;&#039;version&#039;&#039;&#039; and u32 &#039;&#039;&#039;policy&#039;&#039;&#039; from &amp;lt;code&amp;gt;vulnerability!needs_update_vulnerability_policy&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
= ns:su =&lt;br /&gt;
This is &amp;quot;nn::ns::detail::ISystemUpdateInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetBackgroundNetworkUpdateState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSystemUpdateControl]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#NotifyExFatDriverRequired]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#ClearExFatDriverStatusForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#RequestBackgroundNetworkUpdate]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#NotifyBackgroundNetworkUpdate]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#NotifyExFatDriverDownloadedForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#GetSystemUpdateNotificationEventForContentDelivery]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#NotifySystemUpdateForContentDelivery]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [3.0.0+] [[#PrepareShutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [4.0.0+] [[#DestroySystemUpdateTask]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [4.0.0+] [[#RequestSendSystemUpdate]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [4.0.0+] [[#GetSendSystemUpdateProgress]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetBackgroundNetworkUpdateState ==&lt;br /&gt;
No input, returns an output [[#BackgroundNetworkUpdateState]].&lt;br /&gt;
&lt;br /&gt;
This is similar to [[#HasDownloaded]], see [[#BackgroundNetworkUpdateState]].&lt;br /&gt;
&lt;br /&gt;
== OpenSystemUpdateControl ==&lt;br /&gt;
No input, returns an [[#ISystemUpdateControl]].&lt;br /&gt;
&lt;br /&gt;
== NotifyExFatDriverRequired ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Only usable when an [[#ISystemUpdateControl]] isn&#039;t open.&lt;br /&gt;
&lt;br /&gt;
This uses [[NIM_services|nim]] ListSystemUpdateTask, then when a task is returned uses it with DestroySystemUpdateTask.&lt;br /&gt;
&lt;br /&gt;
Then this runs ExFat handling, updates state, and sets the same state flag as [[#RequestBackgroundNetworkUpdate]].&lt;br /&gt;
&lt;br /&gt;
== ClearExFatDriverStatusForDebug ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== RequestBackgroundNetworkUpdate ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Only usable when an [[#ISystemUpdateControl]] isn&#039;t open.&lt;br /&gt;
&lt;br /&gt;
This sets a state flag to value 1.&lt;br /&gt;
&lt;br /&gt;
== NotifyBackgroundNetworkUpdate ==&lt;br /&gt;
Takes an input [[NCM_services#ContentMetaKey|ContentMetaKey]], no output.&lt;br /&gt;
&lt;br /&gt;
This checks whether a sysupdate is needed with the input ContentMetaKey using [[NCM_services|NCM]] commands, if not this will just return 0. Otherwise, this will then run code which is identical to [[#RequestBackgroundNetworkUpdate]].&lt;br /&gt;
&lt;br /&gt;
== NotifyExFatDriverDownloadedForDebug ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== GetSystemUpdateNotificationEventForContentDelivery ==&lt;br /&gt;
No input, returns an output Event handle with EventClearMode=0.&lt;br /&gt;
&lt;br /&gt;
== NotifySystemUpdateForContentDelivery ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Signals the Event returned by [[#GetSystemUpdateNotificationEventForContentDelivery]].&lt;br /&gt;
&lt;br /&gt;
== PrepareShutdown ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This is used by [[AM_services|AM]].&lt;br /&gt;
&lt;br /&gt;
Just returns 0 when an [[#ISystemUpdateControl]] is open. &lt;br /&gt;
&lt;br /&gt;
This does various cleanup / uses various service-cmds etc for shutdown preparation.&lt;br /&gt;
&lt;br /&gt;
== DestroySystemUpdateTask ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Only usable when an [[#ISystemUpdateControl]] isn&#039;t open.&lt;br /&gt;
&lt;br /&gt;
This uses [[NIM_services|nim]] ListSystemUpdateTask, then when a task is returned uses it with DestroySystemUpdateTask.&lt;br /&gt;
&lt;br /&gt;
== RequestSendSystemUpdate ==&lt;br /&gt;
Takes a type-0x15 input buffer containing a [[#SystemDeliveryInfo]], an u16 port, an u32 Ipv4Address, returns an output Event handle and an [[#IAsyncResult]].&lt;br /&gt;
&lt;br /&gt;
[[qlaunch]] uses value 55556 for the port. IP is normally a local-WLAN address, however this can be any address. port/addr are little-endian.&lt;br /&gt;
&lt;br /&gt;
[[NIM_services|NIM]] will use the input addr/port with [[Sockets_services|bind()]]. During [[Sockets_services|accept()]] handling the addr from there must match the input addr. Hence, addr must be the client addr. [[NIM_services|NIM]] will also eventually verify that the system is not Internet-connected.&lt;br /&gt;
&lt;br /&gt;
This validates the [[#SystemDeliveryInfo]] and generates a [[NCM_services#ContentMetaKey|ContentMetaKey]] from that, and creates the [[#IAsyncResult]] + the async thread which handles the [[#IAsyncResult]] operation. Then the thread does:&lt;br /&gt;
* Calls a func which does:&lt;br /&gt;
** Uses [[NIM_services|nim]] cmd76, returning the Result on failure.&lt;br /&gt;
** Uses [[NIM_services|nim]] cmd77, returning the Result on failure. Waits for the IAsyncResult operation from this to finish, then uses the Get cmd to get the output Result.&lt;br /&gt;
** Handles cleanup and returns.&lt;br /&gt;
* Unlike [[#RequestReceiveSystemUpdate]], this doesn&#039;t save a SystemPlayReport.&lt;br /&gt;
&lt;br /&gt;
== GetSendSystemUpdateProgress ==&lt;br /&gt;
No input, returns an output [[#SystemUpdateProgress]].&lt;br /&gt;
&lt;br /&gt;
Same as [[#GetReceiveProgress]] except this uses nim cmd81 and cmd78.&lt;br /&gt;
&lt;br /&gt;
== ISystemUpdateControl ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#HasDownloaded]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RequestCheckLatestUpdate]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#RequestDownloadLatestUpdate]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#GetDownloadProgress]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#ApplyDownloadedUpdate]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#RequestPrepareCardUpdate]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#GetPrepareCardUpdateProgress]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#HasPreparedCardUpdate]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#ApplyCardUpdate]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#GetDownloadedEulaDataSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#GetDownloadedEulaData]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#SetupCardUpdate]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GetPreparedCardUpdateEulaDataSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetPreparedCardUpdateEulaData]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [4.0.0+] [[#SetupCardUpdateViaSystemUpdater]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [4.0.0+] [[#HasReceived]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [4.0.0+] [[#RequestReceiveSystemUpdate]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [4.0.0+] [[#GetReceiveProgress]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [4.0.0+] [[#ApplyReceivedUpdate]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [4.0.0+] [[#GetReceivedEulaDataSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [4.0.0+] [[#GetReceivedEulaData]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [4.0.0+] [[#SetupToReceiveSystemUpdate]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [6.0.0+] [[#RequestCheckLatestUpdateIncludesRebootlessUpdate]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Only 1 ISystemUpdateControl can be open at a time.&lt;br /&gt;
&lt;br /&gt;
All Card cmds except SetupCardUpdate* require [[#SetupCardUpdate]]/[[#SetupCardUpdateViaSystemUpdater]] to be used previously. [[#GetPreparedCardUpdateEulaDataSize]]/[[#GetPreparedCardUpdateEulaData]] checks a different state flag.&lt;br /&gt;
&lt;br /&gt;
=== HasDownloaded ===&lt;br /&gt;
No input, returns an output u8 bool flag.&lt;br /&gt;
&lt;br /&gt;
Gets whether a network sysupdate was downloaded, with install pending.&lt;br /&gt;
&lt;br /&gt;
Uses [[NIM_services|nim]] ListSystemUpdateTask and [[NIM_services|nim]] GetSystemUpdateTaskInfo. When ListSystemUpdateTask successfully returns a task and GetSystemUpdateTaskInfo is successful, the output flag is set to: &amp;lt;code&amp;gt;*((u8*)(taskinfo+0) == 0x3&amp;lt;/code&amp;gt;. Otherwise, flag=0.&lt;br /&gt;
&lt;br /&gt;
This always returns 0, however this will assert if GetSystemUpdateTaskInfo fails with ret!=0x3C89.&lt;br /&gt;
&lt;br /&gt;
=== RequestCheckLatestUpdate ===&lt;br /&gt;
No input, returns an output Event handle and an [[#IAsyncValue]].&lt;br /&gt;
&lt;br /&gt;
The data that can be read from the [[#IAsyncValue]] is [[#LatestSystemUpdate]].&lt;br /&gt;
&lt;br /&gt;
=== RequestDownloadLatestUpdate ===&lt;br /&gt;
No input, returns an output Event handle and an [[#IAsyncResult]].&lt;br /&gt;
&lt;br /&gt;
=== GetDownloadProgress ===&lt;br /&gt;
No input, returns an output [[#SystemUpdateProgress]].&lt;br /&gt;
&lt;br /&gt;
Similar to [[#HasDownloaded]] except instead of a flag, this returns the 0x10-bytes from taskinfo+8. The output struct is cleared when the task(info) isn&#039;t available.&lt;br /&gt;
&lt;br /&gt;
=== ApplyDownloadedUpdate ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Runs code similar to [[#HasDownloaded]], throwing an error if a network sysupdate isn&#039;t ready for install. Then the sysupdate is installed:&lt;br /&gt;
&lt;br /&gt;
* Uses ListSystemUpdateTask again, then [[NIM_services|nim]] IsExFatDriverIncluded. Runs ExFat handling when the output flag is set.&lt;br /&gt;
* On newer system-versions, this uses [[NIM_services|nim]] GetSystemUpdateTaskInfo then on success uses data from there to save a SystemPlayReport when a state flag is set (by default it&#039;s not set).&lt;br /&gt;
** The EventId is &amp;quot;systemupdate_dl_throughput&amp;quot; with ApplicationId 0100000000001018.&lt;br /&gt;
** The following fields are added to the report, see [[NIM_services#SystemUpdateTaskInfo|nim SystemUpdateTaskInfo]]: &amp;quot;ContentMetaId&amp;quot;, &amp;quot;Version&amp;quot;, &amp;quot;DownloadSize&amp;quot;, and &amp;quot;ThroughputKBps&amp;quot;,&lt;br /&gt;
* On newer system-versions, this saves another SystemPlayReport when a state flag is set (same flag mentioned above).&lt;br /&gt;
** The EventId is &amp;quot;systemupdate_pass&amp;quot; with ApplicationId 0100000000001021.&lt;br /&gt;
** This report has the following fields:&lt;br /&gt;
*** &amp;quot;Type&amp;quot;&lt;br /&gt;
*** &amp;quot;SourceSystemUpdateMetaId&amp;quot;&lt;br /&gt;
*** &amp;quot;SourceSystemUpdateMetaVersion&amp;quot;&lt;br /&gt;
*** &amp;quot;SourceExFatStatus&amp;quot;&lt;br /&gt;
*** &amp;quot;DestinationSystemUpdateMetaId&amp;quot;&lt;br /&gt;
*** &amp;quot;DestinationSystemUpdateMetaVersion&amp;quot;&lt;br /&gt;
*** &amp;quot;DestinationExFatStatus&amp;quot;&lt;br /&gt;
*** &amp;quot;Rebootless&amp;quot;&lt;br /&gt;
* Since FIRM will be installed later, the two flags in [[Flash_Filesystem#System_Update_Control]] are set to 1.&lt;br /&gt;
* Uses [[NIM_services|nim]] CommitSystemUpdateTask and [[NIM_services|nim]] DestroySystemUpdateTask.&lt;br /&gt;
* Installs FIRM. After installing each FIRM, the associated flag in [[Flash_Filesystem#System_Update_Control]] is set to 0.&lt;br /&gt;
* On newer system versions when an input flag is set, this uses [[Filesystem_services|NotifySystemDataUpdateEvent]], however this doesn&#039;t happen with ApplyDownloadedUpdate since that input flag is 0.&lt;br /&gt;
&lt;br /&gt;
=== RequestPrepareCardUpdate ===&lt;br /&gt;
No input, returns an output Event handle and an [[#IAsyncResult]].&lt;br /&gt;
&lt;br /&gt;
=== GetPrepareCardUpdateProgress ===&lt;br /&gt;
No input, returns an output [[#SystemUpdateProgress]].&lt;br /&gt;
&lt;br /&gt;
=== HasPreparedCardUpdate ===&lt;br /&gt;
No input, returns an output u8 bool flag.&lt;br /&gt;
&lt;br /&gt;
=== ApplyCardUpdate ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
=== GetDownloadedEulaDataSize ===&lt;br /&gt;
Takes a type-0x15 input buffer [[#EulaDataPath]], returns an output u64 &#039;&#039;&#039;filesize&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Runs code similar to [[#HasDownloaded]], throwing an error if a network sysupdate isn&#039;t ready for install.&lt;br /&gt;
&lt;br /&gt;
Uses ListSystemUpdateTask again. Then [[NIM_services|nim]] GetDownloadedSystemDataPath, with the output ContentPath being used to mount the EULA title with FS.&lt;br /&gt;
&lt;br /&gt;
Then &amp;quot;&amp;lt;mountname&amp;gt;:/&amp;lt;[[#EulaDataPath]]&amp;gt;&amp;quot; is opened, gets the &#039;&#039;&#039;filesize&#039;&#039;&#039;, then runs cleanup.&lt;br /&gt;
&lt;br /&gt;
=== GetDownloadedEulaData ===&lt;br /&gt;
Takes a type-0x15 input buffer [[#EulaDataPath]] and a type-0x6 output buffer, returns an output u64 &#039;&#039;&#039;filesize&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Similar to [[#GetDownloadedEulaDataSize]] except this reads the file instead, using the specified output buffer with size=filesize. This will throw an error if the filesize is larger than the buffer size.&lt;br /&gt;
&lt;br /&gt;
=== SetupCardUpdate ===&lt;br /&gt;
Takes an input u64 size and a TransferMemory handle, no output.&lt;br /&gt;
&lt;br /&gt;
Official sw creates the TransferMemory with an user-specified buffer, with permissions=None.&lt;br /&gt;
&lt;br /&gt;
[[qlaunch]] uses size 0x100000 for the TransferMemory buffer.&lt;br /&gt;
&lt;br /&gt;
=== GetPreparedCardUpdateEulaDataSize ===&lt;br /&gt;
Takes a type-0x15 input buffer [[#EulaDataPath]], returns an output u64 &#039;&#039;&#039;filesize&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This is similar to [[#GetDownloadedEulaDataSize]].&lt;br /&gt;
&lt;br /&gt;
=== GetPreparedCardUpdateEulaData ===&lt;br /&gt;
Takes a type-0x15 input buffer [[#EulaDataPath]] and a type-0x6 output buffer, returns an output u64 &#039;&#039;&#039;filesize&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This is similar to [[#GetDownloadedEulaData]].&lt;br /&gt;
&lt;br /&gt;
=== SetupCardUpdateViaSystemUpdater ===&lt;br /&gt;
Takes an input u64 size and a TransferMemory handle, no output.&lt;br /&gt;
&lt;br /&gt;
The permissions for the TransferMemory is None.&lt;br /&gt;
&lt;br /&gt;
Same as [[#SetupCardUpdate]], except this doesn&#039;t have the code for [[Filesystem_services|GetGameCardHandle/GetGameCardUpdatePartitionInfo]], and uses [[Filesystem_services|OpenRegisteredUpdatePartition]] instead of [[Filesystem_services|OpenGameCardFileSystem]]. This uses the same is_initialized bool state flag.&lt;br /&gt;
&lt;br /&gt;
=== HasReceived ===&lt;br /&gt;
No input, returns an output u8 bool.&lt;br /&gt;
&lt;br /&gt;
Same as [[#HasDownloaded]] except this uses [[NIM_services|nim]] cmd71 and cmd73.&lt;br /&gt;
&lt;br /&gt;
=== RequestReceiveSystemUpdate ===&lt;br /&gt;
Takes a type-0x15 input buffer containing a [[#SystemDeliveryInfo]], an u16 port, an u32 Ipv4Address, returns an output Event handle and an [[#IAsyncResult]].&lt;br /&gt;
&lt;br /&gt;
[[qlaunch]] uses the same value for the port as [[#RequestSendSystemUpdate]] (see [[#RequestSendSystemUpdate]] for addr as well).&lt;br /&gt;
&lt;br /&gt;
[[NIM_services|NIM]] will use the input addr/port with [[Sockets_services|connect()]].&lt;br /&gt;
&lt;br /&gt;
This validates the [[#SystemDeliveryInfo]] and generates a [[NCM_services#ContentMetaKey|ContentMetaKey]] from that, and creates the [[#IAsyncResult]] + the async thread which handles the [[#IAsyncResult]] operation. Then the thread does:&lt;br /&gt;
&lt;br /&gt;
* Calls a func which does:&lt;br /&gt;
** Throws an error if [[NIM_services#ListSystemUpdateTask|ListSystemUpdateTask]] returns any task.&lt;br /&gt;
** Checks whether a sysupdate is actually required using the previously generated [[NCM_services#ContentMetaKey|ContentMetaKey]], throwing an error if not.&lt;br /&gt;
** Uses [[NIM_services|nim]] cmd69, returning the Result on failure.&lt;br /&gt;
** Uses [[NIM_services|nim]] cmd72, returning the Result on failure. Waits for the IAsyncResult operation from this to finish, then uses the Get cmd to get the output Result.&lt;br /&gt;
** Handles cleanup and returns.&lt;br /&gt;
* On success, this loads various data which is then used for saving a SystemPlayReport when a state flag is set.&lt;br /&gt;
** The EventId is &amp;quot;receive_system_update&amp;quot; with ApplicationId &amp;lt;NS ProgramId&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== GetReceiveProgress ===&lt;br /&gt;
No input, returns an output [[#SystemUpdateProgress]].&lt;br /&gt;
&lt;br /&gt;
Same as [[#GetDownloadProgress]] except this uses [[NIM_services|nim]] cmd71 and cmd73.&lt;br /&gt;
&lt;br /&gt;
=== ApplyReceivedUpdate ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
=== GetReceivedEulaDataSize ===&lt;br /&gt;
Takes a type-0x15 input buffer [[#EulaDataPath]], returns an output u64 &#039;&#039;&#039;filesize&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This is similar to [[#GetDownloadedEulaDataSize]].&lt;br /&gt;
&lt;br /&gt;
=== GetReceivedEulaData ===&lt;br /&gt;
Takes a type-0x15 input buffer [[#EulaDataPath]] and a type-0x6 output buffer, returns an output u64 &#039;&#039;&#039;filesize&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This is similar to [[#GetDownloadedEulaData]].&lt;br /&gt;
&lt;br /&gt;
=== SetupToReceiveSystemUpdate ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
This just uses [[NIM_services|nim]] ListSystemUpdateTask, then when a task is returned uses it with DestroySystemUpdateTask.&lt;br /&gt;
&lt;br /&gt;
[[qlaunch]] uses this before [[#RequestReceiveSystemUpdate]].&lt;br /&gt;
&lt;br /&gt;
=== RequestCheckLatestUpdateIncludesRebootlessUpdate ===&lt;br /&gt;
No input, returns an output Event handle and an [[#IAsyncValue]].&lt;br /&gt;
&lt;br /&gt;
= IAsyncValue =&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IAsyncValue&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetSize&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Get&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Cancel&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [4.0.0+] GetErrorContext&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Official sw creates a container object for this using the output from the service commands, which contains the IAsyncValue object, and the Event with EventClearMode=0.&lt;br /&gt;
&lt;br /&gt;
* GetSize: No input, returns an output u64.&lt;br /&gt;
* Get: Takes a type-0x6 output buffer, no output. Official sw waits on the Event prior to using this cmd.&lt;br /&gt;
* Cancel: No input/output. Used by official sw when closing the object, when the serv-obj is initialized (after using the cmd, official sw will also wait on the Event). This cmd is also used in other official sw funcs.&lt;br /&gt;
* GetErrorContext: No input/output, takes a type-0x16 output buffer containing an [[Error_Applet#ErrorContext|ErrorContext]].&lt;br /&gt;
&lt;br /&gt;
= IAsyncResult =&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IAsyncResult&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Get&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Cancel&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [4.0.0+] GetErrorContext&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Official sw creates a container object for this using the output from the service commands, which contains the IAsyncResult object, and the Event with EventClearMode=0.&lt;br /&gt;
&lt;br /&gt;
* Get: No input/output. Official sw waits on the Event prior to using this cmd.&lt;br /&gt;
* Cancel: No input/output. Used by official sw when closing the object, when the serv-obj is initialized (after using the cmd, official sw will also wait on the Event). This cmd is also used in other official sw funcs.&lt;br /&gt;
* GetErrorContext: No input/output, takes a type-0x16 output buffer containing an [[Error_Applet#ErrorContext|ErrorContext]].&lt;br /&gt;
&lt;br /&gt;
= ns:dev =&lt;br /&gt;
This is &amp;quot;nn::ns::detail::IDevelopInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#LaunchProgram]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#TerminateProcess]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#TerminateProgram]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#GetShellEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetShellEventInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#TerminateApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#PrepareLaunchProgramFromHost]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#LaunchApplicationForDevelop]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#LaunchApplicationWithStorageIdForDevelop]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [6.0.0-8.1.0] IsSystemMemoryResourceLimitBoosted&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [6.0.0+] GetRunningApplicationProcessIdForDevelop&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [6.0.0+] SetCurrentApplicationRightsEnvironmentCanBeActiveForDevelop&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [9.0.0+] [[#CreateApplicationResourceForDevelop]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [9.0.0+] [[#IsPreomiaForDevelop]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LaunchProgram ==&lt;br /&gt;
Wrapper for &amp;quot;pm:shell&amp;quot; [[Process_Manager_services#pm:shell|LaunchProcess]].&lt;br /&gt;
&lt;br /&gt;
== TerminateProcess ==&lt;br /&gt;
Wrapper for &amp;quot;pm:shell&amp;quot; [[Process_Manager_services#pm:shell|TerminateProcess]].&lt;br /&gt;
&lt;br /&gt;
== TerminateProgram ==&lt;br /&gt;
Wrapper for &amp;quot;pm:shell&amp;quot; [[Process_Manager_services#pm:shell|TerminateProgram]].&lt;br /&gt;
&lt;br /&gt;
== GetShellEvent ==&lt;br /&gt;
Wrapper for &amp;quot;pm:shell&amp;quot; [[Process_Manager_services#pm:shell|GetProcessEventHandle]].&lt;br /&gt;
&lt;br /&gt;
== GetShellEventInfo ==&lt;br /&gt;
Wrapper for &amp;quot;pm:shell&amp;quot; [[Process_Manager_services#pm:shell|GetProcessEventInfo]].&lt;br /&gt;
&lt;br /&gt;
== TerminateApplication ==&lt;br /&gt;
Calls &amp;quot;pm:shell&amp;quot; [[Process_Manager_services#pm:shell|GetApplicationProcessIdForShell]] and sends PID to [[Process_Manager_services#pm:shell|TerminateProcess]].&lt;br /&gt;
&lt;br /&gt;
== PrepareLaunchProgramFromHost ==&lt;br /&gt;
Takes a type-0x5 input buffer containing the [[Filesystem_services|ContentPath]], returns an output 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
Calls [[NCM_services#IPathResolverForStorage|IPathResolverForStorage]] Set...NcaPath functions.&lt;br /&gt;
&lt;br /&gt;
== LaunchApplicationForDevelop ==&lt;br /&gt;
Takes an input u32 [[Process_Manager_services#LaunchFlags|LaunchFlags]] and [[NCM_services#ApplicationId|ApplicationId]], returns an output u64 PID.&lt;br /&gt;
&lt;br /&gt;
Same as LaunchApplicationWithStorageId except the last two params passed to the internal vtable funcptr call are value 0x6, instead of from the command input.&lt;br /&gt;
&lt;br /&gt;
== LaunchApplicationWithStorageIdForDevelop ==&lt;br /&gt;
Takes 2 input u8s, an u32 [[Process_Manager_services#LaunchFlags|LaunchFlags]], and an [[NCM_services#ApplicationId|ApplicationId]]. Returns an output u64 PID.&lt;br /&gt;
&lt;br /&gt;
Launches an application title which is registered with NS.&lt;br /&gt;
&lt;br /&gt;
== CreateApplicationResourceForDevelop ==&lt;br /&gt;
Takes an input u32 (1 = Preomia). Returns an [[#IApplicationResource]].&lt;br /&gt;
&lt;br /&gt;
== IsPreomiaForDevelop ==&lt;br /&gt;
Takes an u64 [[NCM_services#ProgramId|ProgramId]]. Returns a bool.&lt;br /&gt;
&lt;br /&gt;
= VersionListData =&lt;br /&gt;
This is &amp;quot;nn::ns::VersionListData&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= ApplicationUpdateInfo =&lt;br /&gt;
This is &amp;quot;nn::ns::ApplicationUpdateInfo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= NoDownloadRightsErrorResolution =&lt;br /&gt;
This is &amp;quot;nn::ns::NoDownloadRightsErrorResolution&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= BackgroundNetworkUpdateState =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || No sysupdate task exists.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Sysupdate download in progress.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Sysupdate ready, pending install.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is &amp;quot;nn::ns::BackgroundNetworkUpdateState&amp;quot;. This is an u8.&lt;br /&gt;
&lt;br /&gt;
Similar to [[#HasDownloaded]], [[#GetBackgroundNetworkUpdateState]] uses [[NIM_services|nim]] ListSystemUpdateTask and [[NIM_services|nim]] GetSystemUpdateTaskInfo. When ListSystemUpdateTask successfully returns a task and GetSystemUpdateTaskInfo is successful, the output value is set to: &amp;lt;code&amp;gt;1 + *((u8*)(taskinfo+0) == 0x3&amp;lt;/code&amp;gt;. Otherwise, value=0.&lt;br /&gt;
&lt;br /&gt;
[[#GetBackgroundNetworkUpdateState]] always returns Result 0, however this will assert if GetSystemUpdateTaskInfo fails with ret!=0x3C89.&lt;br /&gt;
&lt;br /&gt;
= SystemUpdateProgress =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || s64 Current size. This value can be larger than total_size when the async operation is finishing. When total_size is &amp;lt;=0, this current_size field may contain a progress value for when the total_size is not yet determined.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || s64 Total size, this field is only valid when &amp;gt;0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is &amp;quot;nn::ns::SystemUpdateProgress&amp;quot;. This is a 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
Commands which have this as output will return 0 with the output cleared, when no task is available.&lt;br /&gt;
&lt;br /&gt;
= EulaDataPath =&lt;br /&gt;
This is &amp;quot;nn::ns::detail::EulaDataPath&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
This contains a file path.&lt;br /&gt;
&lt;br /&gt;
= SystemDeliveryInfo =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || SystemDeliveryProtocolVersion. Must be &amp;lt;= to and match [[System_Settings|system-setting]] &amp;lt;code&amp;gt;contents_delivery!system_delivery_protocol_version&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || ApplicationDeliveryProtocolVersion. Loaded from [[System_Settings|system-setting]] &amp;lt;code&amp;gt;contents_delivery!application_delivery_protocol_version&amp;lt;/code&amp;gt;. Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x1 || HasExFat. Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0x3 || Reserved.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || SystemUpdateMetaVersion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x8 || SystemUpdateMetaId.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x1 || FirmwareVariationId. Used by [[#RequestSendSystemUpdate]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0x1 || UpdatableFirmwareGroupId. Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0x1 || PlatformRegion (0x00 = Unknown, 0x01 = Global, 0x02 = China).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC5 || Unused by [[#RequestSendSystemUpdate]]/[[#RequestReceiveSystemUpdate]], besides HMAC validation.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 0x20 || HMAC-SHA256 over the previous 0xE0-bytes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is &amp;quot;nn::ns::SystemDeliveryInfo&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
= ApplicationDeliveryInfo =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || ApplicationId.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || ApplicationVersion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || RequiredSystemVersion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xC0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 0x20 || HMAC-SHA256 over the previous 0xE0-bytes. Uses a different key than [[#SystemDeliveryInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is &amp;quot;nn::ns::ApplicationDeliveryInfo&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
= LatestSystemUpdate =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Unknown.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Unknown.&lt;br /&gt;
|-&lt;br /&gt;
| Other values || Unknown.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is &amp;quot;nn::ns::LatestSystemUpdate&amp;quot;. This is an u8.&lt;br /&gt;
&lt;br /&gt;
= ReceiveApplicationProgress =&lt;br /&gt;
This is &amp;quot;nn::ns::ReceiveApplicationProgress&amp;quot;. This is a 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
= SendApplicationProgress =&lt;br /&gt;
This is &amp;quot;nn::ns::SendApplicationProgress&amp;quot;. This is a 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>TotalJustice</name></author>
	</entry>
</feed>