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:11/RKQ1.200826.002/V12.5.4.0.RKFIDXM:user/release-keys");
ui_print("Target: Redmi/sweet_id/sweet:11/RKQ1.200826.002/V12.5.5.0.RKFIDXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/sweet_id/sweet:11/RKQ1.200826.002/V12.5.4.0.RKFIDXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/sweet_id/sweet:11/RKQ1.200826.002/V12.5.5.0.RKFIDXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/sweet_id/sweet:11/RKQ1.200826.002/V12.5.4.0.RKFIDXM:user/release-keys or Redmi/sweet_id/sweet:11/RKQ1.200826.002/V12.5.5.0.RKFIDXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:1682cbae18dfc2d31d611180ad07ab8634f006a9"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:a230736834e16896ba4e367a452b118ca9e401eb")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:1682cbae18dfc2d31d611180ad07ab8634f006a9"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:a230736834e16896ba4e367a452b118ca9e401eb"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "178,1,32,43,53,55,59,87,88,21341,21342,21372,21373,27537,27538,28952,56665,56672,56673,57976,57977,59098,59099,60829,60830,61665,61666,62873,62874,63025,63026,63950,63951,65536,65552,68331,68332,69317,69318,70683,70684,71133,71134,73303,73304,73565,73566,73658,73659,73909,73910,74126,74128,74266,74270,74278,74279,74291,74295,74299,74300,75747,75753,75787,75788,75794,75800,75801,75802,75807,75813,75814,75815,79311,79315,79355,79356,80321,80322,80972,80973,82904,82907,82915,82916,82938,82939,82943,82944,83378,83379,83503,83504,83535,83541,83542,83543,83854,83858,83866,83867,83987,83993,83994,85209,86433,86571,86593,86594,89004,89005,89770,89774,89812,89813,89827,89833,89834,89835,89842,89848,89849,89850,93474,93475,95505,95509,95540,95541,95572,95573,96661,96665,96686,96687,96816,96820,96826,96827,96960,96964,96971,96972,98304,98322,102273,102277,102346,102347,102375,102376,102928,102934,102935,102936,104806,104810,104855,104856,104860,104866,104867,104868,104899,104905,104906,104907,106597,106601,106625,720904,720912,753665,753680,782683,785040,797480,797645,797646") == "41ec5e26d9683e572cd75d73c38d1e0fa849629c" || 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"), "178,1,32,43,53,55,59,87,88,21341,21342,21372,21373,27537,27538,28952,56665,56672,56673,57976,57977,59098,59099,60829,60830,61665,61666,62873,62874,63025,63026,63950,63951,65536,65552,68331,68332,69317,69318,70683,70684,71133,71134,73303,73304,73565,73566,73658,73659,73909,73910,74126,74128,74266,74270,74278,74279,74291,74295,74299,74300,75747,75753,75787,75788,75794,75800,75801,75802,75807,75813,75814,75815,79311,79315,79355,79356,80321,80322,80972,80973,82904,82907,82915,82916,82938,82939,82943,82944,83378,83379,83503,83504,83535,83541,83542,83543,83854,83858,83866,83867,83987,83993,83994,85209,86433,86571,86593,86594,89004,89005,89770,89774,89812,89813,89827,89833,89834,89835,89842,89848,89849,89850,93474,93475,95505,95509,95540,95541,95572,95573,96661,96665,96686,96687,96816,96820,96826,96827,96960,96964,96971,96972,98304,98322,102273,102277,102346,102347,102375,102376,102928,102934,102935,102936,104806,104810,104855,104856,104860,104866,104867,104868,104899,104905,104906,104907,106597,106601,106625,720904,720912,753665,753680,782683,785040,797480,797645,797646") && 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"), "414,1,29,39,43,48,49,127,135,141,142,553,554,798,802,807,808,810,814,816,817,972,973,976,980,984,985,988,989,998,1002,1006,1007,1686,1737,1840,1841,2007,2013,4356,4357,13049,13050,14044,14046,14047,14048,14050,14053,14054,14055,14057,14059,14060,14061,14063,14065,14066,14067,14069,14071,14072,14073,14075,14077,14078,14079,14081,14083,14088,14090,14093,14095,14098,14100,14108,14110,14113,14115,14116,14117,14119,14121,14122,14123,14126,14128,14129,14130,14132,14134,14135,14136,14138,14140,14141,14142,14144,14146,14147,14148,14150,14152,14153,14154,14163,14164,14183,14184,14185,14186,14190,14191,14192,14193,14196,14197,14198,14199,14202,14203,14204,14205,14208,14209,14210,14211,14215,14216,14217,14218,14221,14222,14223,14224,14228,14229,14233,14234,14238,14239,14243,14244,14248,14249,14250,14251,14260,14261,14262,14263,14266,14267,14268,14269,14272,14273,14274,14275,14278,14279,14280,14281,14283,14285,14577,14578,14693,14694,15595,15600,32768,32795,57039,57040,57668,57670,63842,63843,65536,65556,70893,70894,70915,70916,71018,71019,71020,71021,71519,71521,71526,71528,71534,71536,71541,71543,71602,71604,71824,71825,73055,73057,73086,73088,73588,73589,73809,73810,80838,80839,80843,80845,80862,80863,80898,80899,80908,80909,80911,80912,80962,80963,80966,80967,80975,80976,81050,81051,81057,81058,81083,81084,81118,81119,81225,81226,81271,81272,81407,81411,81880,81881,81910,81911,82039,82040,82042,82044,82108,82109,82179,82180,82247,82248,82250,82251,82253,82263,82322,82323,82325,82327,82388,82389,82391,82392,82452,82453,82455,82456,82519,82520,82522,82523,82590,82591,82593,82594,82661,82662,82731,82732,82800,82801,82872,82873,82875,82876,82941,82942,82944,82945,83009,83010,83012,83013,83077,83078,83080,83081,83148,83149,83151,83152,83219,83220,83222,83223,83287,83288,83290,83291,83355,83356,83358,83359,83423,83424,83427,83428,83492,83493,83495,83496,83561,83562,83564,83565,83567,83568,83631,83632,83634,83635,87468,87469,91560,91561,91693,91694,91782,91783,92086,92087,92148,92149,92298,92299,92378,92379,92411,92412,92488,92489,92556,92557,92661,92662,92754,92755,92827,92828,92873,92874,92978,92979,93022,93023,93025,93026,93058,93059,93106,93107,93284,93285,93356,93357,93409,93410,93734,93735,93737,93738,93832,93833,93957,93958,94032,94033,94066,94067,94094,94095,94158,94159,94230,94231,94311,94312,94313,94314,94737,94739,94744,94746,95067,95081,96595,360458,360468,372898,374029,379876") == "9cdd7fab0678e817370253b6d281a26ac0960d08" || 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"), "414,1,29,39,43,48,49,127,135,141,142,553,554,798,802,807,808,810,814,816,817,972,973,976,980,984,985,988,989,998,1002,1006,1007,1686,1737,1840,1841,2007,2013,4356,4357,13049,13050,14044,14046,14047,14048,14050,14053,14054,14055,14057,14059,14060,14061,14063,14065,14066,14067,14069,14071,14072,14073,14075,14077,14078,14079,14081,14083,14088,14090,14093,14095,14098,14100,14108,14110,14113,14115,14116,14117,14119,14121,14122,14123,14126,14128,14129,14130,14132,14134,14135,14136,14138,14140,14141,14142,14144,14146,14147,14148,14150,14152,14153,14154,14163,14164,14183,14184,14185,14186,14190,14191,14192,14193,14196,14197,14198,14199,14202,14203,14204,14205,14208,14209,14210,14211,14215,14216,14217,14218,14221,14222,14223,14224,14228,14229,14233,14234,14238,14239,14243,14244,14248,14249,14250,14251,14260,14261,14262,14263,14266,14267,14268,14269,14272,14273,14274,14275,14278,14279,14280,14281,14283,14285,14577,14578,14693,14694,15595,15600,32768,32795,57039,57040,57668,57670,63842,63843,65536,65556,70893,70894,70915,70916,71018,71019,71020,71021,71519,71521,71526,71528,71534,71536,71541,71543,71602,71604,71824,71825,73055,73057,73086,73088,73588,73589,73809,73810,80838,80839,80843,80845,80862,80863,80898,80899,80908,80909,80911,80912,80962,80963,80966,80967,80975,80976,81050,81051,81057,81058,81083,81084,81118,81119,81225,81226,81271,81272,81407,81411,81880,81881,81910,81911,82039,82040,82042,82044,82108,82109,82179,82180,82247,82248,82250,82251,82253,82263,82322,82323,82325,82327,82388,82389,82391,82392,82452,82453,82455,82456,82519,82520,82522,82523,82590,82591,82593,82594,82661,82662,82731,82732,82800,82801,82872,82873,82875,82876,82941,82942,82944,82945,83009,83010,83012,83013,83077,83078,83080,83081,83148,83149,83151,83152,83219,83220,83222,83223,83287,83288,83290,83291,83355,83356,83358,83359,83423,83424,83427,83428,83492,83493,83495,83496,83561,83562,83564,83565,83567,83568,83631,83632,83634,83635,87468,87469,91560,91561,91693,91694,91782,91783,92086,92087,92148,92149,92298,92299,92378,92379,92411,92412,92488,92489,92556,92557,92661,92662,92754,92755,92827,92828,92873,92874,92978,92979,93022,93023,93025,93026,93058,93059,93106,93107,93284,93285,93356,93357,93409,93410,93734,93735,93737,93738,93832,93833,93957,93958,94032,94033,94066,94067,94094,94095,94158,94159,94230,94231,94311,94312,94313,94314,94737,94739,94744,94746,95067,95081,96595,360458,360468,372898,374029,379876") && 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"), "340,1,15,3862,3863,4441,4442,6213,6217,6313,6314,8949,8952,8960,8961,9000,9001,17183,17184,25171,25173,25303,25308,26586,26587,27262,27266,28232,28233,28595,28599,29118,29119,29131,29135,29139,29140,30980,30984,31026,31027,32417,32418,32768,32776,40229,40230,41454,41455,50630,50631,54542,54546,54577,54579,54872,54875,58675,58676,65536,65542,68523,68524,78068,78075,79551,79552,79557,79558,79686,79692,79693,79694,79706,79712,79713,79714,80504,80505,82871,82872,96157,96158,96234,96235,98304,98312,98421,98422,114772,114773,115032,115033,115229,115230,117141,117142,124594,124595,125577,125581,130657,130658,131072,131078,135724,135725,135732,135733,135739,135740,140077,140078,140303,140305,140315,140317,140363,140365,140375,140377,140386,140387,142205,142206,142209,142212,145978,145979,151819,151820,151840,151841,151904,151905,152566,152567,154111,154112,163164,163165,163171,163172,163643,163644,163840,163848,168189,168190,169901,169902,169906,169907,172812,172813,184234,184238,185990,185991,186565,186569,187589,187590,191979,191980,192540,192541,192545,192546,192569,192571,192572,192573,192605,192606,192617,192618,194537,194538,194541,194542,196608,196614,200851,200852,201015,201016,201017,201018,201020,201021,201036,201037,201040,201042,201043,201045,201063,201064,201077,201078,201116,201120,201124,201128,201129,201141,201556,201557,201928,201929,203414,203415,203504,203506,203508,203509,203511,203512,203514,203515,203517,203518,203520,203521,203523,203524,203534,203535,203539,203540,203545,203546,203551,203552,203556,203557,203562,203563,203590,203591,203611,203612,203618,203619,203639,203640,203656,203657,204368,204370,211999,212002,212359,212360,215952,215953,217904,217905,219824,219826,221848,221849,221858,221860,223230,223232,229376,229411,231431,231433,232483,232485,234725,234726,234900,234903,234951,234952,235207,235209,235596,235598,236994,236996,238431,238433,242675,242676,242730,242731,244943,244944,252713,252714,253297,253299,254507,254509,256062,256064,262144,262171,266944,266945,290940,290941,290962,290963,291170,291171,291477,291478,291649,291650,291891,291892,292627,292628,293173,293174,293386,293387,294331,294333,294837,294838,294912,294919,295487,295488,298383,298384,299176,299179,302513,302514,309874,314786,314862,314863") == "21e4cf7d9f1a7d434560cb44bbd03ae8b6e76861" || 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"), "340,1,15,3862,3863,4441,4442,6213,6217,6313,6314,8949,8952,8960,8961,9000,9001,17183,17184,25171,25173,25303,25308,26586,26587,27262,27266,28232,28233,28595,28599,29118,29119,29131,29135,29139,29140,30980,30984,31026,31027,32417,32418,32768,32776,40229,40230,41454,41455,50630,50631,54542,54546,54577,54579,54872,54875,58675,58676,65536,65542,68523,68524,78068,78075,79551,79552,79557,79558,79686,79692,79693,79694,79706,79712,79713,79714,80504,80505,82871,82872,96157,96158,96234,96235,98304,98312,98421,98422,114772,114773,115032,115033,115229,115230,117141,117142,124594,124595,125577,125581,130657,130658,131072,131078,135724,135725,135732,135733,135739,135740,140077,140078,140303,140305,140315,140317,140363,140365,140375,140377,140386,140387,142205,142206,142209,142212,145978,145979,151819,151820,151840,151841,151904,151905,152566,152567,154111,154112,163164,163165,163171,163172,163643,163644,163840,163848,168189,168190,169901,169902,169906,169907,172812,172813,184234,184238,185990,185991,186565,186569,187589,187590,191979,191980,192540,192541,192545,192546,192569,192571,192572,192573,192605,192606,192617,192618,194537,194538,194541,194542,196608,196614,200851,200852,201015,201016,201017,201018,201020,201021,201036,201037,201040,201042,201043,201045,201063,201064,201077,201078,201116,201120,201124,201128,201129,201141,201556,201557,201928,201929,203414,203415,203504,203506,203508,203509,203511,203512,203514,203515,203517,203518,203520,203521,203523,203524,203534,203535,203539,203540,203545,203546,203551,203552,203556,203557,203562,203563,203590,203591,203611,203612,203618,203619,203639,203640,203656,203657,204368,204370,211999,212002,212359,212360,215952,215953,217904,217905,219824,219826,221848,221849,221858,221860,223230,223232,229376,229411,231431,231433,232483,232485,234725,234726,234900,234903,234951,234952,235207,235209,235596,235598,236994,236996,238431,238433,242675,242676,242730,242731,244943,244944,252713,252714,253297,253299,254507,254509,256062,256064,262144,262171,266944,266945,290940,290941,290962,290963,291170,291171,291477,291478,291649,291650,291891,291892,292627,292628,293173,293174,293386,293387,294331,294333,294837,294838,294912,294919,295487,295488,298383,298384,299176,299179,302513,302514,309874,314786,314862,314863") && 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"), "12,1,12,13,14,22,23,245,246,248,254,273,274") == "aa82f6d1e1d3b9273b0a89e6b4e301346effda4e" || 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"), "12,1,12,13,14,22,23,245,246,248,254,273,274") && 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"), "214,1,30,37,41,45,46,52,58,59,60,74,80,81,82,140,144,149,150,236,242,246,247,651,657,671,672,678,684,685,686,880,884,888,889,892,896,901,902,905,906,912,918,919,920,942,948,949,950,1685,1689,1707,1708,1712,1718,1719,1720,1722,1723,1734,1740,1741,1742,1752,1753,1758,1762,1766,1767,1771,1777,1781,1782,1789,1795,1796,1797,1809,1815,1816,1817,1819,1826,1832,1839,1844,1851,1881,1888,1907,1914,1932,1937,1954,1961,1977,1978,2187,2189,2199,2200,2212,2213,2214,2215,2216,2217,2226,2227,2250,2251,2297,2302,2305,2308,2311,2314,2317,2319,2323,2324,2328,2331,2336,2337,2827,2829,2833,2837,2842,2844,2849,2853,2854,2858,2859,2863,2864,2868,2869,2873,2874,2878,2879,2883,2884,2886,2893,2897,2898,2902,2903,2907,2908,2912,2913,2917,2918,2922,2923,2927,2928,2930,2931,2935,2936,2940,2941,2945,2946,2950,2951,2955,2956,2960,2961,2965,2966,2968,2972,2976,2977,2981,2982,2984,2985,2987,2988,2992,2993,2997,2998,3000,3001,3005,3006,3010,3011,3015,3016,3020,3021,3023,3024,3028,3029,3031,3035,98325,98327,114963,115312,117143,117182,117183") == "6c0c92ae9bfa909385fc08f1efeb3dc33582fa60" || 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"), "214,1,30,37,41,45,46,52,58,59,60,74,80,81,82,140,144,149,150,236,242,246,247,651,657,671,672,678,684,685,686,880,884,888,889,892,896,901,902,905,906,912,918,919,920,942,948,949,950,1685,1689,1707,1708,1712,1718,1719,1720,1722,1723,1734,1740,1741,1742,1752,1753,1758,1762,1766,1767,1771,1777,1781,1782,1789,1795,1796,1797,1809,1815,1816,1817,1819,1826,1832,1839,1844,1851,1881,1888,1907,1914,1932,1937,1954,1961,1977,1978,2187,2189,2199,2200,2212,2213,2214,2215,2216,2217,2226,2227,2250,2251,2297,2302,2305,2308,2311,2314,2317,2319,2323,2324,2328,2331,2336,2337,2827,2829,2833,2837,2842,2844,2849,2853,2854,2858,2859,2863,2864,2868,2869,2873,2874,2878,2879,2883,2884,2886,2893,2897,2898,2902,2903,2907,2908,2912,2913,2917,2918,2922,2923,2927,2928,2930,2931,2935,2936,2940,2941,2945,2946,2950,2951,2955,2956,2960,2961,2965,2966,2968,2972,2976,2977,2981,2982,2984,2985,2987,2988,2992,2993,2997,2998,3000,3001,3005,3006,3010,3011,3015,3016,3020,3021,3023,3024,3028,3029,3031,3035,98325,98327,114963,115312,117143,117182,117183") && 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 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.");

# 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 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.");

# 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.");

# --- 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:1682cbae18dfc2d31d611180ad07ab8634f006a9"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:a230736834e16896ba4e367a452b118ca9e401eb"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:a230736834e16896ba4e367a452b118ca9e401eb")));

# ---- 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);
