getprop("ro.product.device") == "olivelite" || abort("E3004: This package is for \"olivelite\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V11.0.2.0.QCPINXM:user/release-keys");
ui_print("Target: Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.0.1.0.QCPINXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V11.0.2.0.QCPINXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.0.1.0.QCPINXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V11.0.2.0.QCPINXM:user/release-keys or Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.0.1.0.QCPINXM: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:33554432:0664754280267540275b6907b981ae8e09e97637",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:69ce7a9c0e420d24f51472c783d84b68c1f95228") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:0664754280267540275b6907b981ae8e09e97637\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:69ce7a9c0e420d24f51472c783d84b68c1f95228\" has unexpected contents.");
apply_patch_space(112594944) || 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:51db13473a61335fcb02300ad085976a0f615ed0",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:85f043c9ea092c3dc756111513f028fd1abf7491") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:51db13473a61335fcb02300ad085976a0f615ed0\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:85f043c9ea092c3dc756111513f028fd1abf7491\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:51db13473a61335fcb02300ad085976a0f615ed0",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:85f043c9ea092c3dc756111513f028fd1abf7491") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:51db13473a61335fcb02300ad085976a0f615ed0\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:85f043c9ea092c3dc756111513f028fd1abf7491\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ad8daccb87508ec8fed5f02e02a540074d0eaf6a",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:bfdfa7164c2e6e2b26cbc90d9f6573c9ef4b5b69") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ad8daccb87508ec8fed5f02e02a540074d0eaf6a\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:bfdfa7164c2e6e2b26cbc90d9f6573c9ef4b5b69\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ad8daccb87508ec8fed5f02e02a540074d0eaf6a",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:bfdfa7164c2e6e2b26cbc90d9f6573c9ef4b5b69") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ad8daccb87508ec8fed5f02e02a540074d0eaf6a\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:bfdfa7164c2e6e2b26cbc90d9f6573c9ef4b5b69\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:779468:a080895b3ca2609c2f10c6e3c39b210c1a1c8be9",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:779468:ef1d8356feb922f0c7e7496e8514e5bb0f6bbd69") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:a080895b3ca2609c2f10c6e3c39b210c1a1c8be9\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:ef1d8356feb922f0c7e7496e8514e5bb0f6bbd69\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:a080895b3ca2609c2f10c6e3c39b210c1a1c8be9",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:ef1d8356feb922f0c7e7496e8514e5bb0f6bbd69") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:a080895b3ca2609c2f10c6e3c39b210c1a1c8be9\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:ef1d8356feb922f0c7e7496e8514e5bb0f6bbd69\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:5ebac7db1bff68d18a413e9bdbbbabb9189da477",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:98370aa95d636c4c9923e12ac5cf77553b5dc637") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:5ebac7db1bff68d18a413e9bdbbbabb9189da477\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:98370aa95d636c4c9923e12ac5cf77553b5dc637\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:438a8c4fee1f2642507436ef61b822ac79526023",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2ed23c6a86f2326477ef6d3d8bcf3cb065095ede") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:438a8c4fee1f2642507436ef61b822ac79526023\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2ed23c6a86f2326477ef6d3d8bcf3cb065095ede\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:438a8c4fee1f2642507436ef61b822ac79526023",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2ed23c6a86f2326477ef6d3d8bcf3cb065095ede") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:438a8c4fee1f2642507436ef61b822ac79526023\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2ed23c6a86f2326477ef6d3d8bcf3cb065095ede\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:382c18d01156886ea305148829247a23fc494e1a",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:2fa92d5eeaaed73dc4ff43ed1317a621cee89b7f") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:382c18d01156886ea305148829247a23fc494e1a\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:2fa92d5eeaaed73dc4ff43ed1317a621cee89b7f\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:5db7259f056c5eed39094f436c73a75828e428f1",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:dd148fe60da3d556d5bdd62f181f2b16b08baa5a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:5db7259f056c5eed39094f436c73a75828e428f1\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:dd148fe60da3d556d5bdd62f181f2b16b08baa5a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:c51dcf36ca41ecee17851ee279f076ffc63f8a37",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:5630fd7afade862a12272b31e0dcff259b753f12") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:c51dcf36ca41ecee17851ee279f076ffc63f8a37\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:5630fd7afade862a12272b31e0dcff259b753f12\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:c51dcf36ca41ecee17851ee279f076ffc63f8a37",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:5630fd7afade862a12272b31e0dcff259b753f12") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:c51dcf36ca41ecee17851ee279f076ffc63f8a37\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:5630fd7afade862a12272b31e0dcff259b753f12\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900",
                      "EMMC:/dev/block/bootdevice/by-name/dsp:16777216:cb4d87fdc98670a4085e4bacca8c30573dc28991") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900\" or \"EMMC:/dev/block/bootdevice/by-name/dsp:16777216:cb4d87fdc98670a4085e4bacca8c30573dc28991\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:0aa57f7c0b5e3b79c1cbf52fcde49029db3f7c69",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:305dd964644b0506b915591a6ab3846b9ca02bdb") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:0aa57f7c0b5e3b79c1cbf52fcde49029db3f7c69\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:305dd964644b0506b915591a6ab3846b9ca02bdb\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:0aa57f7c0b5e3b79c1cbf52fcde49029db3f7c69",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:305dd964644b0506b915591a6ab3846b9ca02bdb") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:0aa57f7c0b5e3b79c1cbf52fcde49029db3f7c69\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:305dd964644b0506b915591a6ab3846b9ca02bdb\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:e9aeec2cf3fcd988acb73f5bff8d1b508ba1f1d7",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:4380093d70862dad1052fc02a2c36d0f31b57f8a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:e9aeec2cf3fcd988acb73f5bff8d1b508ba1f1d7\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:4380093d70862dad1052fc02a2c36d0f31b57f8a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:4f3000bd9ad44aaa2d1a22b108b133a2285a07b2",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:95abf1a03b2c59e033096d91780a65cbe58cc4dc") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:4f3000bd9ad44aaa2d1a22b108b133a2285a07b2\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:95abf1a03b2c59e033096d91780a65cbe58cc4dc\" 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", "262,1,617,759,773,783,786,803,810,830,831,1018,1023,1025,1026,1132,1133,1613,1614,1616,1618,1619,1620,1635,1636,1773,1774,2040,2086,2101,2109,2125,2231,2601,2602,2604,2605,2608,2609,2617,2618,2619,2620,3085,3170,3497,3665,3919,4203,6253,6347,7006,7007,7009,7295,7297,7298,7861,7863,13802,13803,13936,13937,16706,16708,22638,22639,22641,22643,22702,22703,22836,22838,22998,23002,23010,23011,23019,23023,23028,23029,23051,23055,23059,23060,27934,27951,27955,32770,33021,33022,33527,52202,52889,52891,52915,65537,66042,79305,79876,82277,82283,98306,98557,98558,99063,131073,131578,157287,157293,157294,157857,157859,157877,162251,162252,163842,164093,164094,164599,196609,197114,229378,229629,229630,230135,252250,252294,252983,253075,260515,260542,262145,262650,265377,265381,265392,265429,266886,266890,270200,270204,270240,270242,285857,285879,294914,295165,295166,295671,309647,310339,310599,310600,310677,327680,327681,332923,333197,333328,333478,333611,334428,334558,334708,334841,339971,340864,340865,341732,360449,360954,391892,391905,393217,393722,396091,396093,396107,396114,396135,396145,396147,396149,396158,396159,396161,396162,396166,396167,396174,396177,396203,396204,396211,396212,396215,396217,396226,396228,396241,396242,396257,396258,396315,396316,396320,396321,396362,396364,396379,396380,396387,396390,396399,396400,396414,396417,396450,396451,396463,396464,396485,396487,396493,396495,396832,396834,398085,398086,425985,426490,458753,459258,491521,492026,524289,524794,555948,555978,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,690519,690529,690535,819200,819202,884736,884738,1015808,1015809,1032011,1048363,1048575,1048576") == "419e7d5a225124cb927c7cbec14cac4ccf443fab" || 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", "262,1,617,759,773,783,786,803,810,830,831,1018,1023,1025,1026,1132,1133,1613,1614,1616,1618,1619,1620,1635,1636,1773,1774,2040,2086,2101,2109,2125,2231,2601,2602,2604,2605,2608,2609,2617,2618,2619,2620,3085,3170,3497,3665,3919,4203,6253,6347,7006,7007,7009,7295,7297,7298,7861,7863,13802,13803,13936,13937,16706,16708,22638,22639,22641,22643,22702,22703,22836,22838,22998,23002,23010,23011,23019,23023,23028,23029,23051,23055,23059,23060,27934,27951,27955,32770,33021,33022,33527,52202,52889,52891,52915,65537,66042,79305,79876,82277,82283,98306,98557,98558,99063,131073,131578,157287,157293,157294,157857,157859,157877,162251,162252,163842,164093,164094,164599,196609,197114,229378,229629,229630,230135,252250,252294,252983,253075,260515,260542,262145,262650,265377,265381,265392,265429,266886,266890,270200,270204,270240,270242,285857,285879,294914,295165,295166,295671,309647,310339,310599,310600,310677,327680,327681,332923,333197,333328,333478,333611,334428,334558,334708,334841,339971,340864,340865,341732,360449,360954,391892,391905,393217,393722,396091,396093,396107,396114,396135,396145,396147,396149,396158,396159,396161,396162,396166,396167,396174,396177,396203,396204,396211,396212,396215,396217,396226,396228,396241,396242,396257,396258,396315,396316,396320,396321,396362,396364,396379,396380,396387,396390,396399,396400,396414,396417,396450,396451,396463,396464,396485,396487,396493,396495,396832,396834,398085,398086,425985,426490,458753,459258,491521,492026,524289,524794,555948,555978,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,690519,690529,690535,819200,819202,884736,884738,1015808,1015809,1032011,1048363,1048575,1048576") && 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", "48,1,457,570,578,588,592,597,598,679,683,688,689,952,956,961,17256,20108,32770,32832,32833,33338,60435,61044,65537,66042,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,209109,209374,216390,229376,229378,229440,229441,257987,262077,262143,262144") == "b4ce329987f7a307f6b5722720b152b8f55b7588" || 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", "48,1,457,570,578,588,592,597,598,679,683,688,689,952,956,961,17256,20108,32770,32832,32833,33338,60435,61044,65537,66042,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,209109,209374,216390,229376,229378,229440,229441,257987,262077,262143,262144") && 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 ----

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:33554432:0664754280267540275b6907b981ae8e09e97637",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:69ce7a9c0e420d24f51472c783d84b68c1f95228",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:69ce7a9c0e420d24f51472c783d84b68c1f95228");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:51db13473a61335fcb02300ad085976a0f615ed0",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:85f043c9ea092c3dc756111513f028fd1abf7491",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:85f043c9ea092c3dc756111513f028fd1abf7491");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ad8daccb87508ec8fed5f02e02a540074d0eaf6a",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:bfdfa7164c2e6e2b26cbc90d9f6573c9ef4b5b69",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:bfdfa7164c2e6e2b26cbc90d9f6573c9ef4b5b69");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:779468:a080895b3ca2609c2f10c6e3c39b210c1a1c8be9",
                "EMMC:/dev/block/bootdevice/by-name/aboot:779468:ef1d8356feb922f0c7e7496e8514e5bb0f6bbd69",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/aboot:779468:ef1d8356feb922f0c7e7496e8514e5bb0f6bbd69");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:5ebac7db1bff68d18a413e9bdbbbabb9189da477",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:98370aa95d636c4c9923e12ac5cf77553b5dc637",
                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:98370aa95d636c4c9923e12ac5cf77553b5dc637");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:438a8c4fee1f2642507436ef61b822ac79526023",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2ed23c6a86f2326477ef6d3d8bcf3cb065095ede",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2ed23c6a86f2326477ef6d3d8bcf3cb065095ede");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:382c18d01156886ea305148829247a23fc494e1a",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:2fa92d5eeaaed73dc4ff43ed1317a621cee89b7f",
                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:2fa92d5eeaaed73dc4ff43ed1317a621cee89b7f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:5db7259f056c5eed39094f436c73a75828e428f1",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:dd148fe60da3d556d5bdd62f181f2b16b08baa5a",
                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:dd148fe60da3d556d5bdd62f181f2b16b08baa5a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:c51dcf36ca41ecee17851ee279f076ffc63f8a37",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:5630fd7afade862a12272b31e0dcff259b753f12",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:5630fd7afade862a12272b31e0dcff259b753f12");
patch_partition("EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900",
                "EMMC:/dev/block/bootdevice/by-name/dsp:16777216:cb4d87fdc98670a4085e4bacca8c30573dc28991",
                package_extract_file("patch/firmware-update/adspso.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dsp:16777216:cb4d87fdc98670a4085e4bacca8c30573dc28991");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:0aa57f7c0b5e3b79c1cbf52fcde49029db3f7c69",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:305dd964644b0506b915591a6ab3846b9ca02bdb",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:409044:305dd964644b0506b915591a6ab3846b9ca02bdb");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:51db13473a61335fcb02300ad085976a0f615ed0",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:85f043c9ea092c3dc756111513f028fd1abf7491",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:85f043c9ea092c3dc756111513f028fd1abf7491");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ad8daccb87508ec8fed5f02e02a540074d0eaf6a",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:bfdfa7164c2e6e2b26cbc90d9f6573c9ef4b5b69",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:bfdfa7164c2e6e2b26cbc90d9f6573c9ef4b5b69");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:a080895b3ca2609c2f10c6e3c39b210c1a1c8be9",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:ef1d8356feb922f0c7e7496e8514e5bb0f6bbd69",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abootbak:779468:ef1d8356feb922f0c7e7496e8514e5bb0f6bbd69");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:438a8c4fee1f2642507436ef61b822ac79526023",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2ed23c6a86f2326477ef6d3d8bcf3cb065095ede",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2ed23c6a86f2326477ef6d3d8bcf3cb065095ede");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:c51dcf36ca41ecee17851ee279f076ffc63f8a37",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:5630fd7afade862a12272b31e0dcff259b753f12",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:5630fd7afade862a12272b31e0dcff259b753f12");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:0aa57f7c0b5e3b79c1cbf52fcde49029db3f7c69",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:305dd964644b0506b915591a6ab3846b9ca02bdb",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:305dd964644b0506b915591a6ab3846b9ca02bdb");
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:e9aeec2cf3fcd988acb73f5bff8d1b508ba1f1d7",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:4380093d70862dad1052fc02a2c36d0f31b57f8a",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:4380093d70862dad1052fc02a2c36d0f31b57f8a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:4f3000bd9ad44aaa2d1a22b108b133a2285a07b2",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:95abf1a03b2c59e033096d91780a65cbe58cc4dc",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:95abf1a03b2c59e033096d91780a65cbe58cc4dc");
