getprop("ro.product.device") == "merlin" || abort("E3004: This package is for \"merlin\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Redmi/merlin_eea/merlin:11/RP1A.200720.011/V12.5.5.0.RJOEUXM:user/release-keys");
ui_print("Target: Redmi/merlin_eea/merlin:11/RP1A.200720.011/V12.5.6.0.RJOEUXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/merlin_eea/merlin:11/RP1A.200720.011/V12.5.5.0.RJOEUXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/merlin_eea/merlin:11/RP1A.200720.011/V12.5.6.0.RJOEUXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/merlin_eea/merlin:11/RP1A.200720.011/V12.5.5.0.RJOEUXM:user/release-keys or Redmi/merlin_eea/merlin:11/RP1A.200720.011/V12.5.6.0.RJOEUXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/platform/bootdevice/by-name/boot",":67108864:5fe003a67901b3511dfee85320bb54773324b90e"),
                      concat("EMMC:","/dev/block/platform/bootdevice/by-name/boot",":67108864:556b2ad90eaef18e07831547a04c2e497ced3d0c")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/platform/bootdevice/by-name/boot",":67108864:5fe003a67901b3511dfee85320bb54773324b90e"),"\" or \"",concat("EMMC:","/dev/block/platform/bootdevice/by-name/boot",":67108864:556b2ad90eaef18e07831547a04c2e497ced3d0c"),"\" has unexpected contents."));
apply_patch_space(67108864) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "962,1,227,240,251,32768,32770,32964,32980,65536,65552,81921,81923,82085,82089,82097,82098,82111,82115,82119,82120,82154,82155,82162,82166,82170,82171,85666,85670,85712,85713,89745,89746,89884,89885,89917,89921,89925,89926,90048,90052,90056,92941,97875,97879,97908,97909,97924,97928,97932,97933,98084,98088,98094,98095,98304,98306,98500,98516,104213,104217,104282,104283,105372,105376,105398,105399,105529,105533,105539,105540,105674,105678,105685,105686,110971,110975,111077,111078,111444,111445,111516,111520,111525,111526,112002,112006,112022,112023,112575,112579,112583,112584,114338,114342,114385,114386,114390,114394,114398,114399,114430,114434,114438,114439,116130,116134,116158,116159,120204,120208,120245,120246,122013,122017,122035,122036,122066,122067,122073,122077,122081,122082,123668,123672,125834,125835,125870,125874,125891,125892,125897,125898,126348,126352,126755,126756,127446,127450,127466,127467,127650,127654,127661,127662,129777,129781,129824,129825,130111,130115,130125,130126,131072,131088,133246,133247,139364,139368,139456,139457,140910,140914,140941,140942,144807,144811,144837,144838,147935,147939,147997,147998,149823,149827,149866,149867,149909,149915,149921,149922,154236,154242,154283,154284,157781,157782,160113,160117,160148,160149,161277,161281,161304,161305,161484,161485,162802,162808,162831,162832,163840,163842,164036,164052,165229,165233,165264,165265,167039,167043,167066,167067,169265,169269,169301,169302,194665,194669,194923,194924,196608,196624,197021,197027,197075,197076,197967,197973,197995,197996,208441,208445,208558,208559,211674,211678,211720,211721,212202,212206,212222,212223,212335,212339,212345,212346,212351,212357,212362,212363,217888,217892,217972,217973,217977,217981,217985,217986,218032,218038,218042,218043,220868,220874,220920,220921,220964,220968,220972,220973,223330,223331,224344,224348,224387,224388,224471,224475,224480,224481,224493,224497,224501,224502,225726,225730,225757,225758,229376,229378,229572,229588,237434,237438,237622,237623,237633,237637,237641,237642,239169,239173,239196,239197,240867,240871,240888,240889,244037,244041,244069,244070,245015,245019,245042,245043,245052,245056,245060,245061,245067,245071,245076,245077,245081,245082,245107,245111,245115,245116,250346,250350,250423,250424,250773,250777,250790,250791,252137,252143,252162,252163,252237,252241,252247,252248,253728,253732,253760,253761,253766,253770,253774,253775,255222,255226,256664,256665,262144,262160,265430,265434,265555,265558,268170,268174,268189,268190,268687,268691,268699,268700,271687,271688,272066,272067,273537,273538,276843,276844,279693,279695,279696,279698,279699,279701,279702,279703,279704,279705,279706,279707,279708,279709,279710,279711,279712,279713,279714,279715,279716,279717,279718,279719,279720,279721,279722,279723,279724,279725,279726,279727,279728,279729,279730,279731,279732,279733,279734,279735,279736,279737,279738,279739,279740,279741,279742,279743,279744,279745,279746,279747,279748,279749,279750,279751,279752,279753,279754,279755,279756,279757,279758,279759,279760,279761,279762,279763,279764,279765,279766,279767,279768,279769,279770,279771,279772,279773,279774,279775,279776,279777,279778,279779,279780,279781,279782,279783,279784,279785,279786,279787,279788,279789,279790,279791,279792,279793,279794,279795,279796,279797,279798,279799,279800,279801,279802,279803,279804,279805,279806,279807,279808,279809,279810,279811,279812,279813,279814,279815,279816,279817,279818,279819,279820,279821,279822,279823,279824,279825,279826,279827,279828,279829,279830,279831,279832,279833,279834,279835,279836,279837,279838,279839,279840,279841,279842,279843,279844,279845,279846,279847,279848,279849,279850,279851,279852,279853,279854,279855,279856,279857,279858,279859,279860,279861,279862,279863,279864,279865,279866,279867,279868,279869,279870,279871,279872,279873,279874,279875,279876,279877,279878,279879,279880,279881,279882,279883,279884,279885,279886,279887,279888,279889,279890,279891,279892,279893,279894,279895,279896,279897,279898,279899,279900,279901,279902,279903,279904,279905,279906,279907,279908,279909,279910,279911,279912,279913,279914,279915,279916,279917,279918,279919,279920,279921,279922,279923,279924,279925,279926,279927,279928,279929,279930,279931,279932,279933,279934,279935,279936,279937,279938,279939,279940,279941,279942,279943,279944,279945,279946,279947,279948,279949,279950,279951,279952,279953,279954,279955,279956,279957,279958,279959,279960,279961,279962,279963,279964,279965,279966,279967,279968,279969,279970,279971,279972,279973,279974,279975,279976,279977,279978,279979,279980,279981,279982,279983,279984,279985,279986,279987,279988,279989,279990,279991,279992,279993,279994,279995,279996,279997,279998,279999,280000,280001,280002,280003,280004,280005,280006,280007,280008,280009,280010,280011,280012,280013,280014,280015,280016,280017,280018,280019,280020,280021,280022,280023,280024,280025,280026,280027,280028,280029,280030,280031,280032,280033,280034,280035,280036,280037,280038,280039,280040,280041,280042,280043,280044,280045,280046,280047,280048,280049,280050,280051,280052,280053,280054,280055,280056,280057,280058,280059,280060,280061,280062,280063,280064,280065,280066,280067,280068,280069,280070,280071,280072,280073,280074,280075,280076,280077,280078,280079,280080,280081,280082,280083,280084,280085,280086,280087,280088,280089,280090,280091,280092,280093,280094,280095,280096,280097,280098,280099,280100,280101,280102,280103,280104,280105,280106,280107,280108,280109,280110,280111,280112,280113,280114,280115,280116,280117,280118,280119,280120,280121,280122,280123,280124,280125,280126,280127,280128,280129,280130,280131,280132,280133,280134,280135,280136,280137,280138,280139,280140,280141,280142,280143,280144,280146,280152,280153,294912,294914,295108,295124,295282,295283,295925,295929,295950,295951,296319,296320,296325,296348,296360,296361,296368,296369,296372,296373,296415,296416,296423,296424,296451,296452,296528,296529,296535,296536,296537,296538,296608,296609,296612,296617,296618,296619,296620,296621,296622,296623,297546,297547,297554,297555,298108,298109,298110,298112,298665,298667,298668,298669,298670,298671,298672,298673,298674,298675,298676,298677,298678,298679,298680,298681,298683,298684,298685,298688,300013,300015,300148,300149,300160,300161,300167,300169,300427,300428,300430,300432,300992,300993,301007,301008,301151,301152,301173,301175,301177,301178,310206,310207,318141,318142,320758,320760,320765,320816,320821,324230,324235,324361,324375,324381,324391,324720,324725,324780,324785,328745,328750,328890,328906,328912,328922,329281,329292,329303,330478,330479,341144,786442,786448,794415,796825,809452,809621,809622") == "54d7e732f87b2704a7fd430e7bafb052f83d6d01" || 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"), "962,1,227,240,251,32768,32770,32964,32980,65536,65552,81921,81923,82085,82089,82097,82098,82111,82115,82119,82120,82154,82155,82162,82166,82170,82171,85666,85670,85712,85713,89745,89746,89884,89885,89917,89921,89925,89926,90048,90052,90056,92941,97875,97879,97908,97909,97924,97928,97932,97933,98084,98088,98094,98095,98304,98306,98500,98516,104213,104217,104282,104283,105372,105376,105398,105399,105529,105533,105539,105540,105674,105678,105685,105686,110971,110975,111077,111078,111444,111445,111516,111520,111525,111526,112002,112006,112022,112023,112575,112579,112583,112584,114338,114342,114385,114386,114390,114394,114398,114399,114430,114434,114438,114439,116130,116134,116158,116159,120204,120208,120245,120246,122013,122017,122035,122036,122066,122067,122073,122077,122081,122082,123668,123672,125834,125835,125870,125874,125891,125892,125897,125898,126348,126352,126755,126756,127446,127450,127466,127467,127650,127654,127661,127662,129777,129781,129824,129825,130111,130115,130125,130126,131072,131088,133246,133247,139364,139368,139456,139457,140910,140914,140941,140942,144807,144811,144837,144838,147935,147939,147997,147998,149823,149827,149866,149867,149909,149915,149921,149922,154236,154242,154283,154284,157781,157782,160113,160117,160148,160149,161277,161281,161304,161305,161484,161485,162802,162808,162831,162832,163840,163842,164036,164052,165229,165233,165264,165265,167039,167043,167066,167067,169265,169269,169301,169302,194665,194669,194923,194924,196608,196624,197021,197027,197075,197076,197967,197973,197995,197996,208441,208445,208558,208559,211674,211678,211720,211721,212202,212206,212222,212223,212335,212339,212345,212346,212351,212357,212362,212363,217888,217892,217972,217973,217977,217981,217985,217986,218032,218038,218042,218043,220868,220874,220920,220921,220964,220968,220972,220973,223330,223331,224344,224348,224387,224388,224471,224475,224480,224481,224493,224497,224501,224502,225726,225730,225757,225758,229376,229378,229572,229588,237434,237438,237622,237623,237633,237637,237641,237642,239169,239173,239196,239197,240867,240871,240888,240889,244037,244041,244069,244070,245015,245019,245042,245043,245052,245056,245060,245061,245067,245071,245076,245077,245081,245082,245107,245111,245115,245116,250346,250350,250423,250424,250773,250777,250790,250791,252137,252143,252162,252163,252237,252241,252247,252248,253728,253732,253760,253761,253766,253770,253774,253775,255222,255226,256664,256665,262144,262160,265430,265434,265555,265558,268170,268174,268189,268190,268687,268691,268699,268700,271687,271688,272066,272067,273537,273538,276843,276844,279693,279695,279696,279698,279699,279701,279702,279703,279704,279705,279706,279707,279708,279709,279710,279711,279712,279713,279714,279715,279716,279717,279718,279719,279720,279721,279722,279723,279724,279725,279726,279727,279728,279729,279730,279731,279732,279733,279734,279735,279736,279737,279738,279739,279740,279741,279742,279743,279744,279745,279746,279747,279748,279749,279750,279751,279752,279753,279754,279755,279756,279757,279758,279759,279760,279761,279762,279763,279764,279765,279766,279767,279768,279769,279770,279771,279772,279773,279774,279775,279776,279777,279778,279779,279780,279781,279782,279783,279784,279785,279786,279787,279788,279789,279790,279791,279792,279793,279794,279795,279796,279797,279798,279799,279800,279801,279802,279803,279804,279805,279806,279807,279808,279809,279810,279811,279812,279813,279814,279815,279816,279817,279818,279819,279820,279821,279822,279823,279824,279825,279826,279827,279828,279829,279830,279831,279832,279833,279834,279835,279836,279837,279838,279839,279840,279841,279842,279843,279844,279845,279846,279847,279848,279849,279850,279851,279852,279853,279854,279855,279856,279857,279858,279859,279860,279861,279862,279863,279864,279865,279866,279867,279868,279869,279870,279871,279872,279873,279874,279875,279876,279877,279878,279879,279880,279881,279882,279883,279884,279885,279886,279887,279888,279889,279890,279891,279892,279893,279894,279895,279896,279897,279898,279899,279900,279901,279902,279903,279904,279905,279906,279907,279908,279909,279910,279911,279912,279913,279914,279915,279916,279917,279918,279919,279920,279921,279922,279923,279924,279925,279926,279927,279928,279929,279930,279931,279932,279933,279934,279935,279936,279937,279938,279939,279940,279941,279942,279943,279944,279945,279946,279947,279948,279949,279950,279951,279952,279953,279954,279955,279956,279957,279958,279959,279960,279961,279962,279963,279964,279965,279966,279967,279968,279969,279970,279971,279972,279973,279974,279975,279976,279977,279978,279979,279980,279981,279982,279983,279984,279985,279986,279987,279988,279989,279990,279991,279992,279993,279994,279995,279996,279997,279998,279999,280000,280001,280002,280003,280004,280005,280006,280007,280008,280009,280010,280011,280012,280013,280014,280015,280016,280017,280018,280019,280020,280021,280022,280023,280024,280025,280026,280027,280028,280029,280030,280031,280032,280033,280034,280035,280036,280037,280038,280039,280040,280041,280042,280043,280044,280045,280046,280047,280048,280049,280050,280051,280052,280053,280054,280055,280056,280057,280058,280059,280060,280061,280062,280063,280064,280065,280066,280067,280068,280069,280070,280071,280072,280073,280074,280075,280076,280077,280078,280079,280080,280081,280082,280083,280084,280085,280086,280087,280088,280089,280090,280091,280092,280093,280094,280095,280096,280097,280098,280099,280100,280101,280102,280103,280104,280105,280106,280107,280108,280109,280110,280111,280112,280113,280114,280115,280116,280117,280118,280119,280120,280121,280122,280123,280124,280125,280126,280127,280128,280129,280130,280131,280132,280133,280134,280135,280136,280137,280138,280139,280140,280141,280142,280143,280144,280146,280152,280153,294912,294914,295108,295124,295282,295283,295925,295929,295950,295951,296319,296320,296325,296348,296360,296361,296368,296369,296372,296373,296415,296416,296423,296424,296451,296452,296528,296529,296535,296536,296537,296538,296608,296609,296612,296617,296618,296619,296620,296621,296622,296623,297546,297547,297554,297555,298108,298109,298110,298112,298665,298667,298668,298669,298670,298671,298672,298673,298674,298675,298676,298677,298678,298679,298680,298681,298683,298684,298685,298688,300013,300015,300148,300149,300160,300161,300167,300169,300427,300428,300430,300432,300992,300993,301007,301008,301151,301152,301173,301175,301177,301178,310206,310207,318141,318142,320758,320760,320765,320816,320821,324230,324235,324361,324375,324381,324391,324720,324725,324780,324785,328745,328750,328890,328906,328912,328922,329281,329292,329303,330478,330479,341144,786442,786448,794415,796825,809452,809621,809622") && 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"), "120,1,76,82,83,86,87,90,91,94,95,610,611,614,615,618,619,622,623,626,627,788,789,792,793,1009,1010,1089,1090,1160,1161,1344,1345,1423,1424,1503,1504,1583,1584,2487,2488,3900,3901,4982,4983,6095,6100,6101,6103,6104,6106,32768,32770,32810,32857,42221,42222,42538,42539,42863,42864,43178,43179,45412,45421,51515,51516,53864,54661,54940,56079,56915,56916,57247,57248,57577,57578,57893,57894,58211,58212,58509,58510,58826,58827,59144,59145,65536,65581,71263,71264,71582,71583,71908,71909,72240,72241,72574,72575,72891,72892,73216,73217,73545,73546,77708,77709,94494,94495,97680,97681,97832,98306,98346,163842,163882,164320,164832,167447,167496,167497") == "853dcc1350aae91a860191207520b72cbff5e852" || 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"), "120,1,76,82,83,86,87,90,91,94,95,610,611,614,615,618,619,622,623,626,627,788,789,792,793,1009,1010,1089,1090,1160,1161,1344,1345,1423,1424,1503,1504,1583,1584,2487,2488,3900,3901,4982,4983,6095,6100,6101,6103,6104,6106,32768,32770,32810,32857,42221,42222,42538,42539,42863,42864,43178,43179,45412,45421,51515,51516,53864,54661,54940,56079,56915,56916,57247,57248,57577,57578,57893,57894,58211,58212,58509,58510,58826,58827,59144,59145,65536,65581,71263,71264,71582,71583,71908,71909,72240,72241,72574,72575,72891,72892,73216,73217,73545,73546,77708,77709,94494,94495,97680,97681,97832,98306,98346,163842,163882,164320,164832,167447,167496,167497") && 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"), "198,1,92,6403,6404,13645,13649,16448,16451,19261,19262,27675,27676,32768,32770,32846,32852,37687,37688,40843,40844,41206,41210,41729,41730,41742,41746,41750,41751,43591,43595,45031,45032,49098,49102,53303,53304,63055,63056,65536,65542,71287,71288,81130,81131,92209,92210,97585,97586,98304,98306,98382,98388,110440,110441,110448,110449,117975,117976,119213,119217,120230,120231,131072,131078,137645,137646,159515,159516,162386,162387,163840,163842,163918,163924,167576,167577,181480,181481,181488,181489,181495,181496,188115,188116,188128,188132,188140,188141,188142,188143,188144,188145,188157,188158,188161,188163,188164,188165,188166,188167,188179,188180,188181,188185,188189,188192,188196,188199,188648,188649,189020,189021,190506,190507,190597,190599,190602,190603,190606,190607,190610,190611,190614,190615,190618,190619,190622,190623,190626,190627,190633,190634,190640,190641,190647,190648,190654,190655,190661,190662,191495,191497,196608,196640,199673,199674,224265,224267,224572,224574,229376,229378,229454,229475,233482,233483,238659,238663,238769,238770,238907,238911,238919,238920,240308,240312,240349,240350,252917,252918,254493,254494,255030,255034,255055,255056,255720,255724,255740,255741,257314,257318,262144,262151,268178,268179,294912,294914,294990,294993,299156,299157,303022,303025,313752,318726,318803,318804") == "d0aa00ca4cf97f0e514b671500ba274cbe3e802c" || 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"), "198,1,92,6403,6404,13645,13649,16448,16451,19261,19262,27675,27676,32768,32770,32846,32852,37687,37688,40843,40844,41206,41210,41729,41730,41742,41746,41750,41751,43591,43595,45031,45032,49098,49102,53303,53304,63055,63056,65536,65542,71287,71288,81130,81131,92209,92210,97585,97586,98304,98306,98382,98388,110440,110441,110448,110449,117975,117976,119213,119217,120230,120231,131072,131078,137645,137646,159515,159516,162386,162387,163840,163842,163918,163924,167576,167577,181480,181481,181488,181489,181495,181496,188115,188116,188128,188132,188140,188141,188142,188143,188144,188145,188157,188158,188161,188163,188164,188165,188166,188167,188179,188180,188181,188185,188189,188192,188196,188199,188648,188649,189020,189021,190506,190507,190597,190599,190602,190603,190606,190607,190610,190611,190614,190615,190618,190619,190622,190623,190626,190627,190633,190634,190640,190641,190647,190648,190654,190655,190661,190662,191495,191497,196608,196640,199673,199674,224265,224267,224572,224574,229376,229378,229454,229475,233482,233483,238659,238663,238769,238770,238907,238911,238919,238920,240308,240312,240349,240350,252917,252918,254493,254494,255030,255034,255055,255056,255720,255724,255740,255741,257314,257318,262144,262151,268178,268179,294912,294914,294990,294993,299156,299157,303022,303025,313752,318726,318803,318804") && 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;

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


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

# --- End patching dynamic partitions ---

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition(concat("EMMC:","/dev/block/platform/bootdevice/by-name/boot",":67108864:5fe003a67901b3511dfee85320bb54773324b90e"),
                concat("EMMC:","/dev/block/platform/bootdevice/by-name/boot",":67108864:556b2ad90eaef18e07831547a04c2e497ced3d0c"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/platform/bootdevice/by-name/boot",":67108864:556b2ad90eaef18e07831547a04c2e497ced3d0c")));
show_mtupdate_stage("/cache/recovery/last_mtupdate_stage");
ifelse (
less_than_int(get_mtupdate_stage("/cache/recovery/last_mtupdate_stage"), "1") ,
(
ui_print("start to update general image");
package_extract_file("dtbo.img", "/dev/block/platform/bootdevice/by-name/dtbo");
package_extract_file("logo.bin", "/dev/block/platform/bootdevice/by-name/logo");
package_extract_file("md1img.img", "/dev/block/platform/bootdevice/by-name/md1img");
package_extract_file("spmfw.img", "/dev/block/platform/bootdevice/by-name/spmfw");
set_mtupdate_stage("/cache/recovery/last_mtupdate_stage", "1");
),
ui_print("general images are already updated");
);
ifelse (
less_than_int(get_mtupdate_stage("/cache/recovery/last_mtupdate_stage"), "3") ,
(
if less_than_int(get_mtupdate_stage("/cache/recovery/last_mtupdate_stage"), "2") then

ui_print("start to update alt loader image");
package_extract_file("sspm.img", "/dev/block/platform/bootdevice/by-name/sspm_2");
package_extract_file("tee.img", "/dev/block/platform/bootdevice/by-name/tee2");
package_extract_file("scp.img", "/dev/block/platform/bootdevice/by-name/scp2");
package_extract_file("lk.img", "/dev/block/platform/bootdevice/by-name/lk2");
if get_storage_type() then 
 assert(package_extract_file("preloader_ufs.img", "/dev/block/mmcblk0boot1"));
else 
 assert(set_emmc_writable("/sys/block/mmcblk0boot1/force_ro"),
        package_extract_file("preloader_emmc.img", "/dev/block/mmcblk0boot1"));
endif;
set_mtupdate_stage("/cache/recovery/last_mtupdate_stage", "2");
endif;

switch_active("sspm_1", "sspm_2");
switch_active("tee1", "tee2");
switch_active("scp1", "scp2");
switch_active("lk", "lk2");
switch_active("preloader", "preloader2");
set_mtupdate_stage("/cache/recovery/last_mtupdate_stage", "3");
),
ui_print("alt loder images are already updated");
);
ifelse (
less_than_int(get_mtupdate_stage("/cache/recovery/last_mtupdate_stage"), "5") ,
(
if less_than_int(get_mtupdate_stage("/cache/recovery/last_mtupdate_stage"), "4") then

ui_print("start to update main loader image");
package_extract_file("sspm.img", "/dev/block/platform/bootdevice/by-name/sspm_1");
package_extract_file("tee.img", "/dev/block/platform/bootdevice/by-name/tee1");
package_extract_file("scp.img", "/dev/block/platform/bootdevice/by-name/scp1");
package_extract_file("lk.img", "/dev/block/platform/bootdevice/by-name/lk");
if get_storage_type() then 
 assert(package_extract_file("preloader_ufs.img", "/dev/block/mmcblk0boot0"));
else 
 assert(set_emmc_writable("/sys/block/mmcblk0boot0/force_ro"),
        package_extract_file("preloader_emmc.img", "/dev/block/mmcblk0boot0"));
endif;
set_mtupdate_stage("/cache/recovery/last_mtupdate_stage", "4");
endif;

switch_active("sspm_2", "sspm_1");
switch_active("tee2", "tee1");
switch_active("scp2", "scp1");
switch_active("lk2", "lk");
switch_active("preloader2", "preloader");
),
ui_print("main loader images are already updated");
);
delete("/cache/recovery/last_mtupdate_stage");
package_extract_file("vbmeta_system.img", "/dev/block/platform/bootdevice/by-name/vbmeta_system");
package_extract_file("vbmeta.img", "/dev/block/platform/bootdevice/by-name/vbmeta");
package_extract_file("vbmeta_vendor.img", "/dev/block/platform/bootdevice/by-name/vbmeta_vendor");
post_ota_action();
set_progress(1.000000);
