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.QCPMIXM:user/release-keys");
ui_print("Target: Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V11.0.3.0.QCPMIXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V11.0.2.0.QCPMIXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V11.0.3.0.QCPMIXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V11.0.2.0.QCPMIXM:user/release-keys or Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V11.0.3.0.QCPMIXM: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:2c0540b166dd520fb798f8f8596cbc9ab3975d60",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:476b8fba232ed295ba6c988f0792fa744f0db5a4") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:2c0540b166dd520fb798f8f8596cbc9ab3975d60\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:476b8fba232ed295ba6c988f0792fa744f0db5a4\" has unexpected contents.");
apply_patch_space(56066048) || 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:ce41879cea2f04d96b8e47405ab981506e856a2c",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:17293708aecb32e178df9112224e8c4b7a27c277") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:ce41879cea2f04d96b8e47405ab981506e856a2c\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:17293708aecb32e178df9112224e8c4b7a27c277\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ce41879cea2f04d96b8e47405ab981506e856a2c",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:17293708aecb32e178df9112224e8c4b7a27c277") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ce41879cea2f04d96b8e47405ab981506e856a2c\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:17293708aecb32e178df9112224e8c4b7a27c277\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:0c9260efc1aa55472525200e24a1478caa5e6aa1",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:49b1381e40e16e4a0ce168de7f5005c53651b89c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:0c9260efc1aa55472525200e24a1478caa5e6aa1\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:49b1381e40e16e4a0ce168de7f5005c53651b89c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:0c9260efc1aa55472525200e24a1478caa5e6aa1",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:49b1381e40e16e4a0ce168de7f5005c53651b89c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:0c9260efc1aa55472525200e24a1478caa5e6aa1\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:49b1381e40e16e4a0ce168de7f5005c53651b89c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:779468:389032703a77a055170004cadba59ddfe5ff769a",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:779468:cf41de1082ba93149437da758b3811a2ffcd37b4") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:389032703a77a055170004cadba59ddfe5ff769a\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:cf41de1082ba93149437da758b3811a2ffcd37b4\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:389032703a77a055170004cadba59ddfe5ff769a",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:cf41de1082ba93149437da758b3811a2ffcd37b4") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:389032703a77a055170004cadba59ddfe5ff769a\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:cf41de1082ba93149437da758b3811a2ffcd37b4\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:8045a24a6e0c1bc59a8107219454b1591eb5f8dd",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:cc41d1fe4a0c5e17047887445f47ba8f042db78c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:8045a24a6e0c1bc59a8107219454b1591eb5f8dd\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:cc41d1fe4a0c5e17047887445f47ba8f042db78c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:ae4fc7236d5ef997520787293516a2c154005733",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:3352d3aa05e1d1e0f711240d8ab9681f5a20eff5") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:ae4fc7236d5ef997520787293516a2c154005733\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:3352d3aa05e1d1e0f711240d8ab9681f5a20eff5\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:ae4fc7236d5ef997520787293516a2c154005733",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:3352d3aa05e1d1e0f711240d8ab9681f5a20eff5") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:ae4fc7236d5ef997520787293516a2c154005733\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:3352d3aa05e1d1e0f711240d8ab9681f5a20eff5\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:ac7cfdac7a9fcce7287f44b054ceb70621b51a64",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:373a6c15b6e8db66e4d0e82f26de889dce993a12") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:ac7cfdac7a9fcce7287f44b054ceb70621b51a64\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:373a6c15b6e8db66e4d0e82f26de889dce993a12\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:6760385aacbe46e345b2146ad7ec4a7d39664e90",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:89f85f0c9359622821049f4472eaff28ca04fcfc") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:6760385aacbe46e345b2146ad7ec4a7d39664e90\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:89f85f0c9359622821049f4472eaff28ca04fcfc\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:6760385aacbe46e345b2146ad7ec4a7d39664e90",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:89f85f0c9359622821049f4472eaff28ca04fcfc") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:6760385aacbe46e345b2146ad7ec4a7d39664e90\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:89f85f0c9359622821049f4472eaff28ca04fcfc\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:5cfdc26ad74f023cc10057b826da23f1a7307c5d",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:ad7c19f86745040a4ad9b138211ca95b94613bef") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:5cfdc26ad74f023cc10057b826da23f1a7307c5d\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:ad7c19f86745040a4ad9b138211ca95b94613bef\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:5cfdc26ad74f023cc10057b826da23f1a7307c5d",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:ad7c19f86745040a4ad9b138211ca95b94613bef") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:5cfdc26ad74f023cc10057b826da23f1a7307c5d\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:ad7c19f86745040a4ad9b138211ca95b94613bef\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:de9f9eac3544a7f2c2c019cdfe822cba9edcdf21",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:21504dfd7824326c662dbf1e39538eebec55f544") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:de9f9eac3544a7f2c2c019cdfe822cba9edcdf21\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:21504dfd7824326c662dbf1e39538eebec55f544\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:d6fbb6eefde2f3c7bdb7e1746b33eb291bec2fef",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:d83fa079292ba58b0bd30be709ea91c7bfa4d829") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:d6fbb6eefde2f3c7bdb7e1746b33eb291bec2fef\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:d83fa079292ba58b0bd30be709ea91c7bfa4d829\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:3f13b2da15f7e6c29bd172f982a100286beee298",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:441a9875536d08f996b785df518b5aee2034de6c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:3f13b2da15f7e6c29bd172f982a100286beee298\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:441a9875536d08f996b785df518b5aee2034de6c\" 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", "186,1,616,759,773,783,786,803,810,830,831,1018,1023,1025,1026,1132,1133,1613,1614,1616,1618,1619,1620,1635,1636,1773,1782,1788,1811,1944,2101,2579,2602,2604,2605,2608,2609,2617,2618,2619,2620,3497,3665,3919,4203,4573,4694,6444,6466,7006,7007,7009,7295,7297,7298,7861,7863,13802,13803,13936,13937,16706,16708,17631,19101,22638,22639,22641,22643,22702,22703,22836,22838,22998,23002,23010,23011,23019,23023,23028,23029,23051,23055,23059,23060,27934,27935,27947,27951,27955,29204,29210,29214,29218,29219,29224,29228,29232,29233,29347,29353,29358,29359,31530,31534,31563,31564,31594,31598,31602,31603,31700,31704,31708,32770,33021,33022,33527,65537,66042,98306,98557,98558,99063,131073,131578,162033,162039,162040,162603,162605,162623,163842,164093,164094,164599,196609,197114,229378,229629,229630,230135,262145,262650,294914,295165,295166,295671,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,582667,582697,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,727525,819200,819202,884736,884738,1015808,1015809,1032011,1048363,1048575,1048576") == "137891da7b7f0767668892c536ee3753cd281911" || 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", "186,1,616,759,773,783,786,803,810,830,831,1018,1023,1025,1026,1132,1133,1613,1614,1616,1618,1619,1620,1635,1636,1773,1782,1788,1811,1944,2101,2579,2602,2604,2605,2608,2609,2617,2618,2619,2620,3497,3665,3919,4203,4573,4694,6444,6466,7006,7007,7009,7295,7297,7298,7861,7863,13802,13803,13936,13937,16706,16708,17631,19101,22638,22639,22641,22643,22702,22703,22836,22838,22998,23002,23010,23011,23019,23023,23028,23029,23051,23055,23059,23060,27934,27935,27947,27951,27955,29204,29210,29214,29218,29219,29224,29228,29232,29233,29347,29353,29358,29359,31530,31534,31563,31564,31594,31598,31602,31603,31700,31704,31708,32770,33021,33022,33527,65537,66042,98306,98557,98558,99063,131073,131578,162033,162039,162040,162603,162605,162623,163842,164093,164094,164599,196609,197114,229378,229629,229630,230135,262145,262650,294914,295165,295166,295671,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,582667,582697,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,727525,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", "168,1,457,570,578,588,592,597,598,679,683,688,689,952,956,961,962,964,965,1189,1197,1205,1211,1214,1218,1222,1223,1796,1797,3704,3705,3843,3887,4274,4275,4907,4908,5644,5649,12990,12991,17255,17256,20108,20109,24083,24084,32768,32770,32832,32833,37329,37330,42086,42087,43109,43111,43131,43133,43452,43453,43779,43780,44074,44075,44383,44384,44666,44667,44961,44962,45338,45339,45413,45414,48829,48830,49022,49023,49111,49114,49132,49133,49178,49179,49197,49199,49248,49249,49280,49281,50168,50169,50182,50183,50191,50192,50213,50214,50312,50313,50596,50597,50613,50614,50710,50711,50713,50714,51280,51281,51356,51357,51358,51359,51371,51373,52639,52640,53777,53779,54200,54201,54475,54476,54900,54901,54926,54931,55099,55103,55944,55945,56018,56630,56853,56854,58411,58738,58978,59271,59990,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") == "3eda440272be67427ac43c315e61ac31291eb19a" || 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", "168,1,457,570,578,588,592,597,598,679,683,688,689,952,956,961,962,964,965,1189,1197,1205,1211,1214,1218,1222,1223,1796,1797,3704,3705,3843,3887,4274,4275,4907,4908,5644,5649,12990,12991,17255,17256,20108,20109,24083,24084,32768,32770,32832,32833,37329,37330,42086,42087,43109,43111,43131,43133,43452,43453,43779,43780,44074,44075,44383,44384,44666,44667,44961,44962,45338,45339,45413,45414,48829,48830,49022,49023,49111,49114,49132,49133,49178,49179,49197,49199,49248,49249,49280,49281,50168,50169,50182,50183,50191,50192,50213,50214,50312,50313,50596,50597,50613,50614,50710,50711,50713,50714,51280,51281,51356,51357,51358,51359,51371,51373,52639,52640,53777,53779,54200,54201,54475,54476,54900,54901,54926,54931,55099,55103,55944,55945,56018,56630,56853,56854,58411,58738,58978,59271,59990,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:2c0540b166dd520fb798f8f8596cbc9ab3975d60",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:476b8fba232ed295ba6c988f0792fa744f0db5a4",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:476b8fba232ed295ba6c988f0792fa744f0db5a4");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:ce41879cea2f04d96b8e47405ab981506e856a2c",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:17293708aecb32e178df9112224e8c4b7a27c277",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:17293708aecb32e178df9112224e8c4b7a27c277");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:0c9260efc1aa55472525200e24a1478caa5e6aa1",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:49b1381e40e16e4a0ce168de7f5005c53651b89c",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:49b1381e40e16e4a0ce168de7f5005c53651b89c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:779468:389032703a77a055170004cadba59ddfe5ff769a",
                "EMMC:/dev/block/bootdevice/by-name/aboot:779468:cf41de1082ba93149437da758b3811a2ffcd37b4",
                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:cf41de1082ba93149437da758b3811a2ffcd37b4");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:8045a24a6e0c1bc59a8107219454b1591eb5f8dd",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:cc41d1fe4a0c5e17047887445f47ba8f042db78c",
                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:cc41d1fe4a0c5e17047887445f47ba8f042db78c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:ae4fc7236d5ef997520787293516a2c154005733",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:3352d3aa05e1d1e0f711240d8ab9681f5a20eff5",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:3352d3aa05e1d1e0f711240d8ab9681f5a20eff5");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:ac7cfdac7a9fcce7287f44b054ceb70621b51a64",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:373a6c15b6e8db66e4d0e82f26de889dce993a12",
                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:373a6c15b6e8db66e4d0e82f26de889dce993a12");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:6760385aacbe46e345b2146ad7ec4a7d39664e90",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:89f85f0c9359622821049f4472eaff28ca04fcfc",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:409044:89f85f0c9359622821049f4472eaff28ca04fcfc");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:5cfdc26ad74f023cc10057b826da23f1a7307c5d",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:ad7c19f86745040a4ad9b138211ca95b94613bef",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:ad7c19f86745040a4ad9b138211ca95b94613bef");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:de9f9eac3544a7f2c2c019cdfe822cba9edcdf21",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:21504dfd7824326c662dbf1e39538eebec55f544",
                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:21504dfd7824326c662dbf1e39538eebec55f544");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ce41879cea2f04d96b8e47405ab981506e856a2c",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:17293708aecb32e178df9112224e8c4b7a27c277",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:17293708aecb32e178df9112224e8c4b7a27c277");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:0c9260efc1aa55472525200e24a1478caa5e6aa1",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:49b1381e40e16e4a0ce168de7f5005c53651b89c",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:49b1381e40e16e4a0ce168de7f5005c53651b89c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:389032703a77a055170004cadba59ddfe5ff769a",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:cf41de1082ba93149437da758b3811a2ffcd37b4",
                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:cf41de1082ba93149437da758b3811a2ffcd37b4");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:ae4fc7236d5ef997520787293516a2c154005733",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:3352d3aa05e1d1e0f711240d8ab9681f5a20eff5",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:3352d3aa05e1d1e0f711240d8ab9681f5a20eff5");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:6760385aacbe46e345b2146ad7ec4a7d39664e90",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:89f85f0c9359622821049f4472eaff28ca04fcfc",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:89f85f0c9359622821049f4472eaff28ca04fcfc");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:5cfdc26ad74f023cc10057b826da23f1a7307c5d",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:ad7c19f86745040a4ad9b138211ca95b94613bef",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:ad7c19f86745040a4ad9b138211ca95b94613bef");
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:d6fbb6eefde2f3c7bdb7e1746b33eb291bec2fef",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:d83fa079292ba58b0bd30be709ea91c7bfa4d829",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:d83fa079292ba58b0bd30be709ea91c7bfa4d829");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:3f13b2da15f7e6c29bd172f982a100286beee298",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:441a9875536d08f996b785df518b5aee2034de6c",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:441a9875536d08f996b785df518b5aee2034de6c");
