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/V12.0.2.0.QCPCNXM:user/release-keys");
ui_print("Target: Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.0.3.0.QCPCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.0.2.0.QCPCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.0.3.0.QCPCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.0.2.0.QCPCNXM:user/release-keys or Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.0.3.0.QCPCNXM: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:0189617e1ec81ad1f5563eab0391b373821a8225",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:cf9a54ccb68dafa443e058e98b46563cf9ae4bfc") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:0189617e1ec81ad1f5563eab0391b373821a8225\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:cf9a54ccb68dafa443e058e98b46563cf9ae4bfc\" has unexpected contents.");
apply_patch_space(140873728) || 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:35ff3752596184889b616c3e6823f47fcdf7fdda",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:3c040cb89cedbf73aa067ea19b182ce7c41e6929") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:35ff3752596184889b616c3e6823f47fcdf7fdda\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:3c040cb89cedbf73aa067ea19b182ce7c41e6929\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:35ff3752596184889b616c3e6823f47fcdf7fdda",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3c040cb89cedbf73aa067ea19b182ce7c41e6929") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:35ff3752596184889b616c3e6823f47fcdf7fdda\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3c040cb89cedbf73aa067ea19b182ce7c41e6929\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:be975abf5a1e95bdc2669c0fc33ab8a93f18b472",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ed6457a9315ff20cec3ddc8f4a090603856045f9") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:be975abf5a1e95bdc2669c0fc33ab8a93f18b472\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ed6457a9315ff20cec3ddc8f4a090603856045f9\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:be975abf5a1e95bdc2669c0fc33ab8a93f18b472",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ed6457a9315ff20cec3ddc8f4a090603856045f9") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:be975abf5a1e95bdc2669c0fc33ab8a93f18b472\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ed6457a9315ff20cec3ddc8f4a090603856045f9\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:779468:ef1b4a6ccac2f8b5a60ec25993c88bad5967a87a",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:779468:ce5ac87a89f21c0e7c2ed74f16bde2a78c002ec3") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:ef1b4a6ccac2f8b5a60ec25993c88bad5967a87a\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:ce5ac87a89f21c0e7c2ed74f16bde2a78c002ec3\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:ef1b4a6ccac2f8b5a60ec25993c88bad5967a87a",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:ce5ac87a89f21c0e7c2ed74f16bde2a78c002ec3") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:ef1b4a6ccac2f8b5a60ec25993c88bad5967a87a\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:ce5ac87a89f21c0e7c2ed74f16bde2a78c002ec3\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:f23ef968a26a13bf83ed79d1cc93cee4d661391b",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:cd5321855ad1dca487dd58b5fa609f0eb833b78d") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:f23ef968a26a13bf83ed79d1cc93cee4d661391b\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:cd5321855ad1dca487dd58b5fa609f0eb833b78d\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:85128f0d9ad7bcfc1125364bba4757c1719efbfd",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4c56b9e18ab4892d22141e00f00048be2c1d0f9e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:85128f0d9ad7bcfc1125364bba4757c1719efbfd\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4c56b9e18ab4892d22141e00f00048be2c1d0f9e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:85128f0d9ad7bcfc1125364bba4757c1719efbfd",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4c56b9e18ab4892d22141e00f00048be2c1d0f9e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:85128f0d9ad7bcfc1125364bba4757c1719efbfd\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4c56b9e18ab4892d22141e00f00048be2c1d0f9e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:86abb12cb10d5c94ba2c42a6eabdb0e2c0bf3082",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a2cacce38e245bec6ca937893fa4c7b7f15fded6") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:86abb12cb10d5c94ba2c42a6eabdb0e2c0bf3082\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a2cacce38e245bec6ca937893fa4c7b7f15fded6\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:e4f50aa7ad7208f184a97c6983ac30c8b3657d0b",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:ac23094bdd6d61253ca5a49f66756e87a018e8c6") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:e4f50aa7ad7208f184a97c6983ac30c8b3657d0b\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:ac23094bdd6d61253ca5a49f66756e87a018e8c6\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:7af0a39e595e35423c297b0f3ff59881c8e2cfe0",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:8a9f49d0f93701e2272e5f346fb9063e46db2bd2") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:7af0a39e595e35423c297b0f3ff59881c8e2cfe0\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:8a9f49d0f93701e2272e5f346fb9063e46db2bd2\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:7af0a39e595e35423c297b0f3ff59881c8e2cfe0",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:8a9f49d0f93701e2272e5f346fb9063e46db2bd2") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:7af0a39e595e35423c297b0f3ff59881c8e2cfe0\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:8a9f49d0f93701e2272e5f346fb9063e46db2bd2\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dsp:16777216:6787312050920f31699322f694b34d7eb30ecb3c",
                      "EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dsp:16777216:6787312050920f31699322f694b34d7eb30ecb3c\" or \"EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:f00b109798ad1139581831cdbb9c1df1a1cdaf9f",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:868732ef296cc1a27e1598caef7526f21b10c162") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:f00b109798ad1139581831cdbb9c1df1a1cdaf9f\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:868732ef296cc1a27e1598caef7526f21b10c162\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:f00b109798ad1139581831cdbb9c1df1a1cdaf9f",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:868732ef296cc1a27e1598caef7526f21b10c162") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:f00b109798ad1139581831cdbb9c1df1a1cdaf9f\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:868732ef296cc1a27e1598caef7526f21b10c162\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:f35c27cf22b3d038b3483264efc128f8d9c47c32",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:b27d7514aeccb5b979c17a62dcdee9ac13576142") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:f35c27cf22b3d038b3483264efc128f8d9c47c32\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:b27d7514aeccb5b979c17a62dcdee9ac13576142\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:54be00a59a874c9d40efea4876004eb5299577cf",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:9ff463edf51a8032d933832512cc21628ec2ec9c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:54be00a59a874c9d40efea4876004eb5299577cf\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:9ff463edf51a8032d933832512cc21628ec2ec9c\" 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", "496,1,585,759,773,803,810,830,831,1018,1023,1025,1026,1132,1133,1613,1614,1616,1618,1619,1620,1635,1636,1773,1774,2601,2602,2604,2605,2608,2609,2617,2618,2619,2620,7006,7007,7009,7010,7294,7295,7297,7298,7861,7863,13802,13803,13936,13937,16706,16708,20569,23183,23197,23360,23370,23381,23388,23413,23419,28306,28312,29412,29443,29452,29458,29466,29472,29518,29525,29539,29545,29569,29575,31558,31589,31600,31606,32770,33021,33022,33527,36466,36515,36520,36526,36605,36612,36815,36823,45184,45192,45598,45615,48444,48491,52722,52747,53575,53600,53686,53694,63134,63147,63160,63166,63182,63204,63827,63845,65379,65418,65537,66042,66616,66631,69175,69202,75752,75869,79223,79261,81657,81709,90957,91059,92892,92898,92941,92948,95692,95732,98306,98557,98558,99063,99380,99396,103034,103057,104037,104065,106729,106772,106824,106831,106839,106846,109316,109324,109372,109378,109942,109960,109991,109997,110223,110235,110877,110902,110942,110948,113213,113254,113368,113376,113445,113452,114166,114186,114454,114465,122636,125260,125331,125339,131073,131578,131676,131765,131776,131782,132407,132425,133121,133139,133153,133159,135803,135831,158661,158690,158697,158703,158728,158734,158741,158750,158768,158774,159179,159186,159213,159219,161639,161689,161977,161989,162162,162173,162204,162211,162224,162230,163842,164093,164094,164599,168326,170525,175996,176048,178322,178339,178716,178726,181571,181578,186208,188265,188266,193092,193093,195486,195487,196608,196609,201093,211805,213507,214639,214667,214668,228037,229378,229629,229630,230135,232816,242695,242696,243442,243443,244876,244877,253035,253036,253692,262145,262650,284532,293267,294914,295165,295166,295671,327681,328186,360449,360954,364911,365491,365502,365548,365569,365825,372709,372816,374313,374319,374320,374329,393217,393722,425985,426490,458753,459258,462574,462585,467506,467603,467614,467620,467697,467705,491521,492026,502854,502959,503120,503130,503139,503145,503944,503969,504030,504037,510361,510429,510713,510724,513914,513943,515295,515338,517141,517183,517194,517200,517222,517228,517239,517245,517511,517524,517531,517540,518771,518797,519204,519219,519317,519326,519350,519357,519365,519371,520885,520903,520995,521003,524289,524794,535617,535661,548974,555996,556236,556242,557057,557562,565645,565772,568423,571369,572700,572728,578736,582139,589825,590330,600491,600647,604387,604435,604455,604461,604490,604496,612273,612279,612292,612298,612768,612779,613593,613613,622593,623098,623667,623673,625286,625297,625304,625310,627964,628005,628069,628076,636554,636631,636700,636787,636794,636800,636855,636862,639594,639643,639661,639667,639807,639817,641695,641737,642490,643513,643663,643670,643678,643684,643699,643705,643734,643741,645834,645873,646646,646673,646676,646684,646802,646808,646818,646824,647472,647481,647490,647496,647559,647566,647687,647693,647708,647714,647723,647729,647755,647761,655361,655866,669053,669059,669072,669078,669093,669099,669112,669118,669124,669130,672249,672255,672311,672317,672339,672345,672365,672371,672674,672906,680987,680993,681726,681744,681751,681757,688129,688634,690481,695847,696312,696328,696991,697009,697039,697045,697051,697057,697341,697351,697354,697360,697384,697391,700907,819200,819202,884736,884738,1015808,1015809,1032011,1048363,1048575,1048576") == "1106bf39952763d4f8d3c718980750b6b8c42d92" || 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", "496,1,585,759,773,803,810,830,831,1018,1023,1025,1026,1132,1133,1613,1614,1616,1618,1619,1620,1635,1636,1773,1774,2601,2602,2604,2605,2608,2609,2617,2618,2619,2620,7006,7007,7009,7010,7294,7295,7297,7298,7861,7863,13802,13803,13936,13937,16706,16708,20569,23183,23197,23360,23370,23381,23388,23413,23419,28306,28312,29412,29443,29452,29458,29466,29472,29518,29525,29539,29545,29569,29575,31558,31589,31600,31606,32770,33021,33022,33527,36466,36515,36520,36526,36605,36612,36815,36823,45184,45192,45598,45615,48444,48491,52722,52747,53575,53600,53686,53694,63134,63147,63160,63166,63182,63204,63827,63845,65379,65418,65537,66042,66616,66631,69175,69202,75752,75869,79223,79261,81657,81709,90957,91059,92892,92898,92941,92948,95692,95732,98306,98557,98558,99063,99380,99396,103034,103057,104037,104065,106729,106772,106824,106831,106839,106846,109316,109324,109372,109378,109942,109960,109991,109997,110223,110235,110877,110902,110942,110948,113213,113254,113368,113376,113445,113452,114166,114186,114454,114465,122636,125260,125331,125339,131073,131578,131676,131765,131776,131782,132407,132425,133121,133139,133153,133159,135803,135831,158661,158690,158697,158703,158728,158734,158741,158750,158768,158774,159179,159186,159213,159219,161639,161689,161977,161989,162162,162173,162204,162211,162224,162230,163842,164093,164094,164599,168326,170525,175996,176048,178322,178339,178716,178726,181571,181578,186208,188265,188266,193092,193093,195486,195487,196608,196609,201093,211805,213507,214639,214667,214668,228037,229378,229629,229630,230135,232816,242695,242696,243442,243443,244876,244877,253035,253036,253692,262145,262650,284532,293267,294914,295165,295166,295671,327681,328186,360449,360954,364911,365491,365502,365548,365569,365825,372709,372816,374313,374319,374320,374329,393217,393722,425985,426490,458753,459258,462574,462585,467506,467603,467614,467620,467697,467705,491521,492026,502854,502959,503120,503130,503139,503145,503944,503969,504030,504037,510361,510429,510713,510724,513914,513943,515295,515338,517141,517183,517194,517200,517222,517228,517239,517245,517511,517524,517531,517540,518771,518797,519204,519219,519317,519326,519350,519357,519365,519371,520885,520903,520995,521003,524289,524794,535617,535661,548974,555996,556236,556242,557057,557562,565645,565772,568423,571369,572700,572728,578736,582139,589825,590330,600491,600647,604387,604435,604455,604461,604490,604496,612273,612279,612292,612298,612768,612779,613593,613613,622593,623098,623667,623673,625286,625297,625304,625310,627964,628005,628069,628076,636554,636631,636700,636787,636794,636800,636855,636862,639594,639643,639661,639667,639807,639817,641695,641737,642490,643513,643663,643670,643678,643684,643699,643705,643734,643741,645834,645873,646646,646673,646676,646684,646802,646808,646818,646824,647472,647481,647490,647496,647559,647566,647687,647693,647708,647714,647723,647729,647755,647761,655361,655866,669053,669059,669072,669078,669093,669099,669112,669118,669124,669130,672249,672255,672311,672317,672339,672345,672365,672371,672674,672906,680987,680993,681726,681744,681751,681757,688129,688634,690481,695847,696312,696328,696991,697009,697039,697045,697051,697057,697341,697351,697354,697360,697384,697391,700907,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", "46,1,456,570,578,588,590,597,681,688,954,961,1198,1208,1219,1225,32770,32832,32833,33338,40574,46765,65537,66042,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,220368,220374,222942,229376,229378,229440,229441,257987,262077,262143,262144") == "74a4c2ef1d8e9a7843bf5bdc3077c56011ad19db" || 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", "46,1,456,570,578,588,590,597,681,688,954,961,1198,1208,1219,1225,32770,32832,32833,33338,40574,46765,65537,66042,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,220368,220374,222942,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:0189617e1ec81ad1f5563eab0391b373821a8225",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:cf9a54ccb68dafa443e058e98b46563cf9ae4bfc",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:cf9a54ccb68dafa443e058e98b46563cf9ae4bfc");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:35ff3752596184889b616c3e6823f47fcdf7fdda",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:3c040cb89cedbf73aa067ea19b182ce7c41e6929",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:3c040cb89cedbf73aa067ea19b182ce7c41e6929");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:be975abf5a1e95bdc2669c0fc33ab8a93f18b472",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ed6457a9315ff20cec3ddc8f4a090603856045f9",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:ed6457a9315ff20cec3ddc8f4a090603856045f9");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:779468:ef1b4a6ccac2f8b5a60ec25993c88bad5967a87a",
                "EMMC:/dev/block/bootdevice/by-name/aboot:779468:ce5ac87a89f21c0e7c2ed74f16bde2a78c002ec3",
                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:ce5ac87a89f21c0e7c2ed74f16bde2a78c002ec3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:f23ef968a26a13bf83ed79d1cc93cee4d661391b",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:cd5321855ad1dca487dd58b5fa609f0eb833b78d",
                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:cd5321855ad1dca487dd58b5fa609f0eb833b78d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:85128f0d9ad7bcfc1125364bba4757c1719efbfd",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4c56b9e18ab4892d22141e00f00048be2c1d0f9e",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4c56b9e18ab4892d22141e00f00048be2c1d0f9e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:86abb12cb10d5c94ba2c42a6eabdb0e2c0bf3082",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a2cacce38e245bec6ca937893fa4c7b7f15fded6",
                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:a2cacce38e245bec6ca937893fa4c7b7f15fded6");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:e4f50aa7ad7208f184a97c6983ac30c8b3657d0b",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:ac23094bdd6d61253ca5a49f66756e87a018e8c6",
                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:ac23094bdd6d61253ca5a49f66756e87a018e8c6");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:7af0a39e595e35423c297b0f3ff59881c8e2cfe0",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:8a9f49d0f93701e2272e5f346fb9063e46db2bd2",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:8a9f49d0f93701e2272e5f346fb9063e46db2bd2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/dsp:16777216:6787312050920f31699322f694b34d7eb30ecb3c",
                "EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900",
                package_extract_file("patch/firmware-update/adspso.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:f00b109798ad1139581831cdbb9c1df1a1cdaf9f",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:868732ef296cc1a27e1598caef7526f21b10c162",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:409044:868732ef296cc1a27e1598caef7526f21b10c162");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:35ff3752596184889b616c3e6823f47fcdf7fdda",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3c040cb89cedbf73aa067ea19b182ce7c41e6929",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3c040cb89cedbf73aa067ea19b182ce7c41e6929");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:be975abf5a1e95bdc2669c0fc33ab8a93f18b472",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ed6457a9315ff20cec3ddc8f4a090603856045f9",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:ed6457a9315ff20cec3ddc8f4a090603856045f9");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:ef1b4a6ccac2f8b5a60ec25993c88bad5967a87a",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:ce5ac87a89f21c0e7c2ed74f16bde2a78c002ec3",
                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:ce5ac87a89f21c0e7c2ed74f16bde2a78c002ec3");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:85128f0d9ad7bcfc1125364bba4757c1719efbfd",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4c56b9e18ab4892d22141e00f00048be2c1d0f9e",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4c56b9e18ab4892d22141e00f00048be2c1d0f9e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:7af0a39e595e35423c297b0f3ff59881c8e2cfe0",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:8a9f49d0f93701e2272e5f346fb9063e46db2bd2",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:8a9f49d0f93701e2272e5f346fb9063e46db2bd2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:f00b109798ad1139581831cdbb9c1df1a1cdaf9f",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:868732ef296cc1a27e1598caef7526f21b10c162",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:868732ef296cc1a27e1598caef7526f21b10c162");
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:f35c27cf22b3d038b3483264efc128f8d9c47c32",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:b27d7514aeccb5b979c17a62dcdee9ac13576142",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:b27d7514aeccb5b979c17a62dcdee9ac13576142");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:54be00a59a874c9d40efea4876004eb5299577cf",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:9ff463edf51a8032d933832512cc21628ec2ec9c",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:9ff463edf51a8032d933832512cc21628ec2ec9c");
