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.QCPCNXM:user/release-keys");
ui_print("Target: Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V11.0.3.0.QCPCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V11.0.2.0.QCPCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V11.0.3.0.QCPCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V11.0.2.0.QCPCNXM:user/release-keys or Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V11.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:c3706ca8a0417b1630bd9498ffac08b7e48b2487",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:4adbbd3ef63000a4386a0683a651a4ab5c2411fd") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:c3706ca8a0417b1630bd9498ffac08b7e48b2487\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:4adbbd3ef63000a4386a0683a651a4ab5c2411fd\" has unexpected contents.");
apply_patch_space(79835136) || 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:7c63d4f97d33ef7b666ea7115447104abdf0f09e",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:01df8f8f17fc56c2ef5545a487b8c73d77725402") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:7c63d4f97d33ef7b666ea7115447104abdf0f09e\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:01df8f8f17fc56c2ef5545a487b8c73d77725402\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:7c63d4f97d33ef7b666ea7115447104abdf0f09e",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:01df8f8f17fc56c2ef5545a487b8c73d77725402") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:7c63d4f97d33ef7b666ea7115447104abdf0f09e\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:01df8f8f17fc56c2ef5545a487b8c73d77725402\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:e1d94d3854e1c570e9b70b968190cbb34646b72e",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:7acae5423842831c1a71b3f49c4d2cc1867b91fd") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:e1d94d3854e1c570e9b70b968190cbb34646b72e\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:7acae5423842831c1a71b3f49c4d2cc1867b91fd\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:e1d94d3854e1c570e9b70b968190cbb34646b72e",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:7acae5423842831c1a71b3f49c4d2cc1867b91fd") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:e1d94d3854e1c570e9b70b968190cbb34646b72e\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:7acae5423842831c1a71b3f49c4d2cc1867b91fd\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:779468:55722b7696bfd183ac3bc1b185a321c400c9ad47",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:779468:4b4a85aed12652b0e42ac6b7d13d817ef4982d17") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:55722b7696bfd183ac3bc1b185a321c400c9ad47\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:4b4a85aed12652b0e42ac6b7d13d817ef4982d17\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:55722b7696bfd183ac3bc1b185a321c400c9ad47",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:4b4a85aed12652b0e42ac6b7d13d817ef4982d17") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:55722b7696bfd183ac3bc1b185a321c400c9ad47\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:4b4a85aed12652b0e42ac6b7d13d817ef4982d17\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:dadfe0a3cd40562d8ed005338793b6bcaddb8e0c",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:89b4f6853bd7757cb6b7314c3aac42b85b7a264b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:dadfe0a3cd40562d8ed005338793b6bcaddb8e0c\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:89b4f6853bd7757cb6b7314c3aac42b85b7a264b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:54c90ac680cc6af02aef486b194189136bee15ed",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:0fdf5885818baf86d16c4419786074120b687af7") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:54c90ac680cc6af02aef486b194189136bee15ed\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:0fdf5885818baf86d16c4419786074120b687af7\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:54c90ac680cc6af02aef486b194189136bee15ed",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:0fdf5885818baf86d16c4419786074120b687af7") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:54c90ac680cc6af02aef486b194189136bee15ed\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:0fdf5885818baf86d16c4419786074120b687af7\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a914f7af258c113d16605b3af4d1988d2b1458d3",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:3c1fc0f4ecaebe2f30b95e9fe213103fd07089b1") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a914f7af258c113d16605b3af4d1988d2b1458d3\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:3c1fc0f4ecaebe2f30b95e9fe213103fd07089b1\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:408956:92e8ecd65ff4aa5a7aabfb2d1dbad1d6ccc04e47",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:b7a6765da02f70e9816e6b1fa59785bb72277e38") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:408956:92e8ecd65ff4aa5a7aabfb2d1dbad1d6ccc04e47\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:408956:b7a6765da02f70e9816e6b1fa59785bb72277e38\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:92e8ecd65ff4aa5a7aabfb2d1dbad1d6ccc04e47",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:b7a6765da02f70e9816e6b1fa59785bb72277e38") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:92e8ecd65ff4aa5a7aabfb2d1dbad1d6ccc04e47\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:b7a6765da02f70e9816e6b1fa59785bb72277e38\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:577815acb0193922c168bf2aa8ce81194433bfbd",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:89b7c1f34900802b80435b99881d35bbef4612e0") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:577815acb0193922c168bf2aa8ce81194433bfbd\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:89b7c1f34900802b80435b99881d35bbef4612e0\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:577815acb0193922c168bf2aa8ce81194433bfbd",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:89b7c1f34900802b80435b99881d35bbef4612e0") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:577815acb0193922c168bf2aa8ce81194433bfbd\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:89b7c1f34900802b80435b99881d35bbef4612e0\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:3228db277c232304e686d104f4491671fcc43103",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:26941717f8b848dd737368ce66b666216894b670") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:3228db277c232304e686d104f4491671fcc43103\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:26941717f8b848dd737368ce66b666216894b670\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:5124dd07f419f3825772e20921e1edf2b3298b4f",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:6e9f28ef00d4a323018b39c079e66585f92ae3fc") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:5124dd07f419f3825772e20921e1edf2b3298b4f\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:6e9f28ef00d4a323018b39c079e66585f92ae3fc\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:dd994e29fb7c3d3f04529a227bfbc3dd9f3ed2f1",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:42aa4af35c0c7df42769ae574f652efa933b6fbb") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:dd994e29fb7c3d3f04529a227bfbc3dd9f3ed2f1\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:42aa4af35c0c7df42769ae574f652efa933b6fbb\" 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", "64,1,583,759,773,779,32770,33021,33022,33527,65537,66042,98306,98557,98558,99063,131073,131578,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,589825,590330,622593,623098,647657,819200,819202,884736,884738,1015808,1015809,1032011,1048363,1048575,1048576") == "95c5f1c09bd87f10cf0e1820d52db207fd8d9c6d" || 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", "64,1,583,759,773,779,32770,33021,33022,33527,65537,66042,98306,98557,98558,99063,131073,131578,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,589825,590330,622593,623098,647657,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", "426,1,457,570,578,588,592,597,598,679,683,688,689,952,956,961,962,964,965,1189,1197,1205,1206,1249,1257,1262,1263,1266,1270,1274,1275,1532,1563,1848,1849,2296,2763,3756,3757,3895,3939,4326,4327,4959,4960,5696,5701,8849,8850,30493,30494,31980,31981,32768,32770,32832,32833,39495,39496,41993,41998,51741,51743,51763,51765,52084,52085,52411,52412,52706,52707,53015,53016,53298,53299,53593,53594,53970,53971,54045,54046,57461,57462,57654,57655,57743,57746,57764,57765,57810,57811,57829,57831,57880,57886,57912,57913,58800,58801,58814,58815,58845,58846,58944,58945,59228,59229,59245,59246,59342,59343,59345,59346,59541,59732,59912,59913,59988,59989,59990,59991,60003,60005,61271,61272,62409,62411,62832,62833,63107,63108,63532,63533,63731,63735,64576,64577,65485,65486,65536,65537,66780,67112,75572,75573,76566,76567,84021,84065,86293,86294,87772,87773,89415,89417,91107,91108,92899,92900,94562,94563,96287,96288,97965,97966,98304,98306,98368,98369,99766,99767,101093,101094,102415,102416,103642,103643,104966,104967,106353,106354,107646,107647,108949,108950,110304,110305,111599,111600,112856,112857,114092,114093,115445,115446,116628,116629,117981,117982,119220,119221,120030,120031,120055,120056,120080,120081,120337,120338,120362,120363,120387,120388,120412,120413,120437,120438,120538,120539,120780,120781,120805,120806,120943,120944,120968,120969,120993,120994,121603,121604,121628,121629,121653,121654,121866,121867,121911,121912,121936,121937,121961,121962,121986,121987,122011,122012,122353,122354,122378,122379,122516,122517,122541,122542,122566,122567,123203,123204,124405,124406,125725,125726,125916,125917,125941,125942,125966,125967,127008,127009,128302,128303,129455,129456,130703,130704,131072,131073,132426,132427,133617,133618,134868,134869,136082,136083,137231,137232,138372,138373,139517,139518,140667,140668,141133,141134,141158,141159,141183,141184,141440,141441,141465,141466,141490,141491,141515,141516,141540,141541,141882,141883,141907,141908,141951,141952,142046,142047,142071,142072,142096,142097,142706,142707,142731,142732,142756,142757,143013,143014,143038,143039,143063,143064,143088,143089,143113,143114,143166,143167,143456,143457,143481,143482,143619,143620,143644,143645,143669,143670,144382,144383,144621,144622,144646,144647,144671,144672,145535,145536,147288,147289,149010,149011,150751,150752,150974,150975,150999,151000,151024,151025,151049,151050,151074,151075,151416,151417,151441,151442,152500,152501,153990,153991,155355,155356,156701,156702,157979,157980,159338,159339,160679,160680,161936,161937,163253,163254,163840,163842,163904,163905,165535,165536,167251,167252,168615,168697,180017,180018,185051,185267,185373,185411,185596,196609,197114,225011,229376,229378,229440,229441,257987,262077,262143,262144") == "eb6f953879a7a5c833866d7720ab875e906c7d2c" || 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", "426,1,457,570,578,588,592,597,598,679,683,688,689,952,956,961,962,964,965,1189,1197,1205,1206,1249,1257,1262,1263,1266,1270,1274,1275,1532,1563,1848,1849,2296,2763,3756,3757,3895,3939,4326,4327,4959,4960,5696,5701,8849,8850,30493,30494,31980,31981,32768,32770,32832,32833,39495,39496,41993,41998,51741,51743,51763,51765,52084,52085,52411,52412,52706,52707,53015,53016,53298,53299,53593,53594,53970,53971,54045,54046,57461,57462,57654,57655,57743,57746,57764,57765,57810,57811,57829,57831,57880,57886,57912,57913,58800,58801,58814,58815,58845,58846,58944,58945,59228,59229,59245,59246,59342,59343,59345,59346,59541,59732,59912,59913,59988,59989,59990,59991,60003,60005,61271,61272,62409,62411,62832,62833,63107,63108,63532,63533,63731,63735,64576,64577,65485,65486,65536,65537,66780,67112,75572,75573,76566,76567,84021,84065,86293,86294,87772,87773,89415,89417,91107,91108,92899,92900,94562,94563,96287,96288,97965,97966,98304,98306,98368,98369,99766,99767,101093,101094,102415,102416,103642,103643,104966,104967,106353,106354,107646,107647,108949,108950,110304,110305,111599,111600,112856,112857,114092,114093,115445,115446,116628,116629,117981,117982,119220,119221,120030,120031,120055,120056,120080,120081,120337,120338,120362,120363,120387,120388,120412,120413,120437,120438,120538,120539,120780,120781,120805,120806,120943,120944,120968,120969,120993,120994,121603,121604,121628,121629,121653,121654,121866,121867,121911,121912,121936,121937,121961,121962,121986,121987,122011,122012,122353,122354,122378,122379,122516,122517,122541,122542,122566,122567,123203,123204,124405,124406,125725,125726,125916,125917,125941,125942,125966,125967,127008,127009,128302,128303,129455,129456,130703,130704,131072,131073,132426,132427,133617,133618,134868,134869,136082,136083,137231,137232,138372,138373,139517,139518,140667,140668,141133,141134,141158,141159,141183,141184,141440,141441,141465,141466,141490,141491,141515,141516,141540,141541,141882,141883,141907,141908,141951,141952,142046,142047,142071,142072,142096,142097,142706,142707,142731,142732,142756,142757,143013,143014,143038,143039,143063,143064,143088,143089,143113,143114,143166,143167,143456,143457,143481,143482,143619,143620,143644,143645,143669,143670,144382,144383,144621,144622,144646,144647,144671,144672,145535,145536,147288,147289,149010,149011,150751,150752,150974,150975,150999,151000,151024,151025,151049,151050,151074,151075,151416,151417,151441,151442,152500,152501,153990,153991,155355,155356,156701,156702,157979,157980,159338,159339,160679,160680,161936,161937,163253,163254,163840,163842,163904,163905,165535,165536,167251,167252,168615,168697,180017,180018,185051,185267,185373,185411,185596,196609,197114,225011,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 ----


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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:7c63d4f97d33ef7b666ea7115447104abdf0f09e",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:01df8f8f17fc56c2ef5545a487b8c73d77725402",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:01df8f8f17fc56c2ef5545a487b8c73d77725402");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:e1d94d3854e1c570e9b70b968190cbb34646b72e",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:7acae5423842831c1a71b3f49c4d2cc1867b91fd",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:7acae5423842831c1a71b3f49c4d2cc1867b91fd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:779468:55722b7696bfd183ac3bc1b185a321c400c9ad47",
                "EMMC:/dev/block/bootdevice/by-name/aboot:779468:4b4a85aed12652b0e42ac6b7d13d817ef4982d17",
                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:4b4a85aed12652b0e42ac6b7d13d817ef4982d17");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:dadfe0a3cd40562d8ed005338793b6bcaddb8e0c",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:89b4f6853bd7757cb6b7314c3aac42b85b7a264b",
                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:89b4f6853bd7757cb6b7314c3aac42b85b7a264b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:54c90ac680cc6af02aef486b194189136bee15ed",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:0fdf5885818baf86d16c4419786074120b687af7",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:0fdf5885818baf86d16c4419786074120b687af7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a914f7af258c113d16605b3af4d1988d2b1458d3",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:3c1fc0f4ecaebe2f30b95e9fe213103fd07089b1",
                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:3c1fc0f4ecaebe2f30b95e9fe213103fd07089b1");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:408956:92e8ecd65ff4aa5a7aabfb2d1dbad1d6ccc04e47",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:b7a6765da02f70e9816e6b1fa59785bb72277e38",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:408956:b7a6765da02f70e9816e6b1fa59785bb72277e38");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:577815acb0193922c168bf2aa8ce81194433bfbd",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:89b7c1f34900802b80435b99881d35bbef4612e0",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:89b7c1f34900802b80435b99881d35bbef4612e0");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:3228db277c232304e686d104f4491671fcc43103",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:26941717f8b848dd737368ce66b666216894b670",
                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:26941717f8b848dd737368ce66b666216894b670");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:7c63d4f97d33ef7b666ea7115447104abdf0f09e",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:01df8f8f17fc56c2ef5545a487b8c73d77725402",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:01df8f8f17fc56c2ef5545a487b8c73d77725402");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:e1d94d3854e1c570e9b70b968190cbb34646b72e",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:7acae5423842831c1a71b3f49c4d2cc1867b91fd",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:7acae5423842831c1a71b3f49c4d2cc1867b91fd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:55722b7696bfd183ac3bc1b185a321c400c9ad47",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:4b4a85aed12652b0e42ac6b7d13d817ef4982d17",
                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:4b4a85aed12652b0e42ac6b7d13d817ef4982d17");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:54c90ac680cc6af02aef486b194189136bee15ed",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:0fdf5885818baf86d16c4419786074120b687af7",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:0fdf5885818baf86d16c4419786074120b687af7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:92e8ecd65ff4aa5a7aabfb2d1dbad1d6ccc04e47",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:b7a6765da02f70e9816e6b1fa59785bb72277e38",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:b7a6765da02f70e9816e6b1fa59785bb72277e38");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:577815acb0193922c168bf2aa8ce81194433bfbd",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:89b7c1f34900802b80435b99881d35bbef4612e0",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:89b7c1f34900802b80435b99881d35bbef4612e0");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:33554432:c3706ca8a0417b1630bd9498ffac08b7e48b2487",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:4adbbd3ef63000a4386a0683a651a4ab5c2411fd",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:4adbbd3ef63000a4386a0683a651a4ab5c2411fd");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:7c63d4f97d33ef7b666ea7115447104abdf0f09e",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:01df8f8f17fc56c2ef5545a487b8c73d77725402",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:01df8f8f17fc56c2ef5545a487b8c73d77725402");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:e1d94d3854e1c570e9b70b968190cbb34646b72e",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:7acae5423842831c1a71b3f49c4d2cc1867b91fd",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:7acae5423842831c1a71b3f49c4d2cc1867b91fd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:779468:55722b7696bfd183ac3bc1b185a321c400c9ad47",
                "EMMC:/dev/block/bootdevice/by-name/aboot:779468:4b4a85aed12652b0e42ac6b7d13d817ef4982d17",
                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:4b4a85aed12652b0e42ac6b7d13d817ef4982d17");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:dadfe0a3cd40562d8ed005338793b6bcaddb8e0c",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:89b4f6853bd7757cb6b7314c3aac42b85b7a264b",
                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:89b4f6853bd7757cb6b7314c3aac42b85b7a264b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:54c90ac680cc6af02aef486b194189136bee15ed",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:0fdf5885818baf86d16c4419786074120b687af7",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:0fdf5885818baf86d16c4419786074120b687af7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a914f7af258c113d16605b3af4d1988d2b1458d3",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:3c1fc0f4ecaebe2f30b95e9fe213103fd07089b1",
                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:3c1fc0f4ecaebe2f30b95e9fe213103fd07089b1");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:408956:92e8ecd65ff4aa5a7aabfb2d1dbad1d6ccc04e47",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:408956:b7a6765da02f70e9816e6b1fa59785bb72277e38",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:408956:b7a6765da02f70e9816e6b1fa59785bb72277e38");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:577815acb0193922c168bf2aa8ce81194433bfbd",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:89b7c1f34900802b80435b99881d35bbef4612e0",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:89b7c1f34900802b80435b99881d35bbef4612e0");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:3228db277c232304e686d104f4491671fcc43103",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:26941717f8b848dd737368ce66b666216894b670",
                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:26941717f8b848dd737368ce66b666216894b670");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:7c63d4f97d33ef7b666ea7115447104abdf0f09e",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:01df8f8f17fc56c2ef5545a487b8c73d77725402",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:01df8f8f17fc56c2ef5545a487b8c73d77725402");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:e1d94d3854e1c570e9b70b968190cbb34646b72e",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:7acae5423842831c1a71b3f49c4d2cc1867b91fd",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:7acae5423842831c1a71b3f49c4d2cc1867b91fd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:55722b7696bfd183ac3bc1b185a321c400c9ad47",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:4b4a85aed12652b0e42ac6b7d13d817ef4982d17",
                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:4b4a85aed12652b0e42ac6b7d13d817ef4982d17");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:54c90ac680cc6af02aef486b194189136bee15ed",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:0fdf5885818baf86d16c4419786074120b687af7",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:0fdf5885818baf86d16c4419786074120b687af7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:92e8ecd65ff4aa5a7aabfb2d1dbad1d6ccc04e47",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:b7a6765da02f70e9816e6b1fa59785bb72277e38",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:408956:b7a6765da02f70e9816e6b1fa59785bb72277e38");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:577815acb0193922c168bf2aa8ce81194433bfbd",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:89b7c1f34900802b80435b99881d35bbef4612e0",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:89b7c1f34900802b80435b99881d35bbef4612e0");
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:5124dd07f419f3825772e20921e1edf2b3298b4f",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:6e9f28ef00d4a323018b39c079e66585f92ae3fc",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:6e9f28ef00d4a323018b39c079e66585f92ae3fc");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:dd994e29fb7c3d3f04529a227bfbc3dd9f3ed2f1",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:42aa4af35c0c7df42769ae574f652efa933b6fbb",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:42aa4af35c0c7df42769ae574f652efa933b6fbb");
