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.5.2.0.QCPIDXM:user/release-keys");
ui_print("Target: Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.3.0.QCPIDXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.2.0.QCPIDXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.3.0.QCPIDXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.2.0.QCPIDXM:user/release-keys or Xiaomi/olivelite/olivelite:10/QKQ1.191014.001/V12.5.3.0.QCPIDXM: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:f9d6fe13811acbb594b903f8b1214bbec8087e73",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:7e4139d2ce5ed7eb6d70eaf0e4603eae7939df46") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:f9d6fe13811acbb594b903f8b1214bbec8087e73\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:7e4139d2ce5ed7eb6d70eaf0e4603eae7939df46\" has unexpected contents.");
apply_patch_space(82124800) || 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:f2fb0b14e0f93c96aa6599e3abba2da96f4b2fb5",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:de252e218dbcd23f929c6443383729d051e3f6d8") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:f2fb0b14e0f93c96aa6599e3abba2da96f4b2fb5\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:de252e218dbcd23f929c6443383729d051e3f6d8\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:f2fb0b14e0f93c96aa6599e3abba2da96f4b2fb5",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:de252e218dbcd23f929c6443383729d051e3f6d8") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:f2fb0b14e0f93c96aa6599e3abba2da96f4b2fb5\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:de252e218dbcd23f929c6443383729d051e3f6d8\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:7c86905a10c5dc6c6906bd5d0610633c761f6806",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cb61f034c4271ee999da56e1875e8963c233181e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:7c86905a10c5dc6c6906bd5d0610633c761f6806\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cb61f034c4271ee999da56e1875e8963c233181e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:7c86905a10c5dc6c6906bd5d0610633c761f6806",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cb61f034c4271ee999da56e1875e8963c233181e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:7c86905a10c5dc6c6906bd5d0610633c761f6806\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cb61f034c4271ee999da56e1875e8963c233181e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:779468:e7061fde40c42ef1344495eb79a6554ae05dd4d1",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:779468:8b69a77cdb41d36ffe8f61e1893b6b9a14fe8efd") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:e7061fde40c42ef1344495eb79a6554ae05dd4d1\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:8b69a77cdb41d36ffe8f61e1893b6b9a14fe8efd\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:e7061fde40c42ef1344495eb79a6554ae05dd4d1",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:8b69a77cdb41d36ffe8f61e1893b6b9a14fe8efd") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:e7061fde40c42ef1344495eb79a6554ae05dd4d1\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:8b69a77cdb41d36ffe8f61e1893b6b9a14fe8efd\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:76bfc3a475a0e4bd1b1c43f51520d322819d3abb",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:a6043b17025d3934b07b5c18978ac1ac66105780") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:76bfc3a475a0e4bd1b1c43f51520d322819d3abb\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:a6043b17025d3934b07b5c18978ac1ac66105780\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4507dcb2838caea38ef6c1a495e3285293968f59",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4929a6442c96a3e972f54960177d1907acd2fe69") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4507dcb2838caea38ef6c1a495e3285293968f59\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4929a6442c96a3e972f54960177d1907acd2fe69\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4507dcb2838caea38ef6c1a495e3285293968f59",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4929a6442c96a3e972f54960177d1907acd2fe69") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4507dcb2838caea38ef6c1a495e3285293968f59\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4929a6442c96a3e972f54960177d1907acd2fe69\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:48bed0cf6c08f87b4449007e1fa5b04cd974c3b6",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:cc397070e75ede4d505ec34992a39374fd6b827d") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:48bed0cf6c08f87b4449007e1fa5b04cd974c3b6\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:cc397070e75ede4d505ec34992a39374fd6b827d\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:24b5a97a2bb4e9a9918a5bdec3a41b67bd2b9b8d",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:ded29c3ee22f2ff9642d214e42033aca3e123242") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:24b5a97a2bb4e9a9918a5bdec3a41b67bd2b9b8d\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:ded29c3ee22f2ff9642d214e42033aca3e123242\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:24b5a97a2bb4e9a9918a5bdec3a41b67bd2b9b8d",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:ded29c3ee22f2ff9642d214e42033aca3e123242") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:24b5a97a2bb4e9a9918a5bdec3a41b67bd2b9b8d\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:ded29c3ee22f2ff9642d214e42033aca3e123242\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:8d0ca36893bc7cbfd60c392629ab7b822fd38688",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:2c74df45f2c77c9fb050c66a3bf164b5fbaba932") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:8d0ca36893bc7cbfd60c392629ab7b822fd38688\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:2c74df45f2c77c9fb050c66a3bf164b5fbaba932\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:8d0ca36893bc7cbfd60c392629ab7b822fd38688",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:2c74df45f2c77c9fb050c66a3bf164b5fbaba932") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:8d0ca36893bc7cbfd60c392629ab7b822fd38688\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:2c74df45f2c77c9fb050c66a3bf164b5fbaba932\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:c039ccd851eda00b9758238b470583905419498f",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:dc931d042364a26c10dfac317acf3a5380a30f5d") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:c039ccd851eda00b9758238b470583905419498f\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:dc931d042364a26c10dfac317acf3a5380a30f5d\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:20bca6a386dc40912369e926fed4b8aee8774eb1",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:3f185431987322f8bbef5680a4658a421ff76e14") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:20bca6a386dc40912369e926fed4b8aee8774eb1\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:3f185431987322f8bbef5680a4658a421ff76e14\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:dc9a1a318baaf7eb3aad4de9580ffd02919256f2",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:4b3dca6d391ad93d772dca3b83fae82309da313a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:dc9a1a318baaf7eb3aad4de9580ffd02919256f2\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:4b3dca6d391ad93d772dca3b83fae82309da313a\" 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", "182,1,624,759,773,803,810,830,831,1018,1023,1025,1026,1132,1133,1613,1614,1616,1618,1619,1620,1635,1636,1773,1774,1998,2040,2601,2602,2604,2605,2608,2609,2617,2618,2619,2620,3497,3665,5685,5801,7008,7009,7011,7297,7299,7300,7863,7865,13804,13805,13938,13939,16608,16710,22982,22983,22985,22987,23046,23047,23180,23182,23321,23325,23333,23334,23344,23348,23353,23354,23378,23382,23386,23387,28264,28265,28278,28282,28286,29593,29600,29604,29608,29609,29616,29620,29624,29625,29743,29749,29754,29755,32488,32492,32533,32534,32566,32570,32574,32575,32675,32679,32683,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,322176,322181,327681,328186,360449,360954,381906,381957,381959,381966,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,786433,786938,819202,819453,819454,819959,851969,852474,875370,884736,884738,1015808,1015809,1032011,1048363,1048575,1048576") == "52461aa7fdea10310f06c95ba598ab448d542164" || 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", "182,1,624,759,773,803,810,830,831,1018,1023,1025,1026,1132,1133,1613,1614,1616,1618,1619,1620,1635,1636,1773,1774,1998,2040,2601,2602,2604,2605,2608,2609,2617,2618,2619,2620,3497,3665,5685,5801,7008,7009,7011,7297,7299,7300,7863,7865,13804,13805,13938,13939,16608,16710,22982,22983,22985,22987,23046,23047,23180,23182,23321,23325,23333,23334,23344,23348,23353,23354,23378,23382,23386,23387,28264,28265,28278,28282,28286,29593,29600,29604,29608,29609,29616,29620,29624,29625,29743,29749,29754,29755,32488,32492,32533,32534,32566,32570,32574,32575,32675,32679,32683,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,322176,322181,327681,328186,360449,360954,381906,381957,381959,381966,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,786433,786938,819202,819453,819454,819959,851969,852474,875370,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", "616,1,457,570,578,590,594,599,600,683,687,692,693,957,961,966,967,970,974,977,978,1204,1212,1220,1226,1231,1235,1239,1240,1813,1814,3722,3723,3904,3905,4292,4293,4925,4926,5662,5667,14861,14862,23444,23445,29617,29618,32768,32770,32832,32833,34162,34163,51430,51431,56719,56720,57950,57952,57972,57974,58293,58294,58620,58621,58915,58916,59224,59225,59507,59508,59802,59803,60179,60180,60254,60255,63670,63671,63863,63864,63952,63955,63973,63974,64019,64020,64038,64040,64089,64090,64122,64123,65010,65011,65024,65025,65055,65056,65154,65155,65438,65439,65455,65456,65536,65537,66058,66059,66061,66062,66257,66448,66628,66629,66704,66705,66706,66707,66719,66721,67987,67988,69125,69127,69548,69549,69823,69824,70248,70249,70447,70451,71292,71293,72201,72202,81180,81181,82167,82168,91919,91920,93398,93399,95062,95064,96724,96725,98304,98306,98368,98369,98888,98889,99071,99072,100734,100735,102459,102460,104153,104154,105368,105369,106695,106696,108017,108018,109244,109245,110568,110569,111955,111956,113248,113249,114551,114552,115906,115907,117201,117202,118458,118459,119694,119695,121047,121048,122230,122231,123583,123584,124822,124823,125632,125633,125657,125658,125682,125683,125939,125940,125964,125965,125989,125990,126014,126015,126039,126040,126140,126141,126382,126383,126407,126408,126545,126546,126570,126571,126595,126596,127205,127206,127230,127231,127255,127256,127468,127469,127513,127514,127538,127539,127563,127564,127588,127589,127613,127614,127955,127956,127980,127981,128118,128119,128143,128144,128168,128169,128805,128806,130007,130008,131072,131073,131592,131593,131834,131835,132025,132026,132050,132051,132075,132076,133117,133118,134411,134412,135564,135565,136812,136813,138029,138030,139220,139221,140471,140472,141685,141686,142834,142835,143975,143976,145120,145121,146270,146271,146736,146737,146761,146762,146786,146787,147043,147044,147068,147069,147093,147094,147118,147119,147143,147144,147485,147486,147510,147511,147554,147555,147649,147650,147674,147675,147699,147700,148309,148310,148334,148335,148359,148360,148616,148617,148641,148642,148666,148667,148691,148692,148716,148717,148769,148770,149059,149060,149084,149085,149222,149223,149247,149248,149272,149273,149985,149986,150224,150225,150249,150250,150274,150275,151138,151139,152891,152892,154613,154614,156354,156355,156577,156578,156602,156603,156627,156628,156652,156653,156677,156678,157019,157020,157044,157045,158103,158104,159593,159594,160958,160959,162304,162305,163582,163583,163840,163842,163904,163905,164427,164428,165512,165513,166853,166854,168110,168111,169427,169428,171139,171140,172855,172856,185642,185643,191363,191364,191694,191695,192601,192602,192628,192629,192664,192665,192711,192712,192744,192745,192773,192774,192806,192807,192842,192843,192878,192879,192899,192900,192932,192933,193004,193005,193425,193426,193444,193445,193463,193464,193483,193484,193525,193526,193567,193568,193608,193609,193628,193629,193652,193653,193667,193668,193702,193703,193728,193729,193767,193768,193798,193799,193827,193828,193856,193857,193885,193886,193904,193905,193920,193921,193942,193943,193962,193963,193991,193992,194018,194019,194041,194042,194064,194065,194113,194114,194139,194140,194164,194165,194187,194188,194216,194217,194244,194245,194262,194263,194280,194281,194308,194309,194330,194331,194362,194363,194381,194382,194403,194404,194426,194427,194443,194444,194465,194466,194487,194488,194509,194510,194532,194533,194607,194608,194636,194637,194665,194666,194695,194696,194734,194735,194773,194774,194815,194816,194854,194855,194944,194945,194982,194983,195016,195017,195040,195041,195062,195063,195086,195087,195112,195113,195133,195134,195150,195151,195168,195169,195339,195340,196479,196480,196495,196496,196608,196609,207998,208155,208820,208821,209297,209298,209925,209926,212674,212675,218799,218800,218823,218824,219597,220854,220857,222212,222302,222304,222558,222559,223321,223322,225781,225782,227697,227698,227785,227789,227806,227807,227828,227832,229376,229378,229440,229441,230888,230890,230916,230917,230944,230975,230981,230991,257987,262077,262143,262144") == "04246ff09af4ef70c1929c19381561f23513be84" || 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", "616,1,457,570,578,590,594,599,600,683,687,692,693,957,961,966,967,970,974,977,978,1204,1212,1220,1226,1231,1235,1239,1240,1813,1814,3722,3723,3904,3905,4292,4293,4925,4926,5662,5667,14861,14862,23444,23445,29617,29618,32768,32770,32832,32833,34162,34163,51430,51431,56719,56720,57950,57952,57972,57974,58293,58294,58620,58621,58915,58916,59224,59225,59507,59508,59802,59803,60179,60180,60254,60255,63670,63671,63863,63864,63952,63955,63973,63974,64019,64020,64038,64040,64089,64090,64122,64123,65010,65011,65024,65025,65055,65056,65154,65155,65438,65439,65455,65456,65536,65537,66058,66059,66061,66062,66257,66448,66628,66629,66704,66705,66706,66707,66719,66721,67987,67988,69125,69127,69548,69549,69823,69824,70248,70249,70447,70451,71292,71293,72201,72202,81180,81181,82167,82168,91919,91920,93398,93399,95062,95064,96724,96725,98304,98306,98368,98369,98888,98889,99071,99072,100734,100735,102459,102460,104153,104154,105368,105369,106695,106696,108017,108018,109244,109245,110568,110569,111955,111956,113248,113249,114551,114552,115906,115907,117201,117202,118458,118459,119694,119695,121047,121048,122230,122231,123583,123584,124822,124823,125632,125633,125657,125658,125682,125683,125939,125940,125964,125965,125989,125990,126014,126015,126039,126040,126140,126141,126382,126383,126407,126408,126545,126546,126570,126571,126595,126596,127205,127206,127230,127231,127255,127256,127468,127469,127513,127514,127538,127539,127563,127564,127588,127589,127613,127614,127955,127956,127980,127981,128118,128119,128143,128144,128168,128169,128805,128806,130007,130008,131072,131073,131592,131593,131834,131835,132025,132026,132050,132051,132075,132076,133117,133118,134411,134412,135564,135565,136812,136813,138029,138030,139220,139221,140471,140472,141685,141686,142834,142835,143975,143976,145120,145121,146270,146271,146736,146737,146761,146762,146786,146787,147043,147044,147068,147069,147093,147094,147118,147119,147143,147144,147485,147486,147510,147511,147554,147555,147649,147650,147674,147675,147699,147700,148309,148310,148334,148335,148359,148360,148616,148617,148641,148642,148666,148667,148691,148692,148716,148717,148769,148770,149059,149060,149084,149085,149222,149223,149247,149248,149272,149273,149985,149986,150224,150225,150249,150250,150274,150275,151138,151139,152891,152892,154613,154614,156354,156355,156577,156578,156602,156603,156627,156628,156652,156653,156677,156678,157019,157020,157044,157045,158103,158104,159593,159594,160958,160959,162304,162305,163582,163583,163840,163842,163904,163905,164427,164428,165512,165513,166853,166854,168110,168111,169427,169428,171139,171140,172855,172856,185642,185643,191363,191364,191694,191695,192601,192602,192628,192629,192664,192665,192711,192712,192744,192745,192773,192774,192806,192807,192842,192843,192878,192879,192899,192900,192932,192933,193004,193005,193425,193426,193444,193445,193463,193464,193483,193484,193525,193526,193567,193568,193608,193609,193628,193629,193652,193653,193667,193668,193702,193703,193728,193729,193767,193768,193798,193799,193827,193828,193856,193857,193885,193886,193904,193905,193920,193921,193942,193943,193962,193963,193991,193992,194018,194019,194041,194042,194064,194065,194113,194114,194139,194140,194164,194165,194187,194188,194216,194217,194244,194245,194262,194263,194280,194281,194308,194309,194330,194331,194362,194363,194381,194382,194403,194404,194426,194427,194443,194444,194465,194466,194487,194488,194509,194510,194532,194533,194607,194608,194636,194637,194665,194666,194695,194696,194734,194735,194773,194774,194815,194816,194854,194855,194944,194945,194982,194983,195016,195017,195040,195041,195062,195063,195086,195087,195112,195113,195133,195134,195150,195151,195168,195169,195339,195340,196479,196480,196495,196496,196608,196609,207998,208155,208820,208821,209297,209298,209925,209926,212674,212675,218799,218800,218823,218824,219597,220854,220857,222212,222302,222304,222558,222559,223321,223322,225781,225782,227697,227698,227785,227789,227806,227807,227828,227832,229376,229378,229440,229441,230888,230890,230916,230917,230944,230975,230981,230991,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:f9d6fe13811acbb594b903f8b1214bbec8087e73",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:7e4139d2ce5ed7eb6d70eaf0e4603eae7939df46",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:7e4139d2ce5ed7eb6d70eaf0e4603eae7939df46");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:f2fb0b14e0f93c96aa6599e3abba2da96f4b2fb5",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:de252e218dbcd23f929c6443383729d051e3f6d8",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:de252e218dbcd23f929c6443383729d051e3f6d8");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:7c86905a10c5dc6c6906bd5d0610633c761f6806",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cb61f034c4271ee999da56e1875e8963c233181e",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cb61f034c4271ee999da56e1875e8963c233181e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:779468:e7061fde40c42ef1344495eb79a6554ae05dd4d1",
                "EMMC:/dev/block/bootdevice/by-name/aboot:779468:8b69a77cdb41d36ffe8f61e1893b6b9a14fe8efd",
                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:8b69a77cdb41d36ffe8f61e1893b6b9a14fe8efd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:76bfc3a475a0e4bd1b1c43f51520d322819d3abb",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:a6043b17025d3934b07b5c18978ac1ac66105780",
                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:a6043b17025d3934b07b5c18978ac1ac66105780");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4507dcb2838caea38ef6c1a495e3285293968f59",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4929a6442c96a3e972f54960177d1907acd2fe69",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:4929a6442c96a3e972f54960177d1907acd2fe69");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:48bed0cf6c08f87b4449007e1fa5b04cd974c3b6",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:cc397070e75ede4d505ec34992a39374fd6b827d",
                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:cc397070e75ede4d505ec34992a39374fd6b827d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:24b5a97a2bb4e9a9918a5bdec3a41b67bd2b9b8d",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:ded29c3ee22f2ff9642d214e42033aca3e123242",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:409044:ded29c3ee22f2ff9642d214e42033aca3e123242");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:8d0ca36893bc7cbfd60c392629ab7b822fd38688",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:2c74df45f2c77c9fb050c66a3bf164b5fbaba932",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:2c74df45f2c77c9fb050c66a3bf164b5fbaba932");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:c039ccd851eda00b9758238b470583905419498f",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:dc931d042364a26c10dfac317acf3a5380a30f5d",
                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:dc931d042364a26c10dfac317acf3a5380a30f5d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:f2fb0b14e0f93c96aa6599e3abba2da96f4b2fb5",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:de252e218dbcd23f929c6443383729d051e3f6d8",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:de252e218dbcd23f929c6443383729d051e3f6d8");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:7c86905a10c5dc6c6906bd5d0610633c761f6806",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cb61f034c4271ee999da56e1875e8963c233181e",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cb61f034c4271ee999da56e1875e8963c233181e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:e7061fde40c42ef1344495eb79a6554ae05dd4d1",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:8b69a77cdb41d36ffe8f61e1893b6b9a14fe8efd",
                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:8b69a77cdb41d36ffe8f61e1893b6b9a14fe8efd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4507dcb2838caea38ef6c1a495e3285293968f59",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4929a6442c96a3e972f54960177d1907acd2fe69",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:4929a6442c96a3e972f54960177d1907acd2fe69");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:24b5a97a2bb4e9a9918a5bdec3a41b67bd2b9b8d",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:ded29c3ee22f2ff9642d214e42033aca3e123242",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:ded29c3ee22f2ff9642d214e42033aca3e123242");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:8d0ca36893bc7cbfd60c392629ab7b822fd38688",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:2c74df45f2c77c9fb050c66a3bf164b5fbaba932",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:2c74df45f2c77c9fb050c66a3bf164b5fbaba932");
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:20bca6a386dc40912369e926fed4b8aee8774eb1",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:3f185431987322f8bbef5680a4658a421ff76e14",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:3f185431987322f8bbef5680a4658a421ff76e14");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:dc9a1a318baaf7eb3aad4de9580ffd02919256f2",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:4b3dca6d391ad93d772dca3b83fae82309da313a",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:4b3dca6d391ad93d772dca3b83fae82309da313a");
