getprop("ro.product.device") == "ginkgo" || abort("E3004: This package is for \"ginkgo\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: xiaomi/ginkgo/ginkgo:10/QKQ1.200114.002/V12.0.1.0.QCOINXM:user/release-keys");
ui_print("Target: xiaomi/ginkgo/ginkgo:10/QKQ1.200114.002/V12.0.2.0.QCOINXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "xiaomi/ginkgo/ginkgo:10/QKQ1.200114.002/V12.0.1.0.QCOINXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "xiaomi/ginkgo/ginkgo:10/QKQ1.200114.002/V12.0.2.0.QCOINXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of xiaomi/ginkgo/ginkgo:10/QKQ1.200114.002/V12.0.1.0.QCOINXM:user/release-keys or xiaomi/ginkgo/ginkgo:10/QKQ1.200114.002/V12.0.2.0.QCOINXM: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:cb1d7878e3112f8495b34bc0c2117f3af659911e",
                      "EMMC:/dev/block/bootdevice/by-name/boot:67108864:934be10e0d6f4e5b8ace7ddcaabf91e0fc39ad69") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:67108864:cb1d7878e3112f8495b34bc0c2117f3af659911e\" or \"EMMC:/dev/block/bootdevice/by-name/boot:67108864:934be10e0d6f4e5b8ace7ddcaabf91e0fc39ad69\" has unexpected contents.");
apply_patch_space(95690752) || 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/uefisecapp:128791:bb4a0d9cc9520c6b5c9f89152a556a0b090ad8c7",
                      "EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:374b380455f8427eb0fcb0e5fd3a5a0606cecceb") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:bb4a0d9cc9520c6b5c9f89152a556a0b090ad8c7\" or \"EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:374b380455f8427eb0fcb0e5fd3a5a0606cecceb\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:bb4a0d9cc9520c6b5c9f89152a556a0b090ad8c7",
                      "EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:374b380455f8427eb0fcb0e5fd3a5a0606cecceb") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:bb4a0d9cc9520c6b5c9f89152a556a0b090ad8c7\" or \"EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:374b380455f8427eb0fcb0e5fd3a5a0606cecceb\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:1911bd92be61db3ea0d19ecc9adc40e789b9067c",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:728364a0ab99efe448354c26071a42e8bb095384") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:1911bd92be61db3ea0d19ecc9adc40e789b9067c\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:728364a0ab99efe448354c26071a42e8bb095384\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:1911bd92be61db3ea0d19ecc9adc40e789b9067c",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:728364a0ab99efe448354c26071a42e8bb095384") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:1911bd92be61db3ea0d19ecc9adc40e789b9067c\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:728364a0ab99efe448354c26071a42e8bb095384\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpm:223724:f078ea6afa59f3d6b1c1d79d38360a78f817d55e",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:223724:2b0f9a5b908e9463b73c4f06d49457d8b903be75") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:223724:f078ea6afa59f3d6b1c1d79d38360a78f817d55e\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:223724:2b0f9a5b908e9463b73c4f06d49457d8b903be75\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:f078ea6afa59f3d6b1c1d79d38360a78f817d55e",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:2b0f9a5b908e9463b73c4f06d49457d8b903be75") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:f078ea6afa59f3d6b1c1d79d38360a78f817d55e\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:2b0f9a5b908e9463b73c4f06d49457d8b903be75\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:42728:905521f2802aa4b2ed67844099911935827c8ba4",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:42728:ab6cb54a9b7c34cee4f6ef1da6db314d8d3a018b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:42728:905521f2802aa4b2ed67844099911935827c8ba4\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:42728:ab6cb54a9b7c34cee4f6ef1da6db314d8d3a018b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:905521f2802aa4b2ed67844099911935827c8ba4",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:ab6cb54a9b7c34cee4f6ef1da6db314d8d3a018b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:905521f2802aa4b2ed67844099911935827c8ba4\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:ab6cb54a9b7c34cee4f6ef1da6db314d8d3a018b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:121767424:30dcec9f04cc698501c1c7baa2d2837c760d5a70",
                      "EMMC:/dev/block/bootdevice/by-name/modem:121521664:2cc20e5f20db16a576aa528f3385beef4223a0c7") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:121767424:30dcec9f04cc698501c1c7baa2d2837c760d5a70\" or \"EMMC:/dev/block/bootdevice/by-name/modem:121521664:2cc20e5f20db16a576aa528f3385beef4223a0c7\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:6f7922c88104d2de1d2b6f29a1a2cfffe7f85c1c",
                      "EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:858374c34b5bd11a0b1d512cdf0b1cb461eebdf5") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:6f7922c88104d2de1d2b6f29a1a2cfffe7f85c1c\" or \"EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:858374c34b5bd11a0b1d512cdf0b1cb461eebdf5\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:238037:385477fca61fd09f11cac2fb2c37340f5099c477",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:238037:7c2f664f3ecb660cc98911bcfa6329e2c282d29a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:238037:385477fca61fd09f11cac2fb2c37340f5099c477\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:238037:7c2f664f3ecb660cc98911bcfa6329e2c282d29a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:385477fca61fd09f11cac2fb2c37340f5099c477",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:7c2f664f3ecb660cc98911bcfa6329e2c282d29a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:385477fca61fd09f11cac2fb2c37340f5099c477\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:7c2f664f3ecb660cc98911bcfa6329e2c282d29a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xbl:3528392:ccb10d359bdff248a8d592d8c9c6c17d14586eb6",
                      "EMMC:/dev/block/bootdevice/by-name/xbl:3528392:3635580991242b3460c9dc449e181e435c7e8b48") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xbl:3528392:ccb10d359bdff248a8d592d8c9c6c17d14586eb6\" or \"EMMC:/dev/block/bootdevice/by-name/xbl:3528392:3635580991242b3460c9dc449e181e435c7e8b48\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:ccb10d359bdff248a8d592d8c9c6c17d14586eb6",
                      "EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:3635580991242b3460c9dc449e181e435c7e8b48") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:ccb10d359bdff248a8d592d8c9c6c17d14586eb6\" or \"EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:3635580991242b3460c9dc449e181e435c7e8b48\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:2002944:a6f2f5fe8d1dbe52b6be770a599362f4ee086806",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1998848:f4ad8db5d0ae6ecc06d45a46f770a4d9125fec1b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:2002944:a6f2f5fe8d1dbe52b6be770a599362f4ee086806\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1998848:f4ad8db5d0ae6ecc06d45a46f770a4d9125fec1b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:a6f2f5fe8d1dbe52b6be770a599362f4ee086806",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1998848:f4ad8db5d0ae6ecc06d45a46f770a4d9125fec1b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:a6f2f5fe8d1dbe52b6be770a599362f4ee086806\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1998848:f4ad8db5d0ae6ecc06d45a46f770a4d9125fec1b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:9c18a5c114d754a7483c0e0d23c9a7ca33a7bfab",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:a867bf807a70224db21308945fae0aa7b87dd7fa") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:9c18a5c114d754a7483c0e0d23c9a7ca33a7bfab\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:a867bf807a70224db21308945fae0aa7b87dd7fa\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:9c18a5c114d754a7483c0e0d23c9a7ca33a7bfab",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:a867bf807a70224db21308945fae0aa7b87dd7fa") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:9c18a5c114d754a7483c0e0d23c9a7ca33a7bfab\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:a867bf807a70224db21308945fae0aa7b87dd7fa\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/hyp:369800:b6e580957852fb23a1f17d235579846f7d4b2ab9",
                      "EMMC:/dev/block/bootdevice/by-name/hyp:369800:7ea93c8d8c39374682275ba84866e919b77f4ae5") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/hyp:369800:b6e580957852fb23a1f17d235579846f7d4b2ab9\" or \"EMMC:/dev/block/bootdevice/by-name/hyp:369800:7ea93c8d8c39374682275ba84866e919b77f4ae5\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/hypbak:369800:b6e580957852fb23a1f17d235579846f7d4b2ab9",
                      "EMMC:/dev/block/bootdevice/by-name/hypbak:369800:7ea93c8d8c39374682275ba84866e919b77f4ae5") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/hypbak:369800:b6e580957852fb23a1f17d235579846f7d4b2ab9\" or \"EMMC:/dev/block/bootdevice/by-name/hypbak:369800:7ea93c8d8c39374682275ba84866e919b77f4ae5\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/imagefv:20480:3bcef167d5e7bef2aad2af1820b7d477a0003b10",
                      "EMMC:/dev/block/bootdevice/by-name/imagefv:20480:a557070c5c3975761c2eec5ea9af61231f251a12") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/imagefv:20480:3bcef167d5e7bef2aad2af1820b7d477a0003b10\" or \"EMMC:/dev/block/bootdevice/by-name/imagefv:20480:a557070c5c3975761c2eec5ea9af61231f251a12\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:3bcef167d5e7bef2aad2af1820b7d477a0003b10",
                      "EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:a557070c5c3975761c2eec5ea9af61231f251a12") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:3bcef167d5e7bef2aad2af1820b7d477a0003b10\" or \"EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:a557070c5c3975761c2eec5ea9af61231f251a12\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/storsec:20477:a9eebcd3593236c4d595128c0ae7cc4022b22c89",
                      "EMMC:/dev/block/bootdevice/by-name/storsec:20477:42130ba0c1dc2e1c23126ef8a259960090feaa2e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/storsec:20477:a9eebcd3593236c4d595128c0ae7cc4022b22c89\" or \"EMMC:/dev/block/bootdevice/by-name/storsec:20477:42130ba0c1dc2e1c23126ef8a259960090feaa2e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/qupfw:49203:b85470c51fb000a5e31356c546a50909602bfa2e",
                      "EMMC:/dev/block/bootdevice/by-name/qupfw:49203:a411f707f1756a950d35f8066a3f82d1d09376ae") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/qupfw:49203:b85470c51fb000a5e31356c546a50909602bfa2e\" or \"EMMC:/dev/block/bootdevice/by-name/qupfw:49203:a411f707f1756a950d35f8066a3f82d1d09376ae\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:b85470c51fb000a5e31356c546a50909602bfa2e",
                      "EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:a411f707f1756a950d35f8066a3f82d1d09376ae") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:b85470c51fb000a5e31356c546a50909602bfa2e\" or \"EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:a411f707f1756a950d35f8066a3f82d1d09376ae\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abl:151552:5099783aa514a6cb0ad58078b135aaaceb914dcf",
                      "EMMC:/dev/block/bootdevice/by-name/abl:151552:955c01fec515d934def97fb76afdd6e7aaf371a2") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abl:151552:5099783aa514a6cb0ad58078b135aaaceb914dcf\" or \"EMMC:/dev/block/bootdevice/by-name/abl:151552:955c01fec515d934def97fb76afdd6e7aaf371a2\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:5099783aa514a6cb0ad58078b135aaaceb914dcf",
                      "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:955c01fec515d934def97fb76afdd6e7aaf371a2") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:5099783aa514a6cb0ad58078b135aaaceb914dcf\" or \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:955c01fec515d934def97fb76afdd6e7aaf371a2\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:4194846dee9b9809c49182c9e6e306f0b6bc7208",
                      "EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:fc5b326914d09e8205a1da9788e2305188deff01") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:4194846dee9b9809c49182c9e6e306f0b6bc7208\" or \"EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:fc5b326914d09e8205a1da9788e2305188deff01\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:4194846dee9b9809c49182c9e6e306f0b6bc7208",
                      "EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:fc5b326914d09e8205a1da9788e2305188deff01") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:4194846dee9b9809c49182c9e6e306f0b6bc7208\" or \"EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:fc5b326914d09e8205a1da9788e2305188deff01\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:a7edf4769c602eaabb93101eb8591c95c2f36771",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:c4c46d7ba23f89c7e0da23195bc1d86f447b8f89") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:a7edf4769c602eaabb93101eb8591c95c2f36771\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:c4c46d7ba23f89c7e0da23195bc1d86f447b8f89\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:789067232c0e2a46546e56dc8a17c4471bb28889",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:fc77fe256367d08182543ceb917d5202a4e85de2") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:789067232c0e2a46546e56dc8a17c4471bb28889\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:fc77fe256367d08182543ceb917d5202a4e85de2\" has unexpected contents.");
apply_patch_space(121521664) || 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", "188,1,747,791,805,813,816,834,842,895,896,1156,1161,1163,1164,1270,1271,1755,1756,2444,2445,2447,2449,2450,2451,2466,2467,2648,2649,2981,3091,3111,3122,3818,3819,3821,3822,3826,3827,3835,3836,3837,3838,5157,5361,9152,9153,9155,9562,9564,9565,10560,10562,16501,16502,16635,16636,19405,19407,20426,21896,25669,25671,27042,28906,32768,32770,33053,33054,34935,34936,34938,34940,34999,35000,35133,35135,35295,35299,35307,35308,35316,35320,35325,35326,35347,35351,35355,36457,36461,51937,52624,52626,52650,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,329998,330002,360449,360954,393217,393722,418918,425984,425985,426495,426496,431075,458753,459258,491521,492026,524289,524794,538662,540832,541327,542650,543558,545355,550453,550466,550468,550481,557057,557562,559031,561617,580923,583629,583631,586956,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,786433,786938,819202,819485,819486,819991,851969,852474,884738,885021,885022,885527,917505,918010,930945,1146880,1146881,1161015,1179411,1179647,1179648") == "7d9330369ba2eccbcaf988b4a24cf9027fdfcec6" || 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", "188,1,747,791,805,813,816,834,842,895,896,1156,1161,1163,1164,1270,1271,1755,1756,2444,2445,2447,2449,2450,2451,2466,2467,2648,2649,2981,3091,3111,3122,3818,3819,3821,3822,3826,3827,3835,3836,3837,3838,5157,5361,9152,9153,9155,9562,9564,9565,10560,10562,16501,16502,16635,16636,19405,19407,20426,21896,25669,25671,27042,28906,32768,32770,33053,33054,34935,34936,34938,34940,34999,35000,35133,35135,35295,35299,35307,35308,35316,35320,35325,35326,35347,35351,35355,36457,36461,51937,52624,52626,52650,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,329998,330002,360449,360954,393217,393722,418918,425984,425985,426495,426496,431075,458753,459258,491521,492026,524289,524794,538662,540832,541327,542650,543558,545355,550453,550466,550468,550481,557057,557562,559031,561617,580923,583629,583631,586956,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,786433,786938,819202,819485,819486,819991,851969,852474,884738,885021,885022,885527,917505,918010,930945,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", "98,1,328,602,610,620,624,629,630,711,715,720,721,2426,2430,2443,2909,2914,2915,3178,3182,3187,3188,3190,3191,3193,3199,3242,3250,3255,3258,3260,3261,3273,3277,3281,3282,3285,3289,3293,3294,3802,3806,3819,3820,3828,3832,3837,3842,3854,3855,4825,4826,7992,7993,8110,8111,9072,9073,9705,9706,10667,10672,12925,12927,20535,20536,25208,32770,32864,32865,33370,65537,66042,92013,92059,98306,98400,98401,98906,131073,131578,163842,163936,163937,164442,196609,197114,229076,229376,229378,294912,294914,360448,360449,386991,393125,393215,393216") == "d1b8173b6b700555a82f4c4d0ccef1bba6af7e67" || 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", "98,1,328,602,610,620,624,629,630,711,715,720,721,2426,2430,2443,2909,2914,2915,3178,3182,3187,3188,3190,3191,3193,3199,3242,3250,3255,3258,3260,3261,3273,3277,3281,3282,3285,3289,3293,3294,3802,3806,3819,3820,3828,3832,3837,3842,3854,3855,4825,4826,7992,7993,8110,8111,9072,9073,9705,9706,10667,10672,12925,12927,20535,20536,25208,32770,32864,32865,33370,65537,66042,92013,92059,98306,98400,98401,98906,131073,131578,163842,163936,163937,164442,196609,197114,229076,229376,229378,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/uefisecapp:128791:bb4a0d9cc9520c6b5c9f89152a556a0b090ad8c7",
                "EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:374b380455f8427eb0fcb0e5fd3a5a0606cecceb",
                package_extract_file("patch/firmware-update/uefi_sec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:374b380455f8427eb0fcb0e5fd3a5a0606cecceb");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:1911bd92be61db3ea0d19ecc9adc40e789b9067c",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:728364a0ab99efe448354c26071a42e8bb095384",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:728364a0ab99efe448354c26071a42e8bb095384");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:223724:f078ea6afa59f3d6b1c1d79d38360a78f817d55e",
                "EMMC:/dev/block/bootdevice/by-name/rpm:223724:2b0f9a5b908e9463b73c4f06d49457d8b903be75",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:223724:2b0f9a5b908e9463b73c4f06d49457d8b903be75");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:42728:905521f2802aa4b2ed67844099911935827c8ba4",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:42728:ab6cb54a9b7c34cee4f6ef1da6db314d8d3a018b",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:42728:ab6cb54a9b7c34cee4f6ef1da6db314d8d3a018b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:121767424:30dcec9f04cc698501c1c7baa2d2837c760d5a70",
                "EMMC:/dev/block/bootdevice/by-name/modem:121521664:2cc20e5f20db16a576aa528f3385beef4223a0c7",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:121521664:2cc20e5f20db16a576aa528f3385beef4223a0c7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:6f7922c88104d2de1d2b6f29a1a2cfffe7f85c1c",
                "EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:858374c34b5bd11a0b1d512cdf0b1cb461eebdf5",
                package_extract_file("patch/firmware-update/BTFM.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:858374c34b5bd11a0b1d512cdf0b1cb461eebdf5");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:238037:385477fca61fd09f11cac2fb2c37340f5099c477",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:238037:7c2f664f3ecb660cc98911bcfa6329e2c282d29a",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:238037:7c2f664f3ecb660cc98911bcfa6329e2c282d29a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl:3528392:ccb10d359bdff248a8d592d8c9c6c17d14586eb6",
                "EMMC:/dev/block/bootdevice/by-name/xbl:3528392:3635580991242b3460c9dc449e181e435c7e8b48",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl:3528392:3635580991242b3460c9dc449e181e435c7e8b48");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:2002944:a6f2f5fe8d1dbe52b6be770a599362f4ee086806",
                "EMMC:/dev/block/bootdevice/by-name/tz:1998848:f4ad8db5d0ae6ecc06d45a46f770a4d9125fec1b",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1998848:f4ad8db5d0ae6ecc06d45a46f770a4d9125fec1b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:9c18a5c114d754a7483c0e0d23c9a7ca33a7bfab",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:a867bf807a70224db21308945fae0aa7b87dd7fa",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:a867bf807a70224db21308945fae0aa7b87dd7fa");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hyp:369800:b6e580957852fb23a1f17d235579846f7d4b2ab9",
                "EMMC:/dev/block/bootdevice/by-name/hyp:369800:7ea93c8d8c39374682275ba84866e919b77f4ae5",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hyp:369800:7ea93c8d8c39374682275ba84866e919b77f4ae5");
patch_partition("EMMC:/dev/block/bootdevice/by-name/imagefv:20480:3bcef167d5e7bef2aad2af1820b7d477a0003b10",
                "EMMC:/dev/block/bootdevice/by-name/imagefv:20480:a557070c5c3975761c2eec5ea9af61231f251a12",
                package_extract_file("patch/firmware-update/imagefv.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/imagefv:20480:a557070c5c3975761c2eec5ea9af61231f251a12");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsec:20477:a9eebcd3593236c4d595128c0ae7cc4022b22c89",
                "EMMC:/dev/block/bootdevice/by-name/storsec:20477:42130ba0c1dc2e1c23126ef8a259960090feaa2e",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsec:20477:42130ba0c1dc2e1c23126ef8a259960090feaa2e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/qupfw:49203:b85470c51fb000a5e31356c546a50909602bfa2e",
                "EMMC:/dev/block/bootdevice/by-name/qupfw:49203:a411f707f1756a950d35f8066a3f82d1d09376ae",
                package_extract_file("patch/firmware-update/qupv3fw.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/qupfw:49203:a411f707f1756a950d35f8066a3f82d1d09376ae");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:5099783aa514a6cb0ad58078b135aaaceb914dcf",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:955c01fec515d934def97fb76afdd6e7aaf371a2",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:955c01fec515d934def97fb76afdd6e7aaf371a2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:4194846dee9b9809c49182c9e6e306f0b6bc7208",
                "EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:fc5b326914d09e8205a1da9788e2305188deff01",
                package_extract_file("patch/firmware-update/xbl_config.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:fc5b326914d09e8205a1da9788e2305188deff01");
patch_partition("EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:bb4a0d9cc9520c6b5c9f89152a556a0b090ad8c7",
                "EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:374b380455f8427eb0fcb0e5fd3a5a0606cecceb",
                package_extract_file("patch/firmware-update/uefi_sec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:374b380455f8427eb0fcb0e5fd3a5a0606cecceb");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:1911bd92be61db3ea0d19ecc9adc40e789b9067c",
                "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:728364a0ab99efe448354c26071a42e8bb095384",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:728364a0ab99efe448354c26071a42e8bb095384");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:f078ea6afa59f3d6b1c1d79d38360a78f817d55e",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:2b0f9a5b908e9463b73c4f06d49457d8b903be75",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:2b0f9a5b908e9463b73c4f06d49457d8b903be75");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:905521f2802aa4b2ed67844099911935827c8ba4",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:ab6cb54a9b7c34cee4f6ef1da6db314d8d3a018b",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:ab6cb54a9b7c34cee4f6ef1da6db314d8d3a018b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:385477fca61fd09f11cac2fb2c37340f5099c477",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:7c2f664f3ecb660cc98911bcfa6329e2c282d29a",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:7c2f664f3ecb660cc98911bcfa6329e2c282d29a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:ccb10d359bdff248a8d592d8c9c6c17d14586eb6",
                "EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:3635580991242b3460c9dc449e181e435c7e8b48",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:3635580991242b3460c9dc449e181e435c7e8b48");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:a6f2f5fe8d1dbe52b6be770a599362f4ee086806",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1998848:f4ad8db5d0ae6ecc06d45a46f770a4d9125fec1b",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1998848:f4ad8db5d0ae6ecc06d45a46f770a4d9125fec1b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:9c18a5c114d754a7483c0e0d23c9a7ca33a7bfab",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:a867bf807a70224db21308945fae0aa7b87dd7fa",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:a867bf807a70224db21308945fae0aa7b87dd7fa");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hypbak:369800:b6e580957852fb23a1f17d235579846f7d4b2ab9",
                "EMMC:/dev/block/bootdevice/by-name/hypbak:369800:7ea93c8d8c39374682275ba84866e919b77f4ae5",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hypbak:369800:7ea93c8d8c39374682275ba84866e919b77f4ae5");
patch_partition("EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:3bcef167d5e7bef2aad2af1820b7d477a0003b10",
                "EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:a557070c5c3975761c2eec5ea9af61231f251a12",
                package_extract_file("patch/firmware-update/imagefv.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:a557070c5c3975761c2eec5ea9af61231f251a12");
patch_partition("EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:b85470c51fb000a5e31356c546a50909602bfa2e",
                "EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:a411f707f1756a950d35f8066a3f82d1d09376ae",
                package_extract_file("patch/firmware-update/qupv3fw.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:a411f707f1756a950d35f8066a3f82d1d09376ae");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:5099783aa514a6cb0ad58078b135aaaceb914dcf",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:955c01fec515d934def97fb76afdd6e7aaf371a2",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:955c01fec515d934def97fb76afdd6e7aaf371a2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:4194846dee9b9809c49182c9e6e306f0b6bc7208",
                "EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:fc5b326914d09e8205a1da9788e2305188deff01",
                package_extract_file("patch/firmware-update/xbl_config.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:fc5b326914d09e8205a1da9788e2305188deff01");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:67108864:cb1d7878e3112f8495b34bc0c2117f3af659911e",
                "EMMC:/dev/block/bootdevice/by-name/boot:67108864:934be10e0d6f4e5b8ace7ddcaabf91e0fc39ad69",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:67108864:934be10e0d6f4e5b8ace7ddcaabf91e0fc39ad69");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:bb4a0d9cc9520c6b5c9f89152a556a0b090ad8c7",
                "EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:374b380455f8427eb0fcb0e5fd3a5a0606cecceb",
                package_extract_file("patch/firmware-update/uefi_sec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:374b380455f8427eb0fcb0e5fd3a5a0606cecceb");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:1911bd92be61db3ea0d19ecc9adc40e789b9067c",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:728364a0ab99efe448354c26071a42e8bb095384",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:728364a0ab99efe448354c26071a42e8bb095384");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:223724:f078ea6afa59f3d6b1c1d79d38360a78f817d55e",
                "EMMC:/dev/block/bootdevice/by-name/rpm:223724:2b0f9a5b908e9463b73c4f06d49457d8b903be75",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:223724:2b0f9a5b908e9463b73c4f06d49457d8b903be75");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:42728:905521f2802aa4b2ed67844099911935827c8ba4",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:42728:ab6cb54a9b7c34cee4f6ef1da6db314d8d3a018b",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:42728:ab6cb54a9b7c34cee4f6ef1da6db314d8d3a018b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:121767424:30dcec9f04cc698501c1c7baa2d2837c760d5a70",
                "EMMC:/dev/block/bootdevice/by-name/modem:121521664:2cc20e5f20db16a576aa528f3385beef4223a0c7",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:121521664:2cc20e5f20db16a576aa528f3385beef4223a0c7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:6f7922c88104d2de1d2b6f29a1a2cfffe7f85c1c",
                "EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:858374c34b5bd11a0b1d512cdf0b1cb461eebdf5",
                package_extract_file("patch/firmware-update/BTFM.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/bluetooth:897024:858374c34b5bd11a0b1d512cdf0b1cb461eebdf5");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:238037:385477fca61fd09f11cac2fb2c37340f5099c477",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:238037:7c2f664f3ecb660cc98911bcfa6329e2c282d29a",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:238037:7c2f664f3ecb660cc98911bcfa6329e2c282d29a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl:3528392:ccb10d359bdff248a8d592d8c9c6c17d14586eb6",
                "EMMC:/dev/block/bootdevice/by-name/xbl:3528392:3635580991242b3460c9dc449e181e435c7e8b48",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl:3528392:3635580991242b3460c9dc449e181e435c7e8b48");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:2002944:a6f2f5fe8d1dbe52b6be770a599362f4ee086806",
                "EMMC:/dev/block/bootdevice/by-name/tz:1998848:f4ad8db5d0ae6ecc06d45a46f770a4d9125fec1b",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1998848:f4ad8db5d0ae6ecc06d45a46f770a4d9125fec1b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:9c18a5c114d754a7483c0e0d23c9a7ca33a7bfab",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:a867bf807a70224db21308945fae0aa7b87dd7fa",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:a867bf807a70224db21308945fae0aa7b87dd7fa");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hyp:369800:b6e580957852fb23a1f17d235579846f7d4b2ab9",
                "EMMC:/dev/block/bootdevice/by-name/hyp:369800:7ea93c8d8c39374682275ba84866e919b77f4ae5",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hyp:369800:7ea93c8d8c39374682275ba84866e919b77f4ae5");
patch_partition("EMMC:/dev/block/bootdevice/by-name/imagefv:20480:3bcef167d5e7bef2aad2af1820b7d477a0003b10",
                "EMMC:/dev/block/bootdevice/by-name/imagefv:20480:a557070c5c3975761c2eec5ea9af61231f251a12",
                package_extract_file("patch/firmware-update/imagefv.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/imagefv:20480:a557070c5c3975761c2eec5ea9af61231f251a12");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsec:20477:a9eebcd3593236c4d595128c0ae7cc4022b22c89",
                "EMMC:/dev/block/bootdevice/by-name/storsec:20477:42130ba0c1dc2e1c23126ef8a259960090feaa2e",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsec:20477:42130ba0c1dc2e1c23126ef8a259960090feaa2e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/qupfw:49203:b85470c51fb000a5e31356c546a50909602bfa2e",
                "EMMC:/dev/block/bootdevice/by-name/qupfw:49203:a411f707f1756a950d35f8066a3f82d1d09376ae",
                package_extract_file("patch/firmware-update/qupv3fw.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/qupfw:49203:a411f707f1756a950d35f8066a3f82d1d09376ae");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:5099783aa514a6cb0ad58078b135aaaceb914dcf",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:955c01fec515d934def97fb76afdd6e7aaf371a2",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:955c01fec515d934def97fb76afdd6e7aaf371a2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:4194846dee9b9809c49182c9e6e306f0b6bc7208",
                "EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:fc5b326914d09e8205a1da9788e2305188deff01",
                package_extract_file("patch/firmware-update/xbl_config.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:fc5b326914d09e8205a1da9788e2305188deff01");
patch_partition("EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:bb4a0d9cc9520c6b5c9f89152a556a0b090ad8c7",
                "EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:374b380455f8427eb0fcb0e5fd3a5a0606cecceb",
                package_extract_file("patch/firmware-update/uefi_sec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:374b380455f8427eb0fcb0e5fd3a5a0606cecceb");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:1911bd92be61db3ea0d19ecc9adc40e789b9067c",
                "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:728364a0ab99efe448354c26071a42e8bb095384",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:728364a0ab99efe448354c26071a42e8bb095384");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:f078ea6afa59f3d6b1c1d79d38360a78f817d55e",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:2b0f9a5b908e9463b73c4f06d49457d8b903be75",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:2b0f9a5b908e9463b73c4f06d49457d8b903be75");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:905521f2802aa4b2ed67844099911935827c8ba4",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:ab6cb54a9b7c34cee4f6ef1da6db314d8d3a018b",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:ab6cb54a9b7c34cee4f6ef1da6db314d8d3a018b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:385477fca61fd09f11cac2fb2c37340f5099c477",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:7c2f664f3ecb660cc98911bcfa6329e2c282d29a",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:7c2f664f3ecb660cc98911bcfa6329e2c282d29a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:ccb10d359bdff248a8d592d8c9c6c17d14586eb6",
                "EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:3635580991242b3460c9dc449e181e435c7e8b48",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:3635580991242b3460c9dc449e181e435c7e8b48");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:a6f2f5fe8d1dbe52b6be770a599362f4ee086806",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1998848:f4ad8db5d0ae6ecc06d45a46f770a4d9125fec1b",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1998848:f4ad8db5d0ae6ecc06d45a46f770a4d9125fec1b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:9c18a5c114d754a7483c0e0d23c9a7ca33a7bfab",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:a867bf807a70224db21308945fae0aa7b87dd7fa",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:a867bf807a70224db21308945fae0aa7b87dd7fa");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hypbak:369800:b6e580957852fb23a1f17d235579846f7d4b2ab9",
                "EMMC:/dev/block/bootdevice/by-name/hypbak:369800:7ea93c8d8c39374682275ba84866e919b77f4ae5",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hypbak:369800:7ea93c8d8c39374682275ba84866e919b77f4ae5");
patch_partition("EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:3bcef167d5e7bef2aad2af1820b7d477a0003b10",
                "EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:a557070c5c3975761c2eec5ea9af61231f251a12",
                package_extract_file("patch/firmware-update/imagefv.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:a557070c5c3975761c2eec5ea9af61231f251a12");
patch_partition("EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:b85470c51fb000a5e31356c546a50909602bfa2e",
                "EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:a411f707f1756a950d35f8066a3f82d1d09376ae",
                package_extract_file("patch/firmware-update/qupv3fw.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:a411f707f1756a950d35f8066a3f82d1d09376ae");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:5099783aa514a6cb0ad58078b135aaaceb914dcf",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:955c01fec515d934def97fb76afdd6e7aaf371a2",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:955c01fec515d934def97fb76afdd6e7aaf371a2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:4194846dee9b9809c49182c9e6e306f0b6bc7208",
                "EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:fc5b326914d09e8205a1da9788e2305188deff01",
                package_extract_file("patch/firmware-update/xbl_config.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:fc5b326914d09e8205a1da9788e2305188deff01");
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...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:a7edf4769c602eaabb93101eb8591c95c2f36771",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:c4c46d7ba23f89c7e0da23195bc1d86f447b8f89",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:c4c46d7ba23f89c7e0da23195bc1d86f447b8f89");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:789067232c0e2a46546e56dc8a17c4471bb28889",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:fc77fe256367d08182543ceb917d5202a4e85de2",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:fc77fe256367d08182543ceb917d5202a4e85de2");
