Files
psxrecomp/generated/instruction_coverage.json
T
Matthew Stanley 7c40d33db3 Phase 1 complete: recompiler proven correct on SCPH1001.BIN
Phase 1a (boot slice): 30 instructions at 0xBFC00000, compiles clean.
Phase 1b (instruction coverage): 54 opcodes implemented in strict_translator,
  44,629 walker-reachable instructions covered, 0 missing.
Phase 1c (function discovery): 76 functions from 2 seeds, 2,988 instructions,
  199 call edges, 27 indirect jumps. All validated through StrictTranslator.
Phase 1d (indirect control flow): 27 sites classified — 21 A0/B0/C0 dispatch
  stubs, 4 computed calls, 2 computed tail calls. Ghidra cross-referenced
  with 0 disagreements.
Phase 1e (relocation): ROM-to-RAM copy at FUN_bfc00420 proven with both
  Ghidra (static) and DuckStation (runtime). 69 address aliases, 68/69
  function entries match byte-for-byte in RAM. Normalization rule documented.

Includes PRINCIPLES.md and DEBUG.md adapted from recomp-template.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 21:26:04 -07:00

700 lines
23 KiB
JSON

{
"schema": "psxrecomp-v4 phase1b instruction_coverage v1",
"inventory_source": "generated/instruction_inventory.json",
"translator_source": "recompiler/src/strict_translator.cpp",
"totals": {
"inventory_buckets": 56,
"implemented": 54,
"missing": 0,
"deferred": 2,
"implemented_but_unused_in_inventory": 2
},
"rows": [
{
"bucket_key": "17|none|0",
"primary_opcode_hex": "0x11",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "COP1",
"category": "PRIVILEGED_OR_DATA",
"count": 17,
"first_example": "0xbfc0233c",
"status": "deferred",
"reason": "FPU; PS1 has no COP1 hardware. Decide after Phase 1c reachability proves whether the BIOS atof routines are live."
},
{
"bucket_key": "49|none|0",
"primary_opcode_hex": "0x31",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "LWC1",
"category": "PRIVILEGED_OR_DATA",
"count": 2,
"first_example": "0xbfc02544",
"status": "deferred",
"reason": "FPU load; same rationale as COP1."
},
{
"bucket_key": "16|rs_cop0|0",
"primary_opcode_hex": "0x10",
"sub_kind": "rs_cop0",
"sub_value_hex": "0x00",
"mnemonic": "MFC0",
"category": "COP0",
"count": 2,
"first_example": "0xbfc01920",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x10 rs 0x00 (gpr[rt] = cop0[rd]; respects $zero via emit_gpr_write; no SR-write hooks)"
},
{
"bucket_key": "16|rs_cop0|4",
"primary_opcode_hex": "0x10",
"sub_kind": "rs_cop0",
"sub_value_hex": "0x04",
"mnemonic": "MTC0",
"category": "COP0",
"count": 13,
"first_example": "0xbfc0023c",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x10 rs 0x04 (cop0[rd] = gpr[rt]; cop0[0] is Index, not zero; no IRQ delivery)"
},
{
"bucket_key": "0|funct|32",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x20",
"mnemonic": "ADD",
"category": "CPU",
"count": 1,
"first_example": "0xbfc03d40",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x20 (overflow-checked, calls psx_arith_overflow on trap)"
},
{
"bucket_key": "8|none|0",
"primary_opcode_hex": "0x08",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "ADDI",
"category": "CPU",
"count": 13,
"first_example": "0xbfc00274",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x08 (overflow-checked, calls psx_arith_overflow on trap)"
},
{
"bucket_key": "9|none|0",
"primary_opcode_hex": "0x09",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "ADDIU",
"category": "CPU",
"count": 7237,
"first_example": "0xbfc00014",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp:141-151"
},
{
"bucket_key": "0|funct|33",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x21",
"mnemonic": "ADDU",
"category": "CPU",
"count": 3806,
"first_example": "0xbfc003dc",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x21"
},
{
"bucket_key": "0|funct|36",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x24",
"mnemonic": "AND",
"category": "CPU",
"count": 165,
"first_example": "0xbfc0128c",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x24"
},
{
"bucket_key": "12|none|0",
"primary_opcode_hex": "0x0C",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "ANDI",
"category": "CPU",
"count": 634,
"first_example": "0xbfc0081c",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x0C (zero-extended imm)"
},
{
"bucket_key": "4|none|0",
"primary_opcode_hex": "0x04",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "BEQ",
"category": "CPU",
"count": 2768,
"first_example": "0xbfc00970",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x04 (terminator; PC-relative target = pc+4+simm*4)"
},
{
"bucket_key": "1|rt|1",
"primary_opcode_hex": "0x01",
"sub_kind": "rt",
"sub_value_hex": "0x01",
"mnemonic": "BGEZ",
"category": "CPU",
"count": 181,
"first_example": "0xbfc00ed8",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp REGIMM rt 0x01 (terminator; signed compare against 0)"
},
{
"bucket_key": "7|none|0",
"primary_opcode_hex": "0x07",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "BGTZ",
"category": "CPU",
"count": 49,
"first_example": "0xbfc01ab8",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x07 (terminator; signed compare against 0)"
},
{
"bucket_key": "6|none|0",
"primary_opcode_hex": "0x06",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "BLEZ",
"category": "CPU",
"count": 131,
"first_example": "0xbfc0151c",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x06 (terminator; signed compare against 0)"
},
{
"bucket_key": "1|rt|0",
"primary_opcode_hex": "0x01",
"sub_kind": "rt",
"sub_value_hex": "0x00",
"mnemonic": "BLTZ",
"category": "CPU",
"count": 25,
"first_example": "0xbfc0113c",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp REGIMM rt 0x00 (terminator; signed compare against 0)"
},
{
"bucket_key": "5|none|0",
"primary_opcode_hex": "0x05",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "BNE",
"category": "CPU",
"count": 1463,
"first_example": "0xbfc00270",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x05 (terminator; PC-relative target = pc+4+simm*4)"
},
{
"bucket_key": "0|funct|13",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x0D",
"mnemonic": "BREAK",
"category": "CPU",
"count": 93,
"first_example": "0xbfc012cc",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x0D (non-terminator; calls psx_break(cpu, code, pc) then return; no exception model)"
},
{
"bucket_key": "0|funct|26",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x1A",
"mnemonic": "DIV",
"category": "CPU",
"count": 73,
"first_example": "0xbfc07c7c",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x1A (signed; guards div-by-zero and INT32_MIN/-1 to match R3000A)"
},
{
"bucket_key": "0|funct|27",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x1B",
"mnemonic": "DIVU",
"category": "CPU",
"count": 18,
"first_example": "0xbfc012a8",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x1B (unsigned; guards div-by-zero to match R3000A)"
},
{
"bucket_key": "2|none|0",
"primary_opcode_hex": "0x02",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "J",
"category": "CPU",
"count": 2,
"first_example": "0xbfc00070",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp:112-123"
},
{
"bucket_key": "3|none|0",
"primary_opcode_hex": "0x03",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "JAL",
"category": "CPU",
"count": 2606,
"first_example": "0xbfc00680",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp:126-138"
},
{
"bucket_key": "0|funct|9",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x09",
"mnemonic": "JALR",
"category": "CPU",
"count": 73,
"first_example": "0xbfc02d5c",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x09"
},
{
"bucket_key": "0|funct|8",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x08",
"mnemonic": "JR",
"category": "CPU",
"count": 716,
"first_example": "0xbfc00454",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x08"
},
{
"bucket_key": "32|none|0",
"primary_opcode_hex": "0x20",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "LB",
"category": "CPU",
"count": 261,
"first_example": "0xbfc00960",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x20 (sign-extended byte; $zero variant uses (void) to keep the read side effect; no alignment requirement)"
},
{
"bucket_key": "36|none|0",
"primary_opcode_hex": "0x24",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "LBU",
"category": "CPU",
"count": 457,
"first_example": "0xbfc00cc4",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x24 (zero-extended byte; $zero variant keeps read side effect; no alignment requirement)"
},
{
"bucket_key": "33|none|0",
"primary_opcode_hex": "0x21",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "LH",
"category": "CPU",
"count": 527,
"first_example": "0xbfc01040",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x21 (sign-extended halfword; 2-aligned; addr & 1 -> psx_unaligned_access)"
},
{
"bucket_key": "37|none|0",
"primary_opcode_hex": "0x25",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "LHU",
"category": "CPU",
"count": 150,
"first_example": "0xbfc08e44",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x25 (zero-extended halfword; 2-aligned; addr & 1 -> psx_unaligned_access)"
},
{
"bucket_key": "15|none|0",
"primary_opcode_hex": "0x0F",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "LUI",
"category": "CPU",
"count": 4122,
"first_example": "0xbfc00000",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp:166-174"
},
{
"bucket_key": "35|none|0",
"primary_opcode_hex": "0x23",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "LW",
"category": "CPU",
"count": 5482,
"first_example": "0xbfc00334",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x23 (32-bit word; 4-aligned; addr & 3 -> psx_unaligned_access)"
},
{
"bucket_key": "34|none|0",
"primary_opcode_hex": "0x22",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "LWL",
"category": "CPU",
"count": 6,
"first_example": "0xbfc19598",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x22 (little-endian unaligned high-bytes load; merges with old rt; no alignment fault by design)"
},
{
"bucket_key": "38|none|0",
"primary_opcode_hex": "0x26",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "LWR",
"category": "CPU",
"count": 6,
"first_example": "0xbfc1959c",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x26 (little-endian unaligned low-bytes load; merges with old rt; no alignment fault by design)"
},
{
"bucket_key": "0|funct|16",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x10",
"mnemonic": "MFHI",
"category": "CPU",
"count": 45,
"first_example": "0xbfc012b0",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x10 (read cpu->hi)"
},
{
"bucket_key": "0|funct|18",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x12",
"mnemonic": "MFLO",
"category": "CPU",
"count": 172,
"first_example": "0xbfc012bc",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x12 (read cpu->lo)"
},
{
"bucket_key": "0|funct|25",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x19",
"mnemonic": "MULTU",
"category": "CPU",
"count": 115,
"first_example": "0xbfc026e4",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x19 (uint64 product into HI:LO)"
},
{
"bucket_key": "NOP|none|0",
"primary_opcode_hex": "NOP",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "NOP",
"category": "CPU",
"count": 3884,
"first_example": "0xbfc00010",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp:54-59"
},
{
"bucket_key": "0|funct|39",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x27",
"mnemonic": "NOR",
"category": "CPU",
"count": 7,
"first_example": "0xbfc11f40",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x27"
},
{
"bucket_key": "0|funct|37",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x25",
"mnemonic": "OR",
"category": "CPU",
"count": 126,
"first_example": "0xbfc001b0",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x25"
},
{
"bucket_key": "13|none|0",
"primary_opcode_hex": "0x0D",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "ORI",
"category": "CPU",
"count": 485,
"first_example": "0xbfc00004",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp:154-163"
},
{
"bucket_key": "40|none|0",
"primary_opcode_hex": "0x28",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "SB",
"category": "CPU",
"count": 703,
"first_example": "0xbfc008d4",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x28 (byte store; no alignment requirement)"
},
{
"bucket_key": "41|none|0",
"primary_opcode_hex": "0x29",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "SH",
"category": "CPU",
"count": 693,
"first_example": "0xbfc0040c",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x29 (halfword store; 2-aligned; addr & 1 -> psx_unaligned_access)"
},
{
"bucket_key": "0|funct|0",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x00",
"mnemonic": "SLL",
"category": "CPU",
"count": 1680,
"first_example": "0xbfc00820",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp:72-78"
},
{
"bucket_key": "0|funct|4",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x04",
"mnemonic": "SLLV",
"category": "CPU",
"count": 10,
"first_example": "0xbfc11f2c",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x04 (variable shift, rs[4:0] via & 0x1Fu mask)"
},
{
"bucket_key": "0|funct|42",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x2A",
"mnemonic": "SLT",
"category": "CPU",
"count": 166,
"first_example": "0xbfc01180",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x2A"
},
{
"bucket_key": "10|none|0",
"primary_opcode_hex": "0x0A",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "SLTI",
"category": "CPU",
"count": 235,
"first_example": "0xbfc02444",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x0A"
},
{
"bucket_key": "11|none|0",
"primary_opcode_hex": "0x0B",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "SLTIU",
"category": "CPU",
"count": 79,
"first_example": "0xbfc00f00",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x0B (sign-extends imm then unsigned-compares)"
},
{
"bucket_key": "0|funct|43",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x2B",
"mnemonic": "SLTU",
"category": "CPU",
"count": 130,
"first_example": "0xbfc003c0",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x2B"
},
{
"bucket_key": "0|funct|3",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x03",
"mnemonic": "SRA",
"category": "CPU",
"count": 300,
"first_example": "0xbfc016bc",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x03 (arithmetic right shift via int32_t cast, literal shamt)"
},
{
"bucket_key": "0|funct|7",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x07",
"mnemonic": "SRAV",
"category": "CPU",
"count": 5,
"first_example": "0xbfc3c8f8",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x07 (variable arithmetic right, rs[4:0] via & 0x1Fu mask)"
},
{
"bucket_key": "0|funct|2",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x02",
"mnemonic": "SRL",
"category": "CPU",
"count": 94,
"first_example": "0xbfc01ce4",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x02 (logical right shift, literal shamt)"
},
{
"bucket_key": "0|funct|35",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x23",
"mnemonic": "SUBU",
"category": "CPU",
"count": 517,
"first_example": "0xbfc00ee0",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x23"
},
{
"bucket_key": "43|none|0",
"primary_opcode_hex": "0x2B",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "SW",
"category": "CPU",
"count": 4037,
"first_example": "0xbfc0000c",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x2B (4-aligned; addr & 3 -> psx_unaligned_access)"
},
{
"bucket_key": "42|none|0",
"primary_opcode_hex": "0x2A",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "SWL",
"category": "CPU",
"count": 6,
"first_example": "0xbfc195a4",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x2A (unaligned high-bytes word store; no alignment fault by design)"
},
{
"bucket_key": "46|none|0",
"primary_opcode_hex": "0x2E",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "SWR",
"category": "CPU",
"count": 6,
"first_example": "0xbfc195a8",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x2E (unaligned low-bytes word store; no alignment fault by design)"
},
{
"bucket_key": "0|funct|12",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x0C",
"mnemonic": "SYSCALL",
"category": "CPU",
"count": 2,
"first_example": "0xbfc0d8c4",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x0C (non-terminator; calls psx_syscall(cpu, gpr[2]) then return; no exception model)"
},
{
"bucket_key": "0|funct|38",
"primary_opcode_hex": "0x00",
"sub_kind": "funct",
"sub_value_hex": "0x26",
"mnemonic": "XOR",
"category": "CPU",
"count": 28,
"first_example": "0xbfc07528",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x26"
},
{
"bucket_key": "14|none|0",
"primary_opcode_hex": "0x0E",
"sub_kind": "none",
"sub_value_hex": "0x00",
"mnemonic": "XORI",
"category": "CPU",
"count": 5,
"first_example": "0xbfc14104",
"status": "implemented",
"source": "recompiler/src/strict_translator.cpp primary 0x0E (zero-extended imm)"
}
],
"implemented_but_unused": [
{
"bucket_key": "0|funct|6",
"mnemonic": "SRLV",
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x06 (variable logical right, rs[4:0] via & 0x1Fu mask; ISA-completeness exception, zero inventory hits)",
"note": "Implemented in strict_translator but not observed in any walked BIOS function. May be needed for code that lives in copy-to-RAM bytes (exception handler) \u2014 re-evaluate after Phase 1e relocation work."
},
{
"bucket_key": "16|rfe|0",
"mnemonic": "RFE",
"source": "recompiler/src/strict_translator.cpp:191-205",
"note": "Implemented in strict_translator but not observed in any walked BIOS function. May be needed for code that lives in copy-to-RAM bytes (exception handler) \u2014 re-evaluate after Phase 1e relocation work."
}
]
}