getprop("ro.product.device") == "sweet" || abort("E3004: This package is for \"sweet\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Redmi/sweet_id/sweet:12/RKQ1.210614.002/V13.0.7.0.SKFIDXM:user/release-keys");
ui_print("Target: Redmi/sweet_id/sweet:12/RKQ1.210614.002/V13.0.8.0.SKFIDXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/sweet_id/sweet:12/RKQ1.210614.002/V13.0.7.0.SKFIDXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/sweet_id/sweet:12/RKQ1.210614.002/V13.0.8.0.SKFIDXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/sweet_id/sweet:12/RKQ1.210614.002/V13.0.7.0.SKFIDXM:user/release-keys or Redmi/sweet_id/sweet:12/RKQ1.210614.002/V13.0.8.0.SKFIDXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:9b6ff16cd97c71e93bd4c55a4d117171c59b4297"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:bdcfa87f0b22e1b1c5bcc4f188028f58d2c3f75a")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:9b6ff16cd97c71e93bd4c55a4d117171c59b4297"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:bdcfa87f0b22e1b1c5bcc4f188028f58d2c3f75a"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "24,1,32770,32973,40811,41290,41292,41308,98306,98509,163842,164045,229378,229581,294914,295117,819202,819405,819416,819420,831556,834157,847375,847551,847552") == "0ead0f8c2616de214ebf9168c98c698c65435233" || block_image_verify(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block(map_partition("system"));
ifelse (block_image_recover(map_partition("system"), "24,1,32770,32973,40811,41290,41292,41308,98306,98509,163842,164045,229378,229581,294914,295117,819202,819405,819416,819420,831556,834157,847375,847551,847552") && block_image_verify(map_partition("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(map_partition("vendor"), "480,1,120,131,133,140,141,221,227,235,236,621,622,628,630,636,637,882,884,891,892,898,900,905,906,1039,1040,1048,1050,1055,1056,1061,1063,1068,1069,1072,1073,1083,1085,1091,1092,1707,1758,1875,1876,4464,4465,13193,13194,14212,14214,14218,14220,14221,14222,14243,14244,14245,14246,14249,14250,14255,14256,14257,14258,14262,14263,14267,14268,14272,14273,14277,14278,14282,14283,14287,14288,14289,14290,14293,14295,14296,14297,14299,14301,14302,14303,14306,14307,14308,14309,14312,14313,14314,14315,14318,14319,14320,14321,14324,14325,14326,14327,14331,14332,14336,14337,14340,14342,14346,14347,14350,14352,14353,14354,14358,14359,14360,14361,14364,14365,14366,14367,14370,14371,14372,14373,14376,14377,14378,14379,14382,14384,14385,14386,14389,14390,14391,14392,14397,14398,14402,14403,14407,14408,14412,14413,14417,14418,14779,14780,15695,15700,32768,32770,32857,32885,57229,57230,57859,57861,57896,57898,58397,58398,58620,58621,65536,65559,65679,65680,65684,65686,65703,65704,65739,65740,65749,65750,65752,65753,65807,65808,65812,65813,65886,65887,65893,65894,65919,65920,65956,65957,66064,66065,66116,66117,66249,66253,66721,66722,66746,66747,66753,66754,66770,66771,66887,66888,66890,66892,66956,66957,67027,67028,67095,67096,67098,67099,67101,67111,67170,67171,67173,67175,67236,67237,67239,67240,67300,67301,67303,67304,67367,67368,67370,67371,67438,67439,67441,67442,67509,67510,67579,67580,67648,67649,67720,67721,67723,67724,67789,67790,67792,67793,67857,67858,67860,67861,67925,67926,67928,67929,67996,67997,67999,68000,68067,68068,68070,68071,68135,68136,68138,68139,68203,68204,68206,68207,68271,68272,68275,68276,68340,68341,68343,68344,68409,68410,68412,68413,68415,68416,68479,68480,68482,68483,68488,68489,68490,68491,68492,68493,68554,68555,68557,68558,68618,68619,68621,68622,68685,68686,68688,68689,68756,68757,68759,68760,68827,68828,68897,68898,68966,68967,69038,69039,69041,69042,69107,69108,69110,69111,69175,69176,69178,69179,69243,69244,69246,69247,69311,69312,69314,69315,69379,69380,69382,69383,69447,69448,69450,69451,69515,69516,69518,69519,69583,69584,69586,69587,69651,69652,69655,69656,69721,69722,69724,69725,69788,69790,69792,69793,69955,69956,69970,69971,70450,70452,73623,73624,78248,78249,78305,78306,78331,78332,78396,78397,78547,78548,78627,78628,78652,78653,78723,78724,78791,78792,78823,78824,78916,78917,78989,78990,79014,79015,79101,79102,79141,79142,79144,79145,79177,79178,79399,79400,79516,79517,79588,79589,79645,79646,79787,79788,79789,79790,79900,79901,79966,79967,79989,79990,80038,80039,80109,80110,80192,80193,80447,80449,80505,80506,80796,80800,80808,80810,80818,80825,80839,80840,81001,81011,81027,81028,81029,81030,81121,81123,81129,81131,81166,81191,81333,81347,82860,98306,98393,163842,163929,229378,229465,294914,295001,327701,327703,358188,359407,365103,365190,365191") == "e99ebe17f11416528ec2298ac6d087d0953fc976" || block_image_verify(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block(map_partition("vendor"));
ifelse (block_image_recover(map_partition("vendor"), "480,1,120,131,133,140,141,221,227,235,236,621,622,628,630,636,637,882,884,891,892,898,900,905,906,1039,1040,1048,1050,1055,1056,1061,1063,1068,1069,1072,1073,1083,1085,1091,1092,1707,1758,1875,1876,4464,4465,13193,13194,14212,14214,14218,14220,14221,14222,14243,14244,14245,14246,14249,14250,14255,14256,14257,14258,14262,14263,14267,14268,14272,14273,14277,14278,14282,14283,14287,14288,14289,14290,14293,14295,14296,14297,14299,14301,14302,14303,14306,14307,14308,14309,14312,14313,14314,14315,14318,14319,14320,14321,14324,14325,14326,14327,14331,14332,14336,14337,14340,14342,14346,14347,14350,14352,14353,14354,14358,14359,14360,14361,14364,14365,14366,14367,14370,14371,14372,14373,14376,14377,14378,14379,14382,14384,14385,14386,14389,14390,14391,14392,14397,14398,14402,14403,14407,14408,14412,14413,14417,14418,14779,14780,15695,15700,32768,32770,32857,32885,57229,57230,57859,57861,57896,57898,58397,58398,58620,58621,65536,65559,65679,65680,65684,65686,65703,65704,65739,65740,65749,65750,65752,65753,65807,65808,65812,65813,65886,65887,65893,65894,65919,65920,65956,65957,66064,66065,66116,66117,66249,66253,66721,66722,66746,66747,66753,66754,66770,66771,66887,66888,66890,66892,66956,66957,67027,67028,67095,67096,67098,67099,67101,67111,67170,67171,67173,67175,67236,67237,67239,67240,67300,67301,67303,67304,67367,67368,67370,67371,67438,67439,67441,67442,67509,67510,67579,67580,67648,67649,67720,67721,67723,67724,67789,67790,67792,67793,67857,67858,67860,67861,67925,67926,67928,67929,67996,67997,67999,68000,68067,68068,68070,68071,68135,68136,68138,68139,68203,68204,68206,68207,68271,68272,68275,68276,68340,68341,68343,68344,68409,68410,68412,68413,68415,68416,68479,68480,68482,68483,68488,68489,68490,68491,68492,68493,68554,68555,68557,68558,68618,68619,68621,68622,68685,68686,68688,68689,68756,68757,68759,68760,68827,68828,68897,68898,68966,68967,69038,69039,69041,69042,69107,69108,69110,69111,69175,69176,69178,69179,69243,69244,69246,69247,69311,69312,69314,69315,69379,69380,69382,69383,69447,69448,69450,69451,69515,69516,69518,69519,69583,69584,69586,69587,69651,69652,69655,69656,69721,69722,69724,69725,69788,69790,69792,69793,69955,69956,69970,69971,70450,70452,73623,73624,78248,78249,78305,78306,78331,78332,78396,78397,78547,78548,78627,78628,78652,78653,78723,78724,78791,78792,78823,78824,78916,78917,78989,78990,79014,79015,79101,79102,79141,79142,79144,79145,79177,79178,79399,79400,79516,79517,79588,79589,79645,79646,79787,79788,79789,79790,79900,79901,79966,79967,79989,79990,80038,80039,80109,80110,80192,80193,80447,80449,80505,80506,80796,80800,80808,80810,80818,80825,80839,80840,81001,81011,81027,81028,81029,81030,81121,81123,81129,81131,81166,81191,81333,81347,82860,98306,98393,163842,163929,229378,229465,294914,295001,327701,327703,358188,359407,365103,365190,365191") && block_image_verify(map_partition("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;
if (range_sha1(map_partition("product"), "456,1,102,119,123,127,128,7803,7804,8010,8012,8254,8256,8991,8995,9018,9019,9134,9138,9141,9142,9151,9157,9158,9159,9175,9181,9182,9183,17928,17929,25347,25348,25956,25961,28199,28200,28805,28809,29695,29696,30064,30068,30580,30581,30594,30600,30601,30602,32442,32446,32457,32458,32768,32770,32855,32862,33894,33895,43815,43816,47853,47854,51858,51859,61701,61702,65536,65543,71252,71259,72735,72736,72743,72744,72747,72748,72878,72884,72885,72886,72899,72905,72906,72907,73723,73727,73742,73743,82586,82587,89014,89018,90420,90421,94277,94279,98304,98306,98391,98398,108038,108039,110259,110261,130414,130415,130989,130990,131072,131079,133051,133052,137102,137103,140475,140476,141090,141091,141707,141708,145849,145850,146339,146340,150039,150040,150155,150157,150165,150167,150208,150210,150219,150220,150991,150992,150999,151000,151006,151007,151010,151017,151025,151026,155612,155613,155715,155716,155718,155720,155731,155733,155743,155744,155833,155834,155846,155847,155861,155863,155872,155873,155875,155876,156184,156185,156186,156188,156200,156201,156277,156278,156280,156281,156346,156347,156432,156433,157861,157868,157876,157883,157923,157930,157956,157963,157988,157995,158015,158016,158030,158032,161965,161966,163840,163842,163927,163934,166870,166872,166880,166882,166891,166892,166901,166903,166911,166913,167665,167666,169081,169082,177742,177743,178192,178193,181689,181690,183316,183317,183321,183322,186092,186093,186110,186111,186112,186114,186115,186116,186117,186118,186119,186120,190309,190312,196608,196615,197843,197847,197865,197870,197888,197892,199060,199061,199635,199639,200616,200617,204795,204796,205104,205105,205371,205372,207470,207471,209786,209787,212723,212724,213939,213940,214118,214120,214121,214122,214128,214129,214134,214135,214160,214161,214165,214167,214169,214171,214194,214195,214207,214208,214209,214210,214271,214275,214279,214283,214284,214288,214289,214293,214294,214298,214299,214303,214304,214308,214309,214313,214314,214318,214319,214323,214324,214326,214327,214329,214330,214375,214441,214444,214859,214860,215231,215232,216717,216718,216807,216808,216857,216858,216865,216866,216873,216874,216881,216882,216889,216890,216900,216901,219239,219241,221357,221358,222824,222825,226672,226673,229376,229378,229463,229482,230661,230664,232513,232515,234320,234321,236228,236229,237875,237877,238015,238017,246883,246885,248729,248730,250709,250713,250798,250799,251039,251043,251279,251280,251326,251332,251333,251334,251511,251515,253404,253405,253840,253842,253849,253850,254902,254904,255684,255685,262144,262158,262276,262277,266440,266441,266587,266588,266961,266964,267558,267559,268185,268186,268728,268732,268745,268746,270319,270323,270347,270348,294572,294573,294912,294914,294999,295003,295326,295335,327680,327681,329883,329884,329957,329958,330010,330011,330049,330050,330494,330495,330669,330670,330868,330877,331414,331422,331451,331452,331453,331454,331847,331848,332848,332849,333185,333187,333289,333290,334690,334691,337567,337568,338518,338521,343222,343223,351288,356857,356939,356940") == "1b98f6614385431a51a98b8ad86cfe758fd6e1f5" || block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat")) then
ui_print("Verified product image...");
else
ifelse (block_image_recover(map_partition("product"), "456,1,102,119,123,127,128,7803,7804,8010,8012,8254,8256,8991,8995,9018,9019,9134,9138,9141,9142,9151,9157,9158,9159,9175,9181,9182,9183,17928,17929,25347,25348,25956,25961,28199,28200,28805,28809,29695,29696,30064,30068,30580,30581,30594,30600,30601,30602,32442,32446,32457,32458,32768,32770,32855,32862,33894,33895,43815,43816,47853,47854,51858,51859,61701,61702,65536,65543,71252,71259,72735,72736,72743,72744,72747,72748,72878,72884,72885,72886,72899,72905,72906,72907,73723,73727,73742,73743,82586,82587,89014,89018,90420,90421,94277,94279,98304,98306,98391,98398,108038,108039,110259,110261,130414,130415,130989,130990,131072,131079,133051,133052,137102,137103,140475,140476,141090,141091,141707,141708,145849,145850,146339,146340,150039,150040,150155,150157,150165,150167,150208,150210,150219,150220,150991,150992,150999,151000,151006,151007,151010,151017,151025,151026,155612,155613,155715,155716,155718,155720,155731,155733,155743,155744,155833,155834,155846,155847,155861,155863,155872,155873,155875,155876,156184,156185,156186,156188,156200,156201,156277,156278,156280,156281,156346,156347,156432,156433,157861,157868,157876,157883,157923,157930,157956,157963,157988,157995,158015,158016,158030,158032,161965,161966,163840,163842,163927,163934,166870,166872,166880,166882,166891,166892,166901,166903,166911,166913,167665,167666,169081,169082,177742,177743,178192,178193,181689,181690,183316,183317,183321,183322,186092,186093,186110,186111,186112,186114,186115,186116,186117,186118,186119,186120,190309,190312,196608,196615,197843,197847,197865,197870,197888,197892,199060,199061,199635,199639,200616,200617,204795,204796,205104,205105,205371,205372,207470,207471,209786,209787,212723,212724,213939,213940,214118,214120,214121,214122,214128,214129,214134,214135,214160,214161,214165,214167,214169,214171,214194,214195,214207,214208,214209,214210,214271,214275,214279,214283,214284,214288,214289,214293,214294,214298,214299,214303,214304,214308,214309,214313,214314,214318,214319,214323,214324,214326,214327,214329,214330,214375,214441,214444,214859,214860,215231,215232,216717,216718,216807,216808,216857,216858,216865,216866,216873,216874,216881,216882,216889,216890,216900,216901,219239,219241,221357,221358,222824,222825,226672,226673,229376,229378,229463,229482,230661,230664,232513,232515,234320,234321,236228,236229,237875,237877,238015,238017,246883,246885,248729,248730,250709,250713,250798,250799,251039,251043,251279,251280,251326,251332,251333,251334,251511,251515,253404,253405,253840,253842,253849,253850,254902,254904,255684,255685,262144,262158,262276,262277,266440,266441,266587,266588,266961,266964,267558,267559,268185,268186,268728,268732,268745,268746,270319,270323,270347,270348,294572,294573,294912,294914,294999,295003,295326,295335,327680,327681,329883,329884,329957,329958,330010,330011,330049,330050,330494,330495,330669,330670,330868,330877,331414,331422,331451,331452,331453,331454,331847,331848,332848,332849,333185,333187,333289,333290,334690,334691,337567,337568,338518,338521,343222,343223,351288,356857,356939,356940") && block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat"), ui_print("product recovered successfully."), abort("E2004: product partition fails to recover"));
endif;
if (range_sha1(map_partition("odm"), "14,1,11,12,13,22,23,31,32,292,293,296,305,321,322") == "234ce134372f75dadbf5aa214c1c5ff662a8f631" || block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat")) then
ui_print("Verified odm image...");
else
ifelse (block_image_recover(map_partition("odm"), "14,1,11,12,13,22,23,31,32,292,293,296,305,321,322") && block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat"), ui_print("odm recovered successfully."), abort("E2004: odm partition fails to recover"));
endif;
if (range_sha1(map_partition("system_ext"), "256,1,63,27757,27758,28000,28002,28010,28014,28018,28019,28081,28087,28088,28089,28753,28755,28812,28816,28830,28831,28842,28848,28849,31194,31200,31201,31204,31222,31229,31235,31236,31237,31433,31439,31440,31441,31445,31451,31452,31453,31458,31459,31898,31902,31914,31915,31927,31933,31934,31935,32614,32618,32631,32632,32638,32644,32645,32646,32649,32650,32662,32668,32669,32670,32681,32682,32688,32694,32695,32696,32702,32703,32716,32722,32723,32724,32736,32742,32743,32750,32768,32770,32804,32824,32825,32826,32955,32956,33043,33044,33056,33057,33059,33060,33061,33062,33063,33065,33066,33067,33068,33069,33099,33111,33113,33114,33115,33116,33126,33127,33150,33151,33191,33192,33197,33199,33301,33302,33304,33306,33315,33316,33799,33803,33807,33811,33817,33821,33822,33826,33827,33831,33832,33836,33837,33841,33842,33846,33847,33851,33852,33856,33857,33861,33862,33866,33867,33871,33872,33876,33877,33879,33886,33890,33891,33895,33896,33900,33901,33903,33904,33908,33909,33913,33914,33918,33919,33923,33924,33928,33929,33933,33934,33936,33941,33943,33948,33952,33953,33957,33958,33962,33963,33965,33966,33968,33969,33971,33972,33976,33977,33981,33982,33986,33987,33991,33992,33996,33997,34001,34002,34004,34005,34009,34010,34014,34015,34018,34019,34021,34026,34034,34037,34087,34090,34197,37580,38317,38481,38482,38631,38632,39921,40199,40923,40924,40970,40979,41366,41387,41825,41826,41878,41879,42188,42189,51914,53078,53285,53286,53925,53926,55513,55514,55988,56350,56393,98306,98340,131089,131092,142011,142449,144709,144753,144754") == "f541e2268e217e76ef97144a2c5028b68b1806a4" || block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat")) then
ui_print("Verified system_ext image...");
else
check_first_block(map_partition("system_ext"));
ifelse (block_image_recover(map_partition("system_ext"), "256,1,63,27757,27758,28000,28002,28010,28014,28018,28019,28081,28087,28088,28089,28753,28755,28812,28816,28830,28831,28842,28848,28849,31194,31200,31201,31204,31222,31229,31235,31236,31237,31433,31439,31440,31441,31445,31451,31452,31453,31458,31459,31898,31902,31914,31915,31927,31933,31934,31935,32614,32618,32631,32632,32638,32644,32645,32646,32649,32650,32662,32668,32669,32670,32681,32682,32688,32694,32695,32696,32702,32703,32716,32722,32723,32724,32736,32742,32743,32750,32768,32770,32804,32824,32825,32826,32955,32956,33043,33044,33056,33057,33059,33060,33061,33062,33063,33065,33066,33067,33068,33069,33099,33111,33113,33114,33115,33116,33126,33127,33150,33151,33191,33192,33197,33199,33301,33302,33304,33306,33315,33316,33799,33803,33807,33811,33817,33821,33822,33826,33827,33831,33832,33836,33837,33841,33842,33846,33847,33851,33852,33856,33857,33861,33862,33866,33867,33871,33872,33876,33877,33879,33886,33890,33891,33895,33896,33900,33901,33903,33904,33908,33909,33913,33914,33918,33919,33923,33924,33928,33929,33933,33934,33936,33941,33943,33948,33952,33953,33957,33958,33962,33963,33965,33966,33968,33969,33971,33972,33976,33977,33981,33982,33986,33987,33991,33992,33996,33997,34001,34002,34004,34005,34009,34010,34014,34015,34018,34019,34021,34026,34034,34037,34087,34090,34197,37580,38317,38481,38482,38631,38632,39921,40199,40923,40924,40970,40979,41366,41387,41825,41826,41878,41879,42188,42189,51914,53078,53285,53286,53925,53926,55513,55514,55988,56350,56393,98306,98340,131089,131092,142011,142449,144709,144753,144754") && block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat"), ui_print("system_ext recovered successfully."), abort("E2004: system_ext partition fails to recover"));
endif;

# ---- start making changes here ----


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

ui_print("Patching firmware images...");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hyp");
package_extract_file("firmware-update/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/aop.mbn", "/dev/block/bootdevice/by-name/aop");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_config");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsec");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecapp");
package_extract_file("firmware-update/imagefv.elf", "/dev/block/bootdevice/by-name/imagefv");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfw");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/dspso.bin", "/dev/block/bootdevice/by-name/dsp");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/km41.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xbl");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlibbak");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hypbak");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/aop.mbn", "/dev/block/bootdevice/by-name/aopbak");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_configbak");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecappbak");
package_extract_file("firmware-update/imagefv.elf", "/dev/block/bootdevice/by-name/imagefvbak");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfwbak");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
package_extract_file("firmware-update/km41.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xblbak");

# --- Start patching dynamic partitions ---


# Patch partition vendor

ui_print("Patching vendor image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");

# Update dynamic partition metadata

assert(update_dynamic_partitions(package_extract_file("dynamic_partitions_op_list")));

# Patch partition system

ui_print("Patching system image after verification.");
show_progress(0.500000, 0);
block_image_update(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");

# Patch partition product

ui_print("Patching product image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat") ||
  abort("E2001: Failed to update product image.");

# Patch partition odm

ui_print("Patching odm image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat") ||
  abort("E2001: Failed to update odm image.");

# Patch partition system_ext

ui_print("Patching system_ext image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat") ||
  abort("E2001: Failed to update system_ext image.");

# --- End patching dynamic partitions ---

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:9b6ff16cd97c71e93bd4c55a4d117171c59b4297"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:bdcfa87f0b22e1b1c5bcc4f188028f58d2c3f75a"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:bdcfa87f0b22e1b1c5bcc4f188028f58d2c3f75a")));

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

ui_print("Patching vbmeta dtbo logo binimages...");
package_extract_file("firmware-update/dtbo.img", "/dev/block/bootdevice/by-name/dtbo");
package_extract_file("firmware-update/vbmeta.img", "/dev/block/bootdevice/by-name/vbmeta");
package_extract_file("firmware-update/vbmeta_system.img", "/dev/block/bootdevice/by-name/vbmeta_system");
set_progress(1.000000);
