getprop("ro.product.device") == "gauguin" || abort("E3004: This package is for \"gauguin\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Redmi/gauguin/gauguin:11/RKQ1.200826.002/V12.5.6.0.RJSMIXM:user/release-keys");
ui_print("Target: Redmi/gauguin/gauguin:11/RKQ1.200826.002/V12.5.8.0.RJSMIXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/gauguin/gauguin:11/RKQ1.200826.002/V12.5.6.0.RJSMIXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/gauguin/gauguin:11/RKQ1.200826.002/V12.5.8.0.RJSMIXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/gauguin/gauguin:11/RKQ1.200826.002/V12.5.6.0.RJSMIXM:user/release-keys or Redmi/gauguin/gauguin:11/RKQ1.200826.002/V12.5.8.0.RJSMIXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:d559d4a93a1c6274674c5fa34d9a3a74fd117b01"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:ac16467f8965fc6eac9c301c5e1384be1eca0601")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:d559d4a93a1c6274674c5fa34d9a3a74fd117b01"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:ac16467f8965fc6eac9c301c5e1384be1eca0601"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "150,1,34,45,55,57,61,89,90,21348,21349,21379,21380,27544,27545,28959,39986,50992,56673,56680,56681,57984,57985,59106,59107,60837,60838,61673,61674,62881,62882,63033,63034,63958,63959,65536,65554,68341,68342,69327,69328,70693,70694,71143,71144,73313,73314,73575,73576,73668,73669,73919,73920,74136,74138,74276,74280,74288,74289,74350,74354,74360,74361,74373,74377,74381,74382,75802,75808,75841,75842,75848,75854,75855,75856,75861,75867,75868,75869,77967,77968,78592,78596,78636,78637,79602,79603,80253,80254,82185,82188,82196,82197,82219,82220,82224,82225,82659,82660,82820,82821,82852,82858,82859,82860,83178,83182,83190,83191,83311,83317,83318,84686,86144,86282,88993,88994,90099,90103,90141,90142,90156,90162,90163,90164,90171,90177,90178,90179,93803,93804,95834,95838,95869,95870,95901,95902,96990,96994,97015,97016,97145,97149,97154,622600,622610,649875,651843,662172,662313,662314") == "b6be3e847cf0fea536e7a7009883c79b610b6301" || 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"), "150,1,34,45,55,57,61,89,90,21348,21349,21379,21380,27544,27545,28959,39986,50992,56673,56680,56681,57984,57985,59106,59107,60837,60838,61673,61674,62881,62882,63033,63034,63958,63959,65536,65554,68341,68342,69327,69328,70693,70694,71143,71144,73313,73314,73575,73576,73668,73669,73919,73920,74136,74138,74276,74280,74288,74289,74350,74354,74360,74361,74373,74377,74381,74382,75802,75808,75841,75842,75848,75854,75855,75856,75861,75867,75868,75869,77967,77968,78592,78596,78636,78637,79602,79603,80253,80254,82185,82188,82196,82197,82219,82220,82224,82225,82659,82660,82820,82821,82852,82858,82859,82860,83178,83182,83190,83191,83311,83317,83318,84686,86144,86282,88993,88994,90099,90103,90141,90142,90156,90162,90163,90164,90171,90177,90178,90179,93803,93804,95834,95838,95869,95870,95901,95902,96990,96994,97015,97016,97145,97149,97154,622600,622610,649875,651843,662172,662313,662314") && 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"), "1014,1,29,39,43,48,49,128,136,142,143,1817,1821,2298,2299,2304,2305,2549,2553,2558,2559,2561,2565,2567,2568,2591,2592,2628,2632,2682,2683,2842,2843,2846,2850,2854,2855,2858,2859,3004,3073,5128,5179,5266,5267,7768,7769,16912,16913,17929,17931,17932,17933,17935,17938,17939,17940,17942,17944,17945,17946,17948,17950,17951,17952,17954,17956,17957,17958,17960,17962,17963,17964,17966,17968,17973,17975,17978,17980,17983,17985,17993,17995,17998,18000,18001,18002,18004,18006,18007,18008,18011,18013,18014,18015,18017,18019,18020,18021,18023,18025,18026,18027,18029,18031,18032,18033,18035,18037,18038,18039,18048,18049,18068,18069,18070,18071,18075,18076,18077,18078,18081,18082,18083,18084,18087,18088,18089,18090,18093,18094,18095,18096,18100,18101,18102,18103,18106,18107,18108,18109,18113,18114,18118,18119,18123,18124,18128,18129,18133,18134,18135,18136,18145,18146,18147,18148,18151,18152,18153,18154,18157,18158,18159,18160,18163,18164,18165,18166,18168,18170,18462,18463,18578,18579,19614,19622,32768,32795,34261,34262,34284,34285,34555,34557,34630,34631,35165,35166,36396,36398,36446,36447,41156,41158,41825,41827,42381,42383,42966,42967,43873,43874,43882,43883,44104,44105,47474,47475,48091,48092,49819,49820,65536,65559,77152,77153,77157,77159,77176,77177,77212,77213,77222,77223,77366,77367,77417,77418,77424,77425,78130,78131,78140,78141,78192,78193,78218,78219,78252,78253,78360,78361,78396,78397,78402,78403,78464,78465,78888,78889,82919,82920,83062,83063,83065,83067,83131,83132,83202,83203,83270,83271,83273,83274,83276,83277,83336,83338,83340,83341,83405,83406,83476,83477,83544,83545,83547,83548,83550,83556,83558,83559,83561,83563,83565,83576,83636,83637,83639,83640,83650,83651,83717,83718,83795,83796,83873,83874,83950,83951,84030,84031,84107,84108,84184,84185,84261,84262,84276,84277,84340,84341,84416,84417,84494,84495,84571,84572,84644,84645,84647,84648,84660,84666,84726,84727,84729,84730,84796,84797,84799,84800,84864,84865,84867,84868,84931,84932,84934,84935,84998,84999,85001,85002,85065,85066,85068,85069,85132,85133,85135,85136,85200,85201,85203,85204,85269,85270,85339,85340,85416,85417,85492,85493,85570,85571,85573,85574,85637,85638,85640,85641,85705,85706,85708,85709,85772,85773,85775,85776,85839,85840,85842,85843,85905,85906,85908,85909,85970,85971,85973,85974,86050,86051,86124,86125,86127,86128,86192,86193,86195,86196,86263,86264,86266,86267,86332,86333,86335,86336,86403,86404,86406,86407,86473,86474,86476,86477,86480,86481,86546,86547,86548,86549,86619,86620,86621,86622,86695,86696,86698,86699,86767,86768,86770,86771,86779,86780,86839,86840,86842,86843,86908,86909,86911,86912,86981,86982,86984,86985,87050,87051,87053,87054,87122,87123,87125,87126,87191,87192,87194,87195,87261,87262,87264,87265,87325,87326,87328,87329,87391,87392,87460,87461,87526,87527,87529,87530,87590,87591,87593,87594,87656,87657,87722,87723,87725,87726,87785,87786,87788,87789,87857,87858,87860,87861,87929,87930,88002,88003,88079,88080,88093,88094,88158,88159,88233,88234,88236,88237,88300,88301,88303,88304,88367,88368,88370,88371,88434,88435,88437,88438,88501,88502,88504,88505,88566,88567,88569,88570,88631,88632,88634,88635,88711,88712,88784,88785,88787,88788,88852,88853,88855,88856,88922,88923,88925,88926,88991,88992,88994,88995,89062,89063,89065,89066,89134,89135,89137,89138,89206,89207,89208,89209,89281,89282,89283,89284,89356,89357,89359,89360,89428,89429,89431,89432,89434,89435,89501,89502,89504,89505,89573,89574,89642,89643,89645,89646,89711,89712,89714,89715,89782,89783,89785,89786,89851,89852,89854,89855,89920,89921,89923,89924,89984,89985,89987,89988,90050,90051,90118,90119,90184,90185,90187,90188,90248,90249,90251,90252,90314,90315,90380,90381,90383,90384,90443,90444,90446,90447,90514,90515,90517,90518,95124,95125,95257,95258,95349,95350,95700,95701,95762,95763,95912,95913,95992,95993,96025,96026,96102,96103,96171,96172,96268,96269,96361,96362,96434,96435,96480,96481,96601,96602,96628,96629,96631,96632,96664,96665,96826,96827,96898,96899,96951,96952,97276,97277,97279,97280,97374,97375,97499,97500,97593,97594,97633,97634,97661,97662,97725,97726,97797,97798,97863,97865,97866,97868,97969,97971,97977,97981,98304,98337,98698,98699,98855,98856,99958,99959,100333,100334,100336,100337,100339,100340,100422,100423,100446,100447,100470,100471,101082,101083,101412,101413,101437,101441,101448,101449,101810,101811,102001,102002,102011,102016,102374,102375,102565,102566,102573,102574,102575,102580,102937,102938,103194,103199,103563,103564,103707,103709,103759,103764,104970,104971,104973,104974,105507,105508,105678,105679,106064,106065,107241,107242,107322,107323,108073,108074,108158,108159,108161,108162,108164,108167,108168,108169,108171,108172,108174,108177,108178,108179,108181,108182,108184,108186,108187,108196,108201,108202,108204,108205,108207,108208,108210,108211,108213,108214,108216,108217,108219,108220,108225,108226,108228,108229,108231,108232,108234,108235,108237,108238,108240,108241,108245,108247,108249,108250,108252,108253,108255,108256,113825,116197,116983,117032,119484,119485,120010,120025,120326,120327,126197,126199,128835,128836,130578,130579,131072,131106,134557,134558,134560,134561,141718,141719,142339,142340,143253,143254,146133,146134,147467,147468,151497,153457,153463,156074,157806,157807,159091,159092,159437,159438,159801,159802,161937,161939,163840,163864,164734,164735,165149,165150,165753,165759,166058,166059,173209,173210,173268,173269,173350,173351,174164,176323,177160,177226,179896,179898,180727,180728,190122,190123,191593,191594,192814,192815,192983,193045,196608,196628,198084,198085,202242,202772,204917,204918,205252,205263,205277,205288,205325,205326,205338,205339,223815,223816,225186,225248,229376,229407,234384,234385,234389,234390,237709,237710,240377,240379,242748,242749,242751,242752,242759,242760,242844,242845,243085,243086,246114,246115,246796,246797,246803,246804,248293,248294,249170,249171,254101,254102,262144,262168,263259,263260,267630,267631,267633,267634,269215,269216,269220,269221,276679,276680,276686,276688,276695,276696,282140,282141,282339,282340,282342,282343,282347,282348,282356,282357,282365,282366,282367,282368,282413,282414,282429,282430,282432,282433,282438,282439,282441,282442,282443,282445,282628,282629,284209,284210,284216,284218,284225,284226,284696,360460,360468,361666,362758,368510,368593,368594") == "f20b1f732caf58e0a1676e794e30b2336bb4e5f2" || 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"), "1014,1,29,39,43,48,49,128,136,142,143,1817,1821,2298,2299,2304,2305,2549,2553,2558,2559,2561,2565,2567,2568,2591,2592,2628,2632,2682,2683,2842,2843,2846,2850,2854,2855,2858,2859,3004,3073,5128,5179,5266,5267,7768,7769,16912,16913,17929,17931,17932,17933,17935,17938,17939,17940,17942,17944,17945,17946,17948,17950,17951,17952,17954,17956,17957,17958,17960,17962,17963,17964,17966,17968,17973,17975,17978,17980,17983,17985,17993,17995,17998,18000,18001,18002,18004,18006,18007,18008,18011,18013,18014,18015,18017,18019,18020,18021,18023,18025,18026,18027,18029,18031,18032,18033,18035,18037,18038,18039,18048,18049,18068,18069,18070,18071,18075,18076,18077,18078,18081,18082,18083,18084,18087,18088,18089,18090,18093,18094,18095,18096,18100,18101,18102,18103,18106,18107,18108,18109,18113,18114,18118,18119,18123,18124,18128,18129,18133,18134,18135,18136,18145,18146,18147,18148,18151,18152,18153,18154,18157,18158,18159,18160,18163,18164,18165,18166,18168,18170,18462,18463,18578,18579,19614,19622,32768,32795,34261,34262,34284,34285,34555,34557,34630,34631,35165,35166,36396,36398,36446,36447,41156,41158,41825,41827,42381,42383,42966,42967,43873,43874,43882,43883,44104,44105,47474,47475,48091,48092,49819,49820,65536,65559,77152,77153,77157,77159,77176,77177,77212,77213,77222,77223,77366,77367,77417,77418,77424,77425,78130,78131,78140,78141,78192,78193,78218,78219,78252,78253,78360,78361,78396,78397,78402,78403,78464,78465,78888,78889,82919,82920,83062,83063,83065,83067,83131,83132,83202,83203,83270,83271,83273,83274,83276,83277,83336,83338,83340,83341,83405,83406,83476,83477,83544,83545,83547,83548,83550,83556,83558,83559,83561,83563,83565,83576,83636,83637,83639,83640,83650,83651,83717,83718,83795,83796,83873,83874,83950,83951,84030,84031,84107,84108,84184,84185,84261,84262,84276,84277,84340,84341,84416,84417,84494,84495,84571,84572,84644,84645,84647,84648,84660,84666,84726,84727,84729,84730,84796,84797,84799,84800,84864,84865,84867,84868,84931,84932,84934,84935,84998,84999,85001,85002,85065,85066,85068,85069,85132,85133,85135,85136,85200,85201,85203,85204,85269,85270,85339,85340,85416,85417,85492,85493,85570,85571,85573,85574,85637,85638,85640,85641,85705,85706,85708,85709,85772,85773,85775,85776,85839,85840,85842,85843,85905,85906,85908,85909,85970,85971,85973,85974,86050,86051,86124,86125,86127,86128,86192,86193,86195,86196,86263,86264,86266,86267,86332,86333,86335,86336,86403,86404,86406,86407,86473,86474,86476,86477,86480,86481,86546,86547,86548,86549,86619,86620,86621,86622,86695,86696,86698,86699,86767,86768,86770,86771,86779,86780,86839,86840,86842,86843,86908,86909,86911,86912,86981,86982,86984,86985,87050,87051,87053,87054,87122,87123,87125,87126,87191,87192,87194,87195,87261,87262,87264,87265,87325,87326,87328,87329,87391,87392,87460,87461,87526,87527,87529,87530,87590,87591,87593,87594,87656,87657,87722,87723,87725,87726,87785,87786,87788,87789,87857,87858,87860,87861,87929,87930,88002,88003,88079,88080,88093,88094,88158,88159,88233,88234,88236,88237,88300,88301,88303,88304,88367,88368,88370,88371,88434,88435,88437,88438,88501,88502,88504,88505,88566,88567,88569,88570,88631,88632,88634,88635,88711,88712,88784,88785,88787,88788,88852,88853,88855,88856,88922,88923,88925,88926,88991,88992,88994,88995,89062,89063,89065,89066,89134,89135,89137,89138,89206,89207,89208,89209,89281,89282,89283,89284,89356,89357,89359,89360,89428,89429,89431,89432,89434,89435,89501,89502,89504,89505,89573,89574,89642,89643,89645,89646,89711,89712,89714,89715,89782,89783,89785,89786,89851,89852,89854,89855,89920,89921,89923,89924,89984,89985,89987,89988,90050,90051,90118,90119,90184,90185,90187,90188,90248,90249,90251,90252,90314,90315,90380,90381,90383,90384,90443,90444,90446,90447,90514,90515,90517,90518,95124,95125,95257,95258,95349,95350,95700,95701,95762,95763,95912,95913,95992,95993,96025,96026,96102,96103,96171,96172,96268,96269,96361,96362,96434,96435,96480,96481,96601,96602,96628,96629,96631,96632,96664,96665,96826,96827,96898,96899,96951,96952,97276,97277,97279,97280,97374,97375,97499,97500,97593,97594,97633,97634,97661,97662,97725,97726,97797,97798,97863,97865,97866,97868,97969,97971,97977,97981,98304,98337,98698,98699,98855,98856,99958,99959,100333,100334,100336,100337,100339,100340,100422,100423,100446,100447,100470,100471,101082,101083,101412,101413,101437,101441,101448,101449,101810,101811,102001,102002,102011,102016,102374,102375,102565,102566,102573,102574,102575,102580,102937,102938,103194,103199,103563,103564,103707,103709,103759,103764,104970,104971,104973,104974,105507,105508,105678,105679,106064,106065,107241,107242,107322,107323,108073,108074,108158,108159,108161,108162,108164,108167,108168,108169,108171,108172,108174,108177,108178,108179,108181,108182,108184,108186,108187,108196,108201,108202,108204,108205,108207,108208,108210,108211,108213,108214,108216,108217,108219,108220,108225,108226,108228,108229,108231,108232,108234,108235,108237,108238,108240,108241,108245,108247,108249,108250,108252,108253,108255,108256,113825,116197,116983,117032,119484,119485,120010,120025,120326,120327,126197,126199,128835,128836,130578,130579,131072,131106,134557,134558,134560,134561,141718,141719,142339,142340,143253,143254,146133,146134,147467,147468,151497,153457,153463,156074,157806,157807,159091,159092,159437,159438,159801,159802,161937,161939,163840,163864,164734,164735,165149,165150,165753,165759,166058,166059,173209,173210,173268,173269,173350,173351,174164,176323,177160,177226,179896,179898,180727,180728,190122,190123,191593,191594,192814,192815,192983,193045,196608,196628,198084,198085,202242,202772,204917,204918,205252,205263,205277,205288,205325,205326,205338,205339,223815,223816,225186,225248,229376,229407,234384,234385,234389,234390,237709,237710,240377,240379,242748,242749,242751,242752,242759,242760,242844,242845,243085,243086,246114,246115,246796,246797,246803,246804,248293,248294,249170,249171,254101,254102,262144,262168,263259,263260,267630,267631,267633,267634,269215,269216,269220,269221,276679,276680,276686,276688,276695,276696,282140,282141,282339,282340,282342,282343,282347,282348,282356,282357,282365,282366,282367,282368,282413,282414,282429,282430,282432,282433,282438,282439,282441,282442,282443,282445,282628,282629,284209,284210,284216,284218,284225,284226,284696,360460,360468,361666,362758,368510,368593,368594") && 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"), "282,1,15,3109,3110,3416,3417,3443,3444,6154,6155,9999,10000,10580,10581,12352,12356,12452,12453,15088,15091,15099,15100,15139,15140,23322,23323,31310,31312,31442,31447,32725,32726,32768,32776,34028,34029,34472,34473,35772,35773,36135,36139,36658,36659,36671,36675,36679,36680,38520,38524,38566,38567,39957,39958,49128,49129,53044,53048,53079,53081,53374,53377,57177,57178,65536,65542,67025,67026,76570,76577,78053,78054,83443,83444,94940,94941,95166,95167,95565,95566,96067,96068,96073,96074,96202,96208,96209,96210,96222,96228,96229,96230,98304,98312,104041,104042,105266,105270,106277,106278,107068,107069,109435,109436,122721,122722,122798,122799,124977,124978,131072,131078,141334,141335,141594,141595,141791,141792,143703,143704,151156,151157,152139,152143,157216,157217,162275,162276,162283,162284,162290,162291,163840,163848,166628,166629,166862,166864,166874,166876,166922,166924,166934,166936,166945,166946,168764,168765,168768,168770,168933,168934,168935,168936,168938,168939,168954,168955,168958,168960,168961,168963,168981,168982,168995,168996,169035,169039,169043,169047,169048,169052,169053,169069,169484,169485,169856,169857,171342,171343,172279,172281,180577,180578,182183,182184,184109,184110,186168,186169,190113,190114,192147,192150,192152,192153,193553,193555,194942,194943,196608,196636,202713,202715,204955,204956,205130,205132,205180,205181,205436,205438,213984,213985,218801,218803,218870,218871,219036,219038,220434,220436,220628,220632,220637,220638,220760,220762,222164,222166,226462,226463,226466,226467,229376,229414,237602,237603,238186,238188,239395,239397,240950,240952,251809,251810,262144,262178,277005,277006,277212,277213,277519,277520,277691,277692,277933,277934,278670,278671,279251,279252,279429,279430,280374,280376,280879,280880,281521,281522,284417,284418,285210,285215,290767,290768,294912,294922,298113,302840,302913,302914") == "ad35a2921d2bc80afb539692c25f4f7e1c592b4a" || 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"), "282,1,15,3109,3110,3416,3417,3443,3444,6154,6155,9999,10000,10580,10581,12352,12356,12452,12453,15088,15091,15099,15100,15139,15140,23322,23323,31310,31312,31442,31447,32725,32726,32768,32776,34028,34029,34472,34473,35772,35773,36135,36139,36658,36659,36671,36675,36679,36680,38520,38524,38566,38567,39957,39958,49128,49129,53044,53048,53079,53081,53374,53377,57177,57178,65536,65542,67025,67026,76570,76577,78053,78054,83443,83444,94940,94941,95166,95167,95565,95566,96067,96068,96073,96074,96202,96208,96209,96210,96222,96228,96229,96230,98304,98312,104041,104042,105266,105270,106277,106278,107068,107069,109435,109436,122721,122722,122798,122799,124977,124978,131072,131078,141334,141335,141594,141595,141791,141792,143703,143704,151156,151157,152139,152143,157216,157217,162275,162276,162283,162284,162290,162291,163840,163848,166628,166629,166862,166864,166874,166876,166922,166924,166934,166936,166945,166946,168764,168765,168768,168770,168933,168934,168935,168936,168938,168939,168954,168955,168958,168960,168961,168963,168981,168982,168995,168996,169035,169039,169043,169047,169048,169052,169053,169069,169484,169485,169856,169857,171342,171343,172279,172281,180577,180578,182183,182184,184109,184110,186168,186169,190113,190114,192147,192150,192152,192153,193553,193555,194942,194943,196608,196636,202713,202715,204955,204956,205130,205132,205180,205181,205436,205438,213984,213985,218801,218803,218870,218871,219036,219038,220434,220436,220628,220632,220637,220638,220760,220762,222164,222166,226462,226463,226466,226467,229376,229414,237602,237603,238186,238188,239395,239397,240950,240952,251809,251810,262144,262178,277005,277006,277212,277213,277519,277520,277691,277692,277933,277934,278670,278671,279251,279252,279429,279430,280374,280376,280879,280880,281521,281522,284417,284418,285210,285215,290767,290768,294912,294922,298113,302840,302913,302914") && 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,16,24,25,246,247,249,255,274,275") == "f35e012fbde5b0d8036f9feff389c255b91a62f6" || 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,16,24,25,246,247,249,255,274,275") && 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"), "372,1,30,37,41,45,46,52,58,59,60,74,80,81,82,140,144,149,150,704,706,763,767,782,783,789,795,796,797,991,995,999,1000,1003,1007,1012,1013,1016,1017,1023,1029,1030,1031,1053,1059,1060,1061,1796,1800,1818,1819,1823,1829,1830,1831,1833,1834,1845,1851,1852,1853,1863,1864,1869,1873,1877,1878,1882,1888,1892,1893,1900,1906,1907,1908,1920,1926,1927,1928,1930,1937,1943,1950,1955,1962,1992,1999,2018,2025,2043,2048,2065,2072,2088,2089,2184,2186,2196,2197,2209,2210,2211,2212,2213,2214,2222,2223,2246,2247,2293,2298,2301,2304,2307,2310,2313,2315,2319,2320,2324,2327,2332,2333,2336,2338,2813,2815,2819,2823,2828,2830,2835,2839,2840,2844,2845,2849,2850,2854,2855,2859,2860,2864,2865,2869,2870,2883,2884,2888,2889,2893,2894,2898,2899,2903,2904,2908,2909,2913,2914,2916,2917,2921,2922,2926,2927,2931,2932,2936,2937,2941,2942,2946,2947,2951,2952,2954,2958,2962,2963,2967,2968,2970,2971,2973,2974,2978,2979,2983,2984,2986,2987,2991,2992,2996,2997,3001,3002,3006,3007,3009,3010,3014,3015,3017,3021,3034,3039,3069,3072,3184,3248,3533,5656,5657,6722,6723,8788,8789,8847,8848,9388,9389,9439,9440,9749,9750,14931,14932,15004,15005,15013,15014,15149,15150,15154,15155,15208,15209,15219,15220,15253,15254,15273,15274,15326,15327,15472,15473,15548,15549,15695,15696,20446,20448,20587,20588,20613,20614,20710,20711,20762,20763,20774,20775,20825,20826,20901,20902,20965,20966,21228,21229,21733,21734,25608,25609,25665,25666,26090,26091,32768,32802,34080,34081,35667,35668,40761,40762,41640,41641,41692,41693,42011,42012,44072,44073,49892,49896,51578,51580,51762,51764,51812,51814,53398,53400,61904,61905,61907,61908,61915,61916,61947,61948,62092,62093,62107,62108,62283,62284,62285,62286,62296,62297,62299,62300,62337,62338,62347,62348,62349,62350,62362,62363,62365,62366,62376,62378,62385,62386,62438,62439,62485,62486,62719,62720,62730,62731,63038,63040,63044,63045,63050,63051,63055,63057,63158,63159,63922,63924,65536,65564,69171,69175,69446,98324,98327,113572,113913,115720,115760,115761") == "26d24bc6f5c3bd133d7fce4a0c574bdec675699b" || 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"), "372,1,30,37,41,45,46,52,58,59,60,74,80,81,82,140,144,149,150,704,706,763,767,782,783,789,795,796,797,991,995,999,1000,1003,1007,1012,1013,1016,1017,1023,1029,1030,1031,1053,1059,1060,1061,1796,1800,1818,1819,1823,1829,1830,1831,1833,1834,1845,1851,1852,1853,1863,1864,1869,1873,1877,1878,1882,1888,1892,1893,1900,1906,1907,1908,1920,1926,1927,1928,1930,1937,1943,1950,1955,1962,1992,1999,2018,2025,2043,2048,2065,2072,2088,2089,2184,2186,2196,2197,2209,2210,2211,2212,2213,2214,2222,2223,2246,2247,2293,2298,2301,2304,2307,2310,2313,2315,2319,2320,2324,2327,2332,2333,2336,2338,2813,2815,2819,2823,2828,2830,2835,2839,2840,2844,2845,2849,2850,2854,2855,2859,2860,2864,2865,2869,2870,2883,2884,2888,2889,2893,2894,2898,2899,2903,2904,2908,2909,2913,2914,2916,2917,2921,2922,2926,2927,2931,2932,2936,2937,2941,2942,2946,2947,2951,2952,2954,2958,2962,2963,2967,2968,2970,2971,2973,2974,2978,2979,2983,2984,2986,2987,2991,2992,2996,2997,3001,3002,3006,3007,3009,3010,3014,3015,3017,3021,3034,3039,3069,3072,3184,3248,3533,5656,5657,6722,6723,8788,8789,8847,8848,9388,9389,9439,9440,9749,9750,14931,14932,15004,15005,15013,15014,15149,15150,15154,15155,15208,15209,15219,15220,15253,15254,15273,15274,15326,15327,15472,15473,15548,15549,15695,15696,20446,20448,20587,20588,20613,20614,20710,20711,20762,20763,20774,20775,20825,20826,20901,20902,20965,20966,21228,21229,21733,21734,25608,25609,25665,25666,26090,26091,32768,32802,34080,34081,35667,35668,40761,40762,41640,41641,41692,41693,42011,42012,44072,44073,49892,49896,51578,51580,51762,51764,51812,51814,53398,53400,61904,61905,61907,61908,61915,61916,61947,61948,62092,62093,62107,62108,62283,62284,62285,62286,62296,62297,62299,62300,62337,62338,62347,62348,62349,62350,62362,62363,62365,62366,62376,62378,62385,62386,62438,62439,62485,62486,62719,62720,62730,62731,63038,63040,63044,63045,63050,63051,63055,63057,63158,63159,63922,63924,65536,65564,69171,69175,69446,98324,98327,113572,113913,115720,115760,115761") && 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/abl_ecc.elf", "/dev/block/bootdevice/by-name/abl");
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/km4.mbn", "/dev/block/bootdevice/by-name/keymaster");
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/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfw");
package_extract_file("firmware-update/featenabler.mbn", "/dev/block/bootdevice/by-name/featenabler");
package_extract_file("firmware-update/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
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/abl_ecc.elf", "/dev/block/bootdevice/by-name/ablbak");
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/storsec.mbn", "/dev/block/bootdevice/by-name/storsecbak");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfwbak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
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:d559d4a93a1c6274674c5fa34d9a3a74fd117b01"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:ac16467f8965fc6eac9c301c5e1384be1eca0601"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:ac16467f8965fc6eac9c301c5e1384be1eca0601")));

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