getprop("ro.product.device") == "olive" || abort("E3004: This package is for \"olive\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/olive/olive:10/QKQ1.191014.001/V11.0.1.0.QCNCNXM:user/release-keys");
ui_print("Target: Xiaomi/olive/olive:10/QKQ1.191014.001/V11.0.2.0.QCNCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/olive/olive:10/QKQ1.191014.001/V11.0.1.0.QCNCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/olive/olive:10/QKQ1.191014.001/V11.0.2.0.QCNCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/olive/olive:10/QKQ1.191014.001/V11.0.1.0.QCNCNXM:user/release-keys or Xiaomi/olive/olive:10/QKQ1.191014.001/V11.0.2.0.QCNCNXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
show_progress(0.100000, 10);
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/boot:67108864:b94750b9073bfc1fec3ea4440204e79fcef8ab55",
                      "EMMC:/dev/block/bootdevice/by-name/boot:67108864:2c2dcd2753971bf1eeeb770faa7b8bd4eac80fcf") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:67108864:b94750b9073bfc1fec3ea4440204e79fcef8ab55\" or \"EMMC:/dev/block/bootdevice/by-name/boot:67108864:2c2dcd2753971bf1eeeb770faa7b8bd4eac80fcf\" has unexpected contents.");
apply_patch_space(67108864) || abort("E3006: Not enough free space on /cache to apply patches.");

# ---- radio update verification ----

ui_print("Verifying radio-update...");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpm:169092:3a70ee050a2c95ce54d0c3013ef7936d6ec91772",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:6761783803c2e44854befeeed3437149139b9a82") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:3a70ee050a2c95ce54d0c3013ef7936d6ec91772\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:6761783803c2e44854befeeed3437149139b9a82\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3a70ee050a2c95ce54d0c3013ef7936d6ec91772",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:6761783803c2e44854befeeed3437149139b9a82") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3a70ee050a2c95ce54d0c3013ef7936d6ec91772\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:6761783803c2e44854befeeed3437149139b9a82\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:12fb5ea22a44ea3e063972d2c302ec08ee431dea",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:3c4303c655e50938524cca4ad19b1eecc3b0b684") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:12fb5ea22a44ea3e063972d2c302ec08ee431dea\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:3c4303c655e50938524cca4ad19b1eecc3b0b684\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:12fb5ea22a44ea3e063972d2c302ec08ee431dea",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:3c4303c655e50938524cca4ad19b1eecc3b0b684") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:12fb5ea22a44ea3e063972d2c302ec08ee431dea\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:3c4303c655e50938524cca4ad19b1eecc3b0b684\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:779460:a3f2bed8c4b59f98a29613201d2ed6ceb8545cdd",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:779460:b44f9c76d4c5b50843282d3b0c3539470486ba00") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:779460:a3f2bed8c4b59f98a29613201d2ed6ceb8545cdd\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:779460:b44f9c76d4c5b50843282d3b0c3539470486ba00\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:779460:a3f2bed8c4b59f98a29613201d2ed6ceb8545cdd",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:779460:b44f9c76d4c5b50843282d3b0c3539470486ba00") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:779460:a3f2bed8c4b59f98a29613201d2ed6ceb8545cdd\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:779460:b44f9c76d4c5b50843282d3b0c3539470486ba00\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:7deda50fd7b63b406ccb92c22cbac39fad29c91b",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:9f0d76d532b7edbda6ee82da776ffae5242bf93f") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:7deda50fd7b63b406ccb92c22cbac39fad29c91b\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:9f0d76d532b7edbda6ee82da776ffae5242bf93f\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:25b9d11940af49c38b1193d1a96336cde90b1c5b",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4c0e518ddfd8f1b96b6fea73016cddfa1819264d") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:25b9d11940af49c38b1193d1a96336cde90b1c5b\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4c0e518ddfd8f1b96b6fea73016cddfa1819264d\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:25b9d11940af49c38b1193d1a96336cde90b1c5b",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4c0e518ddfd8f1b96b6fea73016cddfa1819264d") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:25b9d11940af49c38b1193d1a96336cde90b1c5b\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4c0e518ddfd8f1b96b6fea73016cddfa1819264d\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:b730000e99f3c30ec0df716487e8c572a389f829",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:9cccd134be6bfe708613f390ec6ffdfe174614ce") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:b730000e99f3c30ec0df716487e8c572a389f829\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:9cccd134be6bfe708613f390ec6ffdfe174614ce\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:a168a76fcae20fb081abd1c1a80d9b451b6768d6",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:478a2c4d23beeffbd7d9e0d5dbd715f680e7a5ec") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:a168a76fcae20fb081abd1c1a80d9b451b6768d6\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:408956:478a2c4d23beeffbd7d9e0d5dbd715f680e7a5ec\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:a168a76fcae20fb081abd1c1a80d9b451b6768d6",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:478a2c4d23beeffbd7d9e0d5dbd715f680e7a5ec") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:a168a76fcae20fb081abd1c1a80d9b451b6768d6\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:478a2c4d23beeffbd7d9e0d5dbd715f680e7a5ec\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:38dba722e562d59be56fb17ade7bba4572dbd358",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:d659688de40b59a234503357289cfb1a5272620f") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:38dba722e562d59be56fb17ade7bba4572dbd358\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:d659688de40b59a234503357289cfb1a5272620f\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:38dba722e562d59be56fb17ade7bba4572dbd358",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:d659688de40b59a234503357289cfb1a5272620f") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:38dba722e562d59be56fb17ade7bba4572dbd358\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:d659688de40b59a234503357289cfb1a5272620f\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:fd3345a5217898a55e41e76c456b203c6166d342",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:bee2de98ca10c901942e419adb5ad10fc8c25a54") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:fd3345a5217898a55e41e76c456b203c6166d342\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:bee2de98ca10c901942e419adb5ad10fc8c25a54\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:95e63f1a84d04561c8087c631c6147c25a1796d1",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:b98c5f080f5a70e31ba3e810f84ff9392fd36e0e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:95e63f1a84d04561c8087c631c6147c25a1796d1\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:b98c5f080f5a70e31ba3e810f84ff9392fd36e0e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:8ae60e62a170be2c970d04dc159e12813e4eed19",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:7a63c22978db2e0c2d41f401c14438845369ca9d") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:8ae60e62a170be2c970d04dc159e12813e4eed19\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:7a63c22978db2e0c2d41f401c14438845369ca9d\" has unexpected contents.");
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
show_progress(0.100000, 70);
if (range_sha1("/dev/block/bootdevice/by-name/system", "72,1,689,791,805,811,32770,33053,33054,33559,65537,66042,98306,98589,98590,99095,131073,131578,163842,164125,164126,164631,196609,197114,229378,229661,229662,230167,262145,262650,294914,295197,295198,295703,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,771045,819200,819202,884736,884738,1146880,1146881,1161015,1179411,1179647,1179648") == "534c5ba66cb698500e6163e12df26e416dea5a3a" || block_image_verify("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block("/dev/block/bootdevice/by-name/system");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/system", "72,1,689,791,805,811,32770,33053,33054,33559,65537,66042,98306,98589,98590,99095,131073,131578,163842,164125,164126,164631,196609,197114,229378,229661,229662,230167,262145,262650,294914,295197,295198,295703,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,771045,819200,819202,884736,884738,1146880,1146881,1161015,1179411,1179647,1179648") && block_image_verify("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat"), ui_print("system recovered successfully."), abort("E1004: system partition fails to recover"));
endif;
if (range_sha1("/dev/block/bootdevice/by-name/vendor", "60,1,525,602,610,620,624,629,630,711,715,720,721,726,727,990,994,999,1000,1002,1003,1227,1235,1243,1244,1287,1293,1300,32770,32864,32865,33370,65537,66042,98306,98400,98401,98906,131073,131578,163842,163936,163937,164442,196609,197114,229378,229472,229473,229978,262145,262650,286156,294912,294914,360448,360449,386991,393125,393215,393216") == "50b57e9d09c4285c804e10de7222d9b312db8c6f" || block_image_verify("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block("/dev/block/bootdevice/by-name/vendor");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/vendor", "60,1,525,602,610,620,624,629,630,711,715,720,721,726,727,990,994,999,1000,1002,1003,1227,1235,1243,1244,1287,1293,1300,32770,32864,32865,33370,65537,66042,98306,98400,98401,98906,131073,131578,163842,163936,163937,164442,196609,197114,229378,229472,229473,229978,262145,262650,286156,294912,294914,360448,360449,386991,393125,393215,393216") && block_image_verify("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat"), ui_print("vendor recovered successfully."), abort("E2004: vendor partition fails to recover"));
endif;

# ---- start making changes here ----


# ---- radio update tasks ----

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:3a70ee050a2c95ce54d0c3013ef7936d6ec91772",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:6761783803c2e44854befeeed3437149139b9a82",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:6761783803c2e44854befeeed3437149139b9a82");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:12fb5ea22a44ea3e063972d2c302ec08ee431dea",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:3c4303c655e50938524cca4ad19b1eecc3b0b684",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:3c4303c655e50938524cca4ad19b1eecc3b0b684");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:779460:a3f2bed8c4b59f98a29613201d2ed6ceb8545cdd",
                "EMMC:/dev/block/bootdevice/by-name/aboot:779460:b44f9c76d4c5b50843282d3b0c3539470486ba00",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/aboot:779460:b44f9c76d4c5b50843282d3b0c3539470486ba00");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:7deda50fd7b63b406ccb92c22cbac39fad29c91b",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:9f0d76d532b7edbda6ee82da776ffae5242bf93f",
                package_extract_file("patch/firmware-update/cmnlib64_30.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:9f0d76d532b7edbda6ee82da776ffae5242bf93f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:25b9d11940af49c38b1193d1a96336cde90b1c5b",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4c0e518ddfd8f1b96b6fea73016cddfa1819264d",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4c0e518ddfd8f1b96b6fea73016cddfa1819264d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:b730000e99f3c30ec0df716487e8c572a389f829",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:9cccd134be6bfe708613f390ec6ffdfe174614ce",
                package_extract_file("patch/firmware-update/cmnlib_30.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:9cccd134be6bfe708613f390ec6ffdfe174614ce");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:a168a76fcae20fb081abd1c1a80d9b451b6768d6",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:478a2c4d23beeffbd7d9e0d5dbd715f680e7a5ec",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:408956:478a2c4d23beeffbd7d9e0d5dbd715f680e7a5ec");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:38dba722e562d59be56fb17ade7bba4572dbd358",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:d659688de40b59a234503357289cfb1a5272620f",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:d659688de40b59a234503357289cfb1a5272620f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:fd3345a5217898a55e41e76c456b203c6166d342",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:bee2de98ca10c901942e419adb5ad10fc8c25a54",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:134217728:bee2de98ca10c901942e419adb5ad10fc8c25a54");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3a70ee050a2c95ce54d0c3013ef7936d6ec91772",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:6761783803c2e44854befeeed3437149139b9a82",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:6761783803c2e44854befeeed3437149139b9a82");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:12fb5ea22a44ea3e063972d2c302ec08ee431dea",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:3c4303c655e50938524cca4ad19b1eecc3b0b684",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:3c4303c655e50938524cca4ad19b1eecc3b0b684");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:779460:a3f2bed8c4b59f98a29613201d2ed6ceb8545cdd",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:779460:b44f9c76d4c5b50843282d3b0c3539470486ba00",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abootbak:779460:b44f9c76d4c5b50843282d3b0c3539470486ba00");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:25b9d11940af49c38b1193d1a96336cde90b1c5b",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4c0e518ddfd8f1b96b6fea73016cddfa1819264d",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4c0e518ddfd8f1b96b6fea73016cddfa1819264d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:a168a76fcae20fb081abd1c1a80d9b451b6768d6",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:478a2c4d23beeffbd7d9e0d5dbd715f680e7a5ec",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:478a2c4d23beeffbd7d9e0d5dbd715f680e7a5ec");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:38dba722e562d59be56fb17ade7bba4572dbd358",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:d659688de40b59a234503357289cfb1a5272620f",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:d659688de40b59a234503357289cfb1a5272620f");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:67108864:b94750b9073bfc1fec3ea4440204e79fcef8ab55",
                "EMMC:/dev/block/bootdevice/by-name/boot:67108864:2c2dcd2753971bf1eeeb770faa7b8bd4eac80fcf",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:67108864:2c2dcd2753971bf1eeeb770faa7b8bd4eac80fcf");

# ---- radio update tasks ----

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:3a70ee050a2c95ce54d0c3013ef7936d6ec91772",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:6761783803c2e44854befeeed3437149139b9a82",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:6761783803c2e44854befeeed3437149139b9a82");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:12fb5ea22a44ea3e063972d2c302ec08ee431dea",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:3c4303c655e50938524cca4ad19b1eecc3b0b684",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:3c4303c655e50938524cca4ad19b1eecc3b0b684");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:779460:a3f2bed8c4b59f98a29613201d2ed6ceb8545cdd",
                "EMMC:/dev/block/bootdevice/by-name/aboot:779460:b44f9c76d4c5b50843282d3b0c3539470486ba00",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/aboot:779460:b44f9c76d4c5b50843282d3b0c3539470486ba00");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:7deda50fd7b63b406ccb92c22cbac39fad29c91b",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:9f0d76d532b7edbda6ee82da776ffae5242bf93f",
                package_extract_file("patch/firmware-update/cmnlib64_30.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:9f0d76d532b7edbda6ee82da776ffae5242bf93f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:25b9d11940af49c38b1193d1a96336cde90b1c5b",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4c0e518ddfd8f1b96b6fea73016cddfa1819264d",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4c0e518ddfd8f1b96b6fea73016cddfa1819264d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:b730000e99f3c30ec0df716487e8c572a389f829",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:9cccd134be6bfe708613f390ec6ffdfe174614ce",
                package_extract_file("patch/firmware-update/cmnlib_30.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:9cccd134be6bfe708613f390ec6ffdfe174614ce");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:a168a76fcae20fb081abd1c1a80d9b451b6768d6",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:478a2c4d23beeffbd7d9e0d5dbd715f680e7a5ec",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:408956:478a2c4d23beeffbd7d9e0d5dbd715f680e7a5ec");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:38dba722e562d59be56fb17ade7bba4572dbd358",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:d659688de40b59a234503357289cfb1a5272620f",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:d659688de40b59a234503357289cfb1a5272620f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:fd3345a5217898a55e41e76c456b203c6166d342",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:bee2de98ca10c901942e419adb5ad10fc8c25a54",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:134217728:bee2de98ca10c901942e419adb5ad10fc8c25a54");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3a70ee050a2c95ce54d0c3013ef7936d6ec91772",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:6761783803c2e44854befeeed3437149139b9a82",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:6761783803c2e44854befeeed3437149139b9a82");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:12fb5ea22a44ea3e063972d2c302ec08ee431dea",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:3c4303c655e50938524cca4ad19b1eecc3b0b684",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:3c4303c655e50938524cca4ad19b1eecc3b0b684");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:779460:a3f2bed8c4b59f98a29613201d2ed6ceb8545cdd",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:779460:b44f9c76d4c5b50843282d3b0c3539470486ba00",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abootbak:779460:b44f9c76d4c5b50843282d3b0c3539470486ba00");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:25b9d11940af49c38b1193d1a96336cde90b1c5b",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4c0e518ddfd8f1b96b6fea73016cddfa1819264d",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4c0e518ddfd8f1b96b6fea73016cddfa1819264d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:a168a76fcae20fb081abd1c1a80d9b451b6768d6",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:478a2c4d23beeffbd7d9e0d5dbd715f680e7a5ec",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:478a2c4d23beeffbd7d9e0d5dbd715f680e7a5ec");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:38dba722e562d59be56fb17ade7bba4572dbd358",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:d659688de40b59a234503357289cfb1a5272620f",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:d659688de40b59a234503357289cfb1a5272620f");
show_progress(0.600000, 600);
ui_print("Patching system image after verification.");
block_image_update("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");
ui_print("Patching vendor image after verification.");
block_image_update("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");
show_progress(0.100000, 2);

# ---- radio update tasks 2 ----

ui_print("Patching vbmeta dtbo logo binimages...");
package_extract_file("firmware-update/splash.img", "/dev/block/bootdevice/by-name/splash");
patch_partition("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:95e63f1a84d04561c8087c631c6147c25a1796d1",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:b98c5f080f5a70e31ba3e810f84ff9392fd36e0e",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:b98c5f080f5a70e31ba3e810f84ff9392fd36e0e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:8ae60e62a170be2c970d04dc159e12813e4eed19",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:7a63c22978db2e0c2d41f401c14438845369ca9d",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:7a63c22978db2e0c2d41f401c14438845369ca9d");
