getprop("ro.product.device") == "surya" || abort("E3004: This package is for \"surya\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: POCO/surya_tr/surya:10/QKQ1.200512.002/V12.0.4.0.QJGTRXM:user/release-keys");
ui_print("Target: POCO/surya_tr/surya:10/QKQ1.200512.002/V12.0.5.0.QJGTRXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "POCO/surya_tr/surya:10/QKQ1.200512.002/V12.0.4.0.QJGTRXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "POCO/surya_tr/surya:10/QKQ1.200512.002/V12.0.5.0.QJGTRXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of POCO/surya_tr/surya:10/QKQ1.200512.002/V12.0.4.0.QJGTRXM:user/release-keys or POCO/surya_tr/surya:10/QKQ1.200512.002/V12.0.5.0.QJGTRXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
show_progress(0.100000, 10);
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/boot:134217728:5988144869add6ea72da7f2f4f50a6adb5048dba",
                      "EMMC:/dev/block/bootdevice/by-name/boot:134217728:af880485be50b82fea66d24a42a5f7f7beec313d") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:5988144869add6ea72da7f2f4f50a6adb5048dba\" or \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:af880485be50b82fea66d24a42a5f7f7beec313d\" has unexpected contents.");
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
show_progress(0.100000, 70);
if (range_sha1(map_partition("system"), "980,1,198,226,235,288,289,549,553,565,566,585,586,1903,1904,2333,2334,26238,26239,27606,27607,32768,32770,32932,32952,33018,33019,33233,33235,33395,33397,33407,33408,33416,33418,33425,33426,33646,33647,33659,33661,33667,33668,34897,34901,34935,34936,34942,34944,34949,34950,34955,34957,34962,34963,35083,35087,35095,35096,36652,36653,36718,36719,37244,37246,37277,37278,37348,37350,37443,37445,37451,37452,37483,37485,37490,37491,37590,37592,37597,38965,41757,41759,41789,41790,41804,41806,41811,41812,41814,41815,45063,45065,45112,45113,45483,45485,45495,45496,45583,45587,45594,45595,45723,45725,45733,45734,45996,45997,46189,46191,46208,46209,50826,50828,50924,50925,50930,50932,50937,50938,51625,51627,51651,51652,51710,51711,51782,51784,51790,51791,53074,53076,53103,53104,53575,53577,53582,53583,55345,55347,55392,55393,55397,55399,55404,55405,55427,55429,55455,55456,57148,57150,57176,57177,58023,58025,58050,58051,58134,58136,58143,58144,61451,61453,65239,65240,65536,65556,66205,66206,66830,66832,68996,68997,69316,69318,69333,69334,69366,69368,69392,69393,69843,69845,70250,70251,70934,70936,70954,70955,73340,73342,73391,73392,73788,73790,73805,73806,75606,75607,81142,81144,81229,81230,82157,82159,82186,82187,84247,84248,86844,86845,89234,89236,89356,89357,98304,98306,98468,98488,102049,102051,102076,102077,104470,104472,104524,104525,106280,106282,106318,106319,106357,106361,106367,106368,109709,109710,110246,110248,110288,110289,112899,112900,114101,114103,114128,114129,114493,114497,114513,114514,115629,115631,115659,115660,115673,115675,115680,115681,131072,131092,136322,136323,136795,136796,137668,137670,137902,137903,138291,138295,138311,138312,138322,138324,138333,138334,143085,143086,145921,145923,146008,146009,148568,148570,148612,148613,148664,148666,148672,148673,148676,148680,148686,148687,148692,148694,192007,192008,196519,196522,200409,200411,201178,201180,201181,201182,201266,201267,201269,201270,201273,201275,227132,227133,229376,229378,229540,229575,244424,244425,250502,250503,262144,262167,276382,276383,276659,276660,277056,277057,277134,277135,277136,277137,277762,277763,277764,277765,277766,277767,277768,277769,277770,277771,277772,277773,277774,277775,277776,277777,277779,277780,277781,277782,277783,277784,277785,277786,277787,277788,277789,277790,277791,277792,277793,277794,277795,277796,277797,277798,277799,277800,277801,277802,277803,277804,277805,277806,277807,277808,277809,277810,277811,277812,277813,277814,277815,277816,277817,277818,277820,277821,277822,277823,277824,277825,277826,277827,277828,277829,277830,277831,277832,277833,277834,277835,277836,277837,277838,277839,277842,277843,277844,277845,277846,277847,277848,277849,277850,277851,277852,277853,277854,277855,277856,277857,277858,277859,278038,278039,278084,278085,278128,278129,278130,278131,278200,278201,278226,278228,278253,278254,278364,278365,278596,278597,278665,278667,278678,278679,278680,278681,278719,278721,278732,278733,278734,278735,278747,278748,278759,278760,278773,278775,278786,278787,278788,278789,278795,278796,278972,278973,278996,278997,279075,279076,279077,279078,279101,279102,279103,279104,279115,279116,279316,279318,279792,279793,280493,280494,287990,287991,289161,289663,289735,290015,291619,291620,291653,291654,291807,291808,291812,291813,291925,291926,294912,294914,295076,295100,300123,300124,302012,302013,302017,302018,313548,313549,314381,314382,315644,317124,322448,322449,324180,324181,324576,324577,324728,324731,326784,326785,327680,327709,329979,329980,330297,330298,335796,335797,335892,335893,335897,335898,335946,335947,335996,335997,336053,336054,336056,336057,336313,336314,336418,336419,336469,336470,337181,337182,337187,337188,337222,337223,337227,337228,337255,337256,337280,337281,337284,337285,337298,337299,337312,337313,337326,337327,337336,337337,337346,337347,337498,337499,337504,337505,337509,337510,337516,337517,337542,337543,337546,337547,337614,337615,337620,337621,337627,337628,337633,337634,337640,337641,337651,337652,337661,337662,337667,337668,337711,337712,337717,337718,337749,337750,337760,337761,337767,337768,337830,337831,337835,337836,337845,337846,337852,337853,337860,337861,337864,337865,337868,337869,337874,337875,337880,337881,337886,337887,337893,337894,337970,337971,337977,337978,337983,337984,337988,337989,337994,337995,338029,338030,338035,338036,338044,338045,338054,338055,338060,338061,338070,338071,338078,338079,338083,338084,338089,338090,338117,338118,338123,338124,338136,338137,338208,338209,338214,338215,338229,338230,338244,338245,338260,338261,338276,338277,338292,338293,338325,338326,338331,338332,338425,338426,338458,338459,338515,338516,338652,338653,338658,338659,338664,338665,338670,338671,338675,338676,339620,339621,339630,339631,339671,339672,339700,339701,340377,340378,340396,340397,340401,340402,340433,340434,340604,340605,340610,340611,340681,340682,340683,340684,340688,340689,340730,340731,340733,340734,340738,340739,340747,340748,340761,340762,341258,341259,341260,341261,341277,341278,341282,341283,341288,341289,341324,341325,341573,341574,341610,341611,341620,341621,341626,341627,341632,341633,341638,341639,341652,341653,341658,341659,341698,341699,341783,341784,341800,341801,341987,341988,342183,342184,342279,342280,342286,342287,343322,343323,344342,344343,345440,345441,346194,346195,348949,348950,352084,352086,352351,352352,353742,353744,353851,353852,353853,353854,353862,353863,354163,354164,360448,360468,362618,362619,364710,364711,375249,375250,375591,375654,382146,382147,382461,382462,388559,388560,392783,392784,392786,392787,392900,392901,392904,392905,392906,392907,393216,393243,393301,393302,394560,394576,459789,459802,459807,460722,460821,460854,620218,620220,620225,620226,620237,620239,620243,620244,620246,620248,620251,620252,620768,620769,622463,622465,622474,622475,622479,622481,622486,622487,622548,622550,622556,622557,622561,622563,622592,622609,633331,633332,636481,636483,636575,636576,636649,636651,636750,636751,636755,636757,636762,636763,636853,636855,636861,636862,639647,639649,639698,639699,639714,639716,639721,639722,639879,639881,639890,639891,643619,643620,644419,644420,644946,644948,644989,644990,646611,646613,647794,647795,647951,647953,647959,647960,647968,647970,647975,647976,648018,648020,648025,648026,655360,655361,656818,656820,656902,656903,656931,656935,656941,656942,659103,659105,659146,659147,659920,659922,659949,659950,660037,660039,660047,660048,660357,660359,660374,663775,664114,664115,664120,664121,664140,664141,664195,664197,664206,664208,664317,664321,664322,664325,666359,676918,677063,677064") == "593809c825f9f17ac0058f567835fe0f9693710e" || 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"), "980,1,198,226,235,288,289,549,553,565,566,585,586,1903,1904,2333,2334,26238,26239,27606,27607,32768,32770,32932,32952,33018,33019,33233,33235,33395,33397,33407,33408,33416,33418,33425,33426,33646,33647,33659,33661,33667,33668,34897,34901,34935,34936,34942,34944,34949,34950,34955,34957,34962,34963,35083,35087,35095,35096,36652,36653,36718,36719,37244,37246,37277,37278,37348,37350,37443,37445,37451,37452,37483,37485,37490,37491,37590,37592,37597,38965,41757,41759,41789,41790,41804,41806,41811,41812,41814,41815,45063,45065,45112,45113,45483,45485,45495,45496,45583,45587,45594,45595,45723,45725,45733,45734,45996,45997,46189,46191,46208,46209,50826,50828,50924,50925,50930,50932,50937,50938,51625,51627,51651,51652,51710,51711,51782,51784,51790,51791,53074,53076,53103,53104,53575,53577,53582,53583,55345,55347,55392,55393,55397,55399,55404,55405,55427,55429,55455,55456,57148,57150,57176,57177,58023,58025,58050,58051,58134,58136,58143,58144,61451,61453,65239,65240,65536,65556,66205,66206,66830,66832,68996,68997,69316,69318,69333,69334,69366,69368,69392,69393,69843,69845,70250,70251,70934,70936,70954,70955,73340,73342,73391,73392,73788,73790,73805,73806,75606,75607,81142,81144,81229,81230,82157,82159,82186,82187,84247,84248,86844,86845,89234,89236,89356,89357,98304,98306,98468,98488,102049,102051,102076,102077,104470,104472,104524,104525,106280,106282,106318,106319,106357,106361,106367,106368,109709,109710,110246,110248,110288,110289,112899,112900,114101,114103,114128,114129,114493,114497,114513,114514,115629,115631,115659,115660,115673,115675,115680,115681,131072,131092,136322,136323,136795,136796,137668,137670,137902,137903,138291,138295,138311,138312,138322,138324,138333,138334,143085,143086,145921,145923,146008,146009,148568,148570,148612,148613,148664,148666,148672,148673,148676,148680,148686,148687,148692,148694,192007,192008,196519,196522,200409,200411,201178,201180,201181,201182,201266,201267,201269,201270,201273,201275,227132,227133,229376,229378,229540,229575,244424,244425,250502,250503,262144,262167,276382,276383,276659,276660,277056,277057,277134,277135,277136,277137,277762,277763,277764,277765,277766,277767,277768,277769,277770,277771,277772,277773,277774,277775,277776,277777,277779,277780,277781,277782,277783,277784,277785,277786,277787,277788,277789,277790,277791,277792,277793,277794,277795,277796,277797,277798,277799,277800,277801,277802,277803,277804,277805,277806,277807,277808,277809,277810,277811,277812,277813,277814,277815,277816,277817,277818,277820,277821,277822,277823,277824,277825,277826,277827,277828,277829,277830,277831,277832,277833,277834,277835,277836,277837,277838,277839,277842,277843,277844,277845,277846,277847,277848,277849,277850,277851,277852,277853,277854,277855,277856,277857,277858,277859,278038,278039,278084,278085,278128,278129,278130,278131,278200,278201,278226,278228,278253,278254,278364,278365,278596,278597,278665,278667,278678,278679,278680,278681,278719,278721,278732,278733,278734,278735,278747,278748,278759,278760,278773,278775,278786,278787,278788,278789,278795,278796,278972,278973,278996,278997,279075,279076,279077,279078,279101,279102,279103,279104,279115,279116,279316,279318,279792,279793,280493,280494,287990,287991,289161,289663,289735,290015,291619,291620,291653,291654,291807,291808,291812,291813,291925,291926,294912,294914,295076,295100,300123,300124,302012,302013,302017,302018,313548,313549,314381,314382,315644,317124,322448,322449,324180,324181,324576,324577,324728,324731,326784,326785,327680,327709,329979,329980,330297,330298,335796,335797,335892,335893,335897,335898,335946,335947,335996,335997,336053,336054,336056,336057,336313,336314,336418,336419,336469,336470,337181,337182,337187,337188,337222,337223,337227,337228,337255,337256,337280,337281,337284,337285,337298,337299,337312,337313,337326,337327,337336,337337,337346,337347,337498,337499,337504,337505,337509,337510,337516,337517,337542,337543,337546,337547,337614,337615,337620,337621,337627,337628,337633,337634,337640,337641,337651,337652,337661,337662,337667,337668,337711,337712,337717,337718,337749,337750,337760,337761,337767,337768,337830,337831,337835,337836,337845,337846,337852,337853,337860,337861,337864,337865,337868,337869,337874,337875,337880,337881,337886,337887,337893,337894,337970,337971,337977,337978,337983,337984,337988,337989,337994,337995,338029,338030,338035,338036,338044,338045,338054,338055,338060,338061,338070,338071,338078,338079,338083,338084,338089,338090,338117,338118,338123,338124,338136,338137,338208,338209,338214,338215,338229,338230,338244,338245,338260,338261,338276,338277,338292,338293,338325,338326,338331,338332,338425,338426,338458,338459,338515,338516,338652,338653,338658,338659,338664,338665,338670,338671,338675,338676,339620,339621,339630,339631,339671,339672,339700,339701,340377,340378,340396,340397,340401,340402,340433,340434,340604,340605,340610,340611,340681,340682,340683,340684,340688,340689,340730,340731,340733,340734,340738,340739,340747,340748,340761,340762,341258,341259,341260,341261,341277,341278,341282,341283,341288,341289,341324,341325,341573,341574,341610,341611,341620,341621,341626,341627,341632,341633,341638,341639,341652,341653,341658,341659,341698,341699,341783,341784,341800,341801,341987,341988,342183,342184,342279,342280,342286,342287,343322,343323,344342,344343,345440,345441,346194,346195,348949,348950,352084,352086,352351,352352,353742,353744,353851,353852,353853,353854,353862,353863,354163,354164,360448,360468,362618,362619,364710,364711,375249,375250,375591,375654,382146,382147,382461,382462,388559,388560,392783,392784,392786,392787,392900,392901,392904,392905,392906,392907,393216,393243,393301,393302,394560,394576,459789,459802,459807,460722,460821,460854,620218,620220,620225,620226,620237,620239,620243,620244,620246,620248,620251,620252,620768,620769,622463,622465,622474,622475,622479,622481,622486,622487,622548,622550,622556,622557,622561,622563,622592,622609,633331,633332,636481,636483,636575,636576,636649,636651,636750,636751,636755,636757,636762,636763,636853,636855,636861,636862,639647,639649,639698,639699,639714,639716,639721,639722,639879,639881,639890,639891,643619,643620,644419,644420,644946,644948,644989,644990,646611,646613,647794,647795,647951,647953,647959,647960,647968,647970,647975,647976,648018,648020,648025,648026,655360,655361,656818,656820,656902,656903,656931,656935,656941,656942,659103,659105,659146,659147,659920,659922,659949,659950,660037,660039,660047,660048,660357,660359,660374,663775,664114,664115,664120,664121,664140,664141,664195,664197,664206,664208,664317,664321,664322,664325,666359,676918,677063,677064") && 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"), "438,14391,14397,36232,36291,36292,36294,36296,36356,36357,36359,36360,36421,36422,36424,36425,36485,36486,36488,36489,36556,36557,36625,36626,36693,36694,36760,36761,36763,36764,36827,36828,36894,36895,36897,36898,36959,36960,36962,36963,37027,37028,37030,37031,37093,37094,37096,37097,37161,37162,37164,37165,37226,37227,37229,37230,37294,37295,37297,37298,37362,37363,37365,37366,37430,37431,37433,37434,37498,37499,37501,37502,37569,37570,37571,37572,37638,37639,37640,37641,37646,37647,37707,37708,37774,37775,37777,37778,37841,37842,37908,37909,37911,37912,37973,37974,37976,37977,38041,38042,38044,38045,38107,38108,38110,38111,38175,38176,38178,38179,38240,38241,38243,38244,38308,38309,38311,38312,38376,38377,38379,38380,38444,38445,38447,38448,38512,38513,38515,38516,38583,38584,38585,38586,38652,38653,38654,38655,38660,49689,49691,49696,49698,64803,64804,65536,65575,66130,66131,66150,66151,66154,66156,67698,67699,67701,67702,67704,67705,67741,67744,67753,67754,67755,67756,68185,68186,68209,68210,68212,68213,68872,68874,68977,68978,69876,69877,73163,73164,81297,81298,82039,82040,84215,84216,84219,84220,88519,88520,88522,88523,95364,95365,95826,95827,98304,98306,98373,98408,99961,99962,103887,103888,105297,105298,105761,105762,110355,110356,111544,111546,112260,112261,112274,114633,114637,117761,118213,118215,119677,119678,122438,122439,125012,125034,126917,126918,129881,129882,130433,130434,130474,130475,131072,131095,131246,132812,135974,135979,135983,135988,136118,136119,140887,140888,140911,140912,145468,145469,145874,145936,154141,154142,157175,157176,157179,157181,157182,157183,158141,158142,158144,158145,158281,158282,162249,162250,163800,163801,163803,163804,163840,163842,163909,163941,164041,164042,168941,168942,168944,168945,169081,169082,174310,174840,176985,176986,177320,177331,177345,177356,177393,177394,177406,177407,181515,181577,181579,181580,182315,182316,183328,183329,185628,185629,185946,185947,187712,187713,193524,193525,196608,196635,199197,199198,204437,204438,205144,205145,207889,207890,212273,212275,212276,212277,213849,213850,213856,213858,216428,216429,216435,216437,216444,216445,217072,217073,224032,224033,224035,224036,224043,224044,227225,227226,227229,227230,227233,227234,227238,227240,227253,227254,227256,227257,227327,227328,227338,227340,227348,227350,227480,227481,229376,229378,229445,229468,229550,229551,231040,231041,238292,238293,242771,242773,244283,244284,248771,248772,248774,248775,248782,248783,250337,250338,251240,251241,253527,253528,254189,254190,256616,256617,262144,262165,262267,262268,262273,262274,262280,262281,263421,263422,263446,263447,264310,264311,264487,264488,264717,264718,265053,265054,266707,266708,270190,270192,273996,274002,274005,274006,274030,274031,274051,274053,276541,276543,276551,276553,276565,276566,276592,276623,276629,276640,277637,282040,282109,282110") == "32d367554738199eaae37428a6141e430bd20f39" || 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"), "438,14391,14397,36232,36291,36292,36294,36296,36356,36357,36359,36360,36421,36422,36424,36425,36485,36486,36488,36489,36556,36557,36625,36626,36693,36694,36760,36761,36763,36764,36827,36828,36894,36895,36897,36898,36959,36960,36962,36963,37027,37028,37030,37031,37093,37094,37096,37097,37161,37162,37164,37165,37226,37227,37229,37230,37294,37295,37297,37298,37362,37363,37365,37366,37430,37431,37433,37434,37498,37499,37501,37502,37569,37570,37571,37572,37638,37639,37640,37641,37646,37647,37707,37708,37774,37775,37777,37778,37841,37842,37908,37909,37911,37912,37973,37974,37976,37977,38041,38042,38044,38045,38107,38108,38110,38111,38175,38176,38178,38179,38240,38241,38243,38244,38308,38309,38311,38312,38376,38377,38379,38380,38444,38445,38447,38448,38512,38513,38515,38516,38583,38584,38585,38586,38652,38653,38654,38655,38660,49689,49691,49696,49698,64803,64804,65536,65575,66130,66131,66150,66151,66154,66156,67698,67699,67701,67702,67704,67705,67741,67744,67753,67754,67755,67756,68185,68186,68209,68210,68212,68213,68872,68874,68977,68978,69876,69877,73163,73164,81297,81298,82039,82040,84215,84216,84219,84220,88519,88520,88522,88523,95364,95365,95826,95827,98304,98306,98373,98408,99961,99962,103887,103888,105297,105298,105761,105762,110355,110356,111544,111546,112260,112261,112274,114633,114637,117761,118213,118215,119677,119678,122438,122439,125012,125034,126917,126918,129881,129882,130433,130434,130474,130475,131072,131095,131246,132812,135974,135979,135983,135988,136118,136119,140887,140888,140911,140912,145468,145469,145874,145936,154141,154142,157175,157176,157179,157181,157182,157183,158141,158142,158144,158145,158281,158282,162249,162250,163800,163801,163803,163804,163840,163842,163909,163941,164041,164042,168941,168942,168944,168945,169081,169082,174310,174840,176985,176986,177320,177331,177345,177356,177393,177394,177406,177407,181515,181577,181579,181580,182315,182316,183328,183329,185628,185629,185946,185947,187712,187713,193524,193525,196608,196635,199197,199198,204437,204438,205144,205145,207889,207890,212273,212275,212276,212277,213849,213850,213856,213858,216428,216429,216435,216437,216444,216445,217072,217073,224032,224033,224035,224036,224043,224044,227225,227226,227229,227230,227233,227234,227238,227240,227253,227254,227256,227257,227327,227328,227338,227340,227348,227350,227480,227481,229376,229378,229445,229468,229550,229551,231040,231041,238292,238293,242771,242773,244283,244284,248771,248772,248774,248775,248782,248783,250337,250338,251240,251241,253527,253528,254189,254190,256616,256617,262144,262165,262267,262268,262273,262274,262280,262281,263421,263422,263446,263447,264310,264311,264487,264488,264717,264718,265053,265054,266707,266708,270190,270192,273996,274002,274005,274006,274030,274031,274051,274053,276541,276543,276551,276553,276565,276566,276592,276623,276629,276640,277637,282040,282109,282110") && 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"), "322,1,90,106,108,114,115,4451,4453,5930,5931,6595,6596,6602,6603,6644,6645,6652,6654,6659,6660,7377,7379,7388,7389,7395,7397,7402,7403,7463,7465,7472,7473,10228,10229,13701,13702,14340,14342,15114,15115,17522,17523,17886,17888,18397,18398,18410,18412,18417,18418,25311,25312,25713,25714,32768,32770,32839,32850,32953,32954,40964,40965,42428,42429,53498,53499,55757,55758,56134,56135,56213,56215,59583,59585,65536,65547,67076,67077,67083,67084,67086,67087,67093,67095,67100,67101,67229,67231,67236,67237,67249,67251,67256,67257,67260,67261,67267,67269,67274,67275,67298,67300,67305,67306,68150,68151,81849,81850,81869,81870,83836,83837,97655,97656,97832,97833,98200,98201,98304,98306,98375,98386,99034,99035,105418,105419,110171,110172,112423,112424,112611,112612,112623,112625,112630,112631,112641,112642,112647,112649,112656,112657,112661,112665,112671,112672,112678,112680,112685,112686,112698,112700,112705,112706,112716,112718,112723,112724,112726,112729,112739,112740,114497,114498,114504,114505,114639,114640,115848,115851,115909,115912,115921,115924,115953,115956,115979,115982,116004,116007,116027,116028,116039,116041,116210,116211,116212,116213,116214,116215,116216,116217,116254,116256,116264,116265,116271,116272,116610,116612,116813,116814,116825,116826,116858,116859,116923,116924,117995,117996,121600,121601,131072,131085,144619,144621,148553,148554,152603,152605,154135,154137,154363,154364,156054,156064,159574,159575,163840,163842,163911,163926,164371,164372,164374,164375,167239,167242,170291,170292,177316,177317,178944,178945,179589,179590,183222,183223,185855,185856,190607,190608,196608,196621,196622,196623,207626,207633,207664,207665,207666,207670,207786,207787,207960,207961,208255,208262,208293,208294,208860,208861,208994,208995,210241,210242,210816,210817,210895,210896,223023,223024,229376,229378,229447,229524,233711,233712,233981,233982,236363,236367,259797,259799,262144,262175,270412,270413,270443,270445,270450,270451,273013,273014,273022,273024,273028,273029,273312,273316,273327,273330,273356,273359,273373,273376,276710,276711,284013,288516,288586,288587") == "453180ec0e20e5a902510e4106a8c20cbff6b178" || 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
check_first_block(map_partition("product"));
ifelse (block_image_recover(map_partition("product"), "322,1,90,106,108,114,115,4451,4453,5930,5931,6595,6596,6602,6603,6644,6645,6652,6654,6659,6660,7377,7379,7388,7389,7395,7397,7402,7403,7463,7465,7472,7473,10228,10229,13701,13702,14340,14342,15114,15115,17522,17523,17886,17888,18397,18398,18410,18412,18417,18418,25311,25312,25713,25714,32768,32770,32839,32850,32953,32954,40964,40965,42428,42429,53498,53499,55757,55758,56134,56135,56213,56215,59583,59585,65536,65547,67076,67077,67083,67084,67086,67087,67093,67095,67100,67101,67229,67231,67236,67237,67249,67251,67256,67257,67260,67261,67267,67269,67274,67275,67298,67300,67305,67306,68150,68151,81849,81850,81869,81870,83836,83837,97655,97656,97832,97833,98200,98201,98304,98306,98375,98386,99034,99035,105418,105419,110171,110172,112423,112424,112611,112612,112623,112625,112630,112631,112641,112642,112647,112649,112656,112657,112661,112665,112671,112672,112678,112680,112685,112686,112698,112700,112705,112706,112716,112718,112723,112724,112726,112729,112739,112740,114497,114498,114504,114505,114639,114640,115848,115851,115909,115912,115921,115924,115953,115956,115979,115982,116004,116007,116027,116028,116039,116041,116210,116211,116212,116213,116214,116215,116216,116217,116254,116256,116264,116265,116271,116272,116610,116612,116813,116814,116825,116826,116858,116859,116923,116924,117995,117996,121600,121601,131072,131085,144619,144621,148553,148554,152603,152605,154135,154137,154363,154364,156054,156064,159574,159575,163840,163842,163911,163926,164371,164372,164374,164375,167239,167242,170291,170292,177316,177317,178944,178945,179589,179590,183222,183223,185855,185856,190607,190608,196608,196621,196622,196623,207626,207633,207664,207665,207666,207670,207786,207787,207960,207961,208255,208262,208293,208294,208860,208861,208994,208995,210241,210242,210816,210817,210895,210896,223023,223024,229376,229378,229447,229524,233711,233712,233981,233982,236363,236367,259797,259799,262144,262175,270412,270413,270443,270445,270450,270451,273013,273014,273022,273024,273028,273029,273312,273316,273327,273330,273356,273359,273373,273376,276710,276711,284013,288516,288586,288587") && 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 ----

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

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

ui_print("Patching firmware images...");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");
show_progress(0.600000, 600);

# --- Start patching dynamic partitions ---


# Update dynamic partition metadata

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

# Patch partition product

ui_print("Patching product image after verification.");
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 vendor

ui_print("Patching vendor image after verification.");
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 system

ui_print("Patching system image after verification.");
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.");

# --- End patching dynamic partitions ---

show_progress(0.100000, 2);

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

ui_print("Patching vbmeta dtbo logo binimages...");
package_extract_file("firmware-update/vbmeta_system.img", "/dev/block/bootdevice/by-name/vbmeta_system");
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");
