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_in/surya:10/QKQ1.200512.002/V12.0.1.0.QJGINXM:user/release-keys");
ui_print("Target: POCO/surya_in/surya:10/QKQ1.200512.002/V12.0.2.0.QJGINXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "POCO/surya_in/surya:10/QKQ1.200512.002/V12.0.1.0.QJGINXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "POCO/surya_in/surya:10/QKQ1.200512.002/V12.0.2.0.QJGINXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of POCO/surya_in/surya:10/QKQ1.200512.002/V12.0.1.0.QJGINXM:user/release-keys or POCO/surya_in/surya:10/QKQ1.200512.002/V12.0.2.0.QJGINXM: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:cd53cfd69b7ba182019157a92d1a5dc73e79871c",
                      "EMMC:/dev/block/bootdevice/by-name/boot:134217728:b599216b52a4a1f2741c1accc25870e4ca00b680") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:cd53cfd69b7ba182019157a92d1a5dc73e79871c\" or \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:b599216b52a4a1f2741c1accc25870e4ca00b680\" 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"), "950,1,189,217,226,279,280,540,544,556,557,576,577,1894,1895,2324,2325,26229,26230,27597,27598,32768,32770,32923,32943,33000,33001,33215,33217,33377,33379,33389,33390,33398,33400,33407,33408,33627,33628,33640,33642,33648,33649,34872,34876,34910,34911,34917,34919,34924,34925,34930,34932,34937,34938,35057,35061,35069,35070,36626,36627,36692,36693,37218,37220,37251,37252,37322,37324,37417,37419,37425,37426,37457,37459,37464,37465,37564,37566,37571,38937,41216,41218,41247,41248,41261,41263,41268,41269,41271,41272,44552,44554,44597,44598,44968,44970,44980,44981,45068,45072,45079,45080,45208,45210,45218,45219,45481,45482,45674,45676,45693,45694,50311,50313,50409,50410,50415,50417,50422,50423,51110,51112,51136,51137,51195,51196,51267,51269,51275,51276,52559,52561,52588,52589,65470,65471,65536,65556,66184,66186,66279,66280,66730,66732,66737,66738,68500,68502,68547,68548,68552,68554,68559,68560,68582,68584,68610,68611,70303,70305,70331,70332,71177,71179,71204,71205,71288,71290,71297,71298,74605,74607,78393,78394,79963,79965,82129,82130,82449,82451,82466,82467,82499,82501,82525,82526,82976,82978,83383,83384,84067,84069,84087,84088,86473,86475,86524,86525,86919,86921,86936,86937,88737,88738,92378,92380,92449,92450,93376,93378,93405,93406,95466,95467,98063,98064,98304,98306,98459,98479,100207,100208,100212,100213,100676,100678,100798,100799,113307,113309,113334,113335,115728,115730,115782,115783,117534,117536,117572,117573,117611,117615,117621,117622,120953,120954,121485,121487,121527,121528,124138,124139,125333,125335,125360,125361,125725,125729,125745,125746,126861,126863,126891,126892,126905,126907,126912,126913,127301,127305,127321,127322,127332,127334,127343,127344,131072,131092,132115,132116,134951,134953,135038,135039,137598,137600,137642,137643,137694,137696,137702,137703,137706,137710,137716,137717,137722,137724,137729,137730,141603,141605,141673,141674,141758,141760,141767,141768,141770,141772,180383,180384,184895,184898,196662,196665,216091,216092,229376,229378,229531,229566,233371,233372,239449,239450,262144,262167,265376,265377,265536,265537,265696,265698,266169,266170,266171,266173,266359,266360,266380,266381,266404,266405,266425,266426,266448,266449,266911,266912,267079,267080,267217,267218,267231,267232,267243,267244,267245,267246,267258,267259,267469,267470,267472,267473,267474,267475,267476,267477,267478,267479,267480,267481,267482,267483,267484,267485,267486,267487,267488,267489,267490,267491,267492,267493,267494,267495,267496,267497,267498,267499,267500,267501,267502,267503,267504,267505,267506,267507,267508,267509,267510,267511,267513,267514,267515,267516,267517,267518,267519,267520,267521,267522,267523,267524,267525,267526,267527,267528,267529,267530,267531,267532,267535,267536,267537,267538,267539,267540,267541,267542,267543,267544,267545,267546,267547,267548,267549,267550,267551,267552,267553,267554,267555,267556,267557,267558,267559,267560,267561,267562,267563,267564,267565,267566,267567,267568,267569,267570,267571,267572,267607,267608,267794,267795,267993,267994,267998,267999,268050,268051,268052,268053,268064,268065,268076,268077,268078,268079,268090,268091,268102,268103,268217,268219,268260,268261,268785,268786,268898,268899,276984,276985,278154,278655,278727,279007,280611,280612,280645,280646,280799,280800,280804,280805,280917,280918,288921,288922,290811,290812,290816,290817,294912,294914,295067,295091,302523,302524,303356,303357,304620,306100,311424,311425,313155,313156,313551,313552,313703,313706,315759,315760,318929,318930,319247,319248,324746,324747,324842,324843,324847,324848,324896,324897,324946,324947,325003,325004,325006,325007,325263,325264,325368,325369,325419,325420,326131,326132,326137,326138,326172,326173,326177,326178,326205,326206,326230,326231,326234,326235,326248,326249,326262,326263,326276,326277,326286,326287,326296,326297,326448,326449,326454,326455,326459,326460,326466,326467,326492,326493,326496,326497,326564,326565,326570,326571,326577,326578,326583,326584,326590,326591,326601,326602,326611,326612,326617,326618,326661,326662,326667,326668,326699,326700,326710,326711,326717,326718,326780,326781,326785,326786,326795,326796,326802,326803,326810,326811,326814,326815,326818,326819,326824,326825,326830,326831,326836,326837,326843,326844,326920,326921,326927,326928,326933,326934,326938,326939,326944,326945,326979,326980,326985,326986,326994,326995,327004,327005,327010,327011,327020,327021,327028,327029,327033,327034,327039,327040,327067,327068,327073,327074,327086,327087,327158,327159,327164,327165,327179,327180,327194,327195,327210,327211,327226,327227,327242,327243,327275,327276,327281,327282,327375,327376,327408,327409,327465,327466,327602,327603,327608,327609,327614,327615,327620,327621,327625,327626,327680,327709,328599,328600,328609,328610,328650,328651,328679,328680,329356,329357,329375,329376,329380,329381,329412,329413,329583,329584,329589,329590,329660,329661,329662,329663,329667,329668,329709,329710,329712,329713,329717,329718,329726,329727,329740,329741,330237,330238,330239,330240,330256,330257,330261,330262,330267,330268,330303,330304,330552,330553,330589,330590,330599,330600,330605,330606,330611,330612,330617,330618,330631,330632,330637,330638,330677,330678,330762,330763,330779,330780,330966,330967,331162,331163,331258,331259,331265,331266,332301,332302,333321,333322,334419,334420,335173,335174,337928,337929,341063,341065,341330,341331,342721,342723,342830,342831,342832,342833,342841,342842,343142,343143,351577,351578,353669,353670,360448,360468,364236,364237,364578,364641,371133,371134,371448,371449,377546,377547,381770,381771,381773,381774,381887,381888,381891,381892,381893,381894,382261,382262,383520,383572,448790,448803,448808,449723,449822,449855,589954,589959,597271,597272,597546,597549,597562,597565,597579,597581,597583,597585,597599,597602,597603,597606,597607,597609,597627,597630,597750,597752,597753,597756,597757,597760,597848,597851,597852,597855,597880,597883,597967,597970,600298,600300,600392,600393,600466,600468,600567,600568,600572,600574,600579,600580,600669,600671,600677,600678,603463,603465,603514,603515,603530,603532,603537,603538,603695,603697,608223,608224,622592,622610,622612,622636,622888,622890,622931,622932,623705,623707,623734,623735,623822,623824,623832,623833,624142,624144,624159,627562,627901,627902,627907,627908,627927,627928,627982,627984,627993,627995,628104,628108,628109,628112,630059,640043,640181,640182") == "c63d76c788f2b0fb631ca623a7321c66559a6a85" || 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"), "950,1,189,217,226,279,280,540,544,556,557,576,577,1894,1895,2324,2325,26229,26230,27597,27598,32768,32770,32923,32943,33000,33001,33215,33217,33377,33379,33389,33390,33398,33400,33407,33408,33627,33628,33640,33642,33648,33649,34872,34876,34910,34911,34917,34919,34924,34925,34930,34932,34937,34938,35057,35061,35069,35070,36626,36627,36692,36693,37218,37220,37251,37252,37322,37324,37417,37419,37425,37426,37457,37459,37464,37465,37564,37566,37571,38937,41216,41218,41247,41248,41261,41263,41268,41269,41271,41272,44552,44554,44597,44598,44968,44970,44980,44981,45068,45072,45079,45080,45208,45210,45218,45219,45481,45482,45674,45676,45693,45694,50311,50313,50409,50410,50415,50417,50422,50423,51110,51112,51136,51137,51195,51196,51267,51269,51275,51276,52559,52561,52588,52589,65470,65471,65536,65556,66184,66186,66279,66280,66730,66732,66737,66738,68500,68502,68547,68548,68552,68554,68559,68560,68582,68584,68610,68611,70303,70305,70331,70332,71177,71179,71204,71205,71288,71290,71297,71298,74605,74607,78393,78394,79963,79965,82129,82130,82449,82451,82466,82467,82499,82501,82525,82526,82976,82978,83383,83384,84067,84069,84087,84088,86473,86475,86524,86525,86919,86921,86936,86937,88737,88738,92378,92380,92449,92450,93376,93378,93405,93406,95466,95467,98063,98064,98304,98306,98459,98479,100207,100208,100212,100213,100676,100678,100798,100799,113307,113309,113334,113335,115728,115730,115782,115783,117534,117536,117572,117573,117611,117615,117621,117622,120953,120954,121485,121487,121527,121528,124138,124139,125333,125335,125360,125361,125725,125729,125745,125746,126861,126863,126891,126892,126905,126907,126912,126913,127301,127305,127321,127322,127332,127334,127343,127344,131072,131092,132115,132116,134951,134953,135038,135039,137598,137600,137642,137643,137694,137696,137702,137703,137706,137710,137716,137717,137722,137724,137729,137730,141603,141605,141673,141674,141758,141760,141767,141768,141770,141772,180383,180384,184895,184898,196662,196665,216091,216092,229376,229378,229531,229566,233371,233372,239449,239450,262144,262167,265376,265377,265536,265537,265696,265698,266169,266170,266171,266173,266359,266360,266380,266381,266404,266405,266425,266426,266448,266449,266911,266912,267079,267080,267217,267218,267231,267232,267243,267244,267245,267246,267258,267259,267469,267470,267472,267473,267474,267475,267476,267477,267478,267479,267480,267481,267482,267483,267484,267485,267486,267487,267488,267489,267490,267491,267492,267493,267494,267495,267496,267497,267498,267499,267500,267501,267502,267503,267504,267505,267506,267507,267508,267509,267510,267511,267513,267514,267515,267516,267517,267518,267519,267520,267521,267522,267523,267524,267525,267526,267527,267528,267529,267530,267531,267532,267535,267536,267537,267538,267539,267540,267541,267542,267543,267544,267545,267546,267547,267548,267549,267550,267551,267552,267553,267554,267555,267556,267557,267558,267559,267560,267561,267562,267563,267564,267565,267566,267567,267568,267569,267570,267571,267572,267607,267608,267794,267795,267993,267994,267998,267999,268050,268051,268052,268053,268064,268065,268076,268077,268078,268079,268090,268091,268102,268103,268217,268219,268260,268261,268785,268786,268898,268899,276984,276985,278154,278655,278727,279007,280611,280612,280645,280646,280799,280800,280804,280805,280917,280918,288921,288922,290811,290812,290816,290817,294912,294914,295067,295091,302523,302524,303356,303357,304620,306100,311424,311425,313155,313156,313551,313552,313703,313706,315759,315760,318929,318930,319247,319248,324746,324747,324842,324843,324847,324848,324896,324897,324946,324947,325003,325004,325006,325007,325263,325264,325368,325369,325419,325420,326131,326132,326137,326138,326172,326173,326177,326178,326205,326206,326230,326231,326234,326235,326248,326249,326262,326263,326276,326277,326286,326287,326296,326297,326448,326449,326454,326455,326459,326460,326466,326467,326492,326493,326496,326497,326564,326565,326570,326571,326577,326578,326583,326584,326590,326591,326601,326602,326611,326612,326617,326618,326661,326662,326667,326668,326699,326700,326710,326711,326717,326718,326780,326781,326785,326786,326795,326796,326802,326803,326810,326811,326814,326815,326818,326819,326824,326825,326830,326831,326836,326837,326843,326844,326920,326921,326927,326928,326933,326934,326938,326939,326944,326945,326979,326980,326985,326986,326994,326995,327004,327005,327010,327011,327020,327021,327028,327029,327033,327034,327039,327040,327067,327068,327073,327074,327086,327087,327158,327159,327164,327165,327179,327180,327194,327195,327210,327211,327226,327227,327242,327243,327275,327276,327281,327282,327375,327376,327408,327409,327465,327466,327602,327603,327608,327609,327614,327615,327620,327621,327625,327626,327680,327709,328599,328600,328609,328610,328650,328651,328679,328680,329356,329357,329375,329376,329380,329381,329412,329413,329583,329584,329589,329590,329660,329661,329662,329663,329667,329668,329709,329710,329712,329713,329717,329718,329726,329727,329740,329741,330237,330238,330239,330240,330256,330257,330261,330262,330267,330268,330303,330304,330552,330553,330589,330590,330599,330600,330605,330606,330611,330612,330617,330618,330631,330632,330637,330638,330677,330678,330762,330763,330779,330780,330966,330967,331162,331163,331258,331259,331265,331266,332301,332302,333321,333322,334419,334420,335173,335174,337928,337929,341063,341065,341330,341331,342721,342723,342830,342831,342832,342833,342841,342842,343142,343143,351577,351578,353669,353670,360448,360468,364236,364237,364578,364641,371133,371134,371448,371449,377546,377547,381770,381771,381773,381774,381887,381888,381891,381892,381893,381894,382261,382262,383520,383572,448790,448803,448808,449723,449822,449855,589954,589959,597271,597272,597546,597549,597562,597565,597579,597581,597583,597585,597599,597602,597603,597606,597607,597609,597627,597630,597750,597752,597753,597756,597757,597760,597848,597851,597852,597855,597880,597883,597967,597970,600298,600300,600392,600393,600466,600468,600567,600568,600572,600574,600579,600580,600669,600671,600677,600678,603463,603465,603514,603515,603530,603532,603537,603538,603695,603697,608223,608224,622592,622610,622612,622636,622888,622890,622931,622932,623705,623707,623734,623735,623822,623824,623832,623833,624142,624144,624159,627562,627901,627902,627907,627908,627927,627928,627982,627984,627993,627995,628104,628108,628109,628112,630059,640043,640181,640182") && 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"), "590,1,100,110,112,119,120,201,203,210,211,216,217,480,482,488,489,491,492,494,505,517,519,525,526,529,531,536,537,545,547,553,554,1579,1580,12263,12264,12917,12918,12922,12924,12943,12944,12948,12949,12954,12955,12956,12957,12960,12961,12962,12963,12966,12967,12968,12969,12972,12973,12974,12975,12978,12979,12980,12981,12984,12985,12986,12987,12991,12992,12997,12998,13002,13003,13007,13008,13012,13013,13486,13487,14391,14397,23882,23883,24165,24166,26974,26975,32118,32119,32768,32770,32837,32874,33063,33064,33068,33070,33087,33088,33123,33124,33133,33134,33136,33137,33189,33190,33240,33241,33247,33248,33273,33274,33424,33425,33823,33824,33826,33828,33892,33893,33963,33964,34031,34032,34034,34035,34037,34038,34097,34099,34101,34102,34166,34167,34237,34238,34305,34306,34308,34309,34311,34314,34315,34316,34378,34379,34445,34446,34448,34449,34452,34456,34458,34459,34461,34463,34524,34525,34527,34529,34589,34590,34592,34593,34654,34655,34657,34658,34718,34719,34721,34722,34786,34787,34855,34856,34923,34924,34990,34991,34993,34994,35057,35058,35124,35125,35127,35128,35189,35190,35192,35193,35257,35258,35260,35261,35323,35324,35326,35327,35391,35392,35394,35395,35456,35457,35459,35460,35524,35525,35527,35528,35592,35593,35595,35596,35660,35661,35663,35664,35728,35729,35731,35732,35799,35800,35801,35802,35868,35869,35870,35871,35876,35877,35937,35938,36004,36005,36007,36008,36071,36072,36138,36139,36141,36142,36203,36204,36206,36207,36271,36272,36274,36275,36337,36338,36340,36341,36405,36406,36408,36409,36470,36471,36473,36474,36538,36539,36541,36542,36606,36607,36609,36610,36674,36675,36677,36678,36742,36743,36745,36746,36813,36814,36815,36816,36882,36883,36884,36885,36950,36951,37023,37024,37026,37027,37089,37090,37160,37161,37169,37173,37174,37175,37374,37375,37441,37442,37444,37445,37448,37453,44873,44874,45038,45039,45348,45349,45410,45411,45560,45561,45640,45641,45673,45674,45750,45751,45818,45819,45891,45892,45984,45985,46057,46058,46103,46104,46208,46209,46252,46253,46255,46256,46288,46289,46450,46451,46522,46523,46575,46576,46900,46901,46903,46904,46998,46999,47123,47124,47198,47199,47232,47233,47296,47297,47368,47369,47918,47920,47925,47927,47995,47996,48048,48049,48576,48577,48925,48926,49184,49185,49964,49965,51506,51507,51635,51636,52528,52531,52624,52625,53501,53502,54736,54738,54739,54740,54747,54748,55580,55581,55583,55585,55785,55786,55789,55790,56274,56275,56282,56286,56303,56304,56305,56306,56343,56344,56346,56349,57038,57041,57854,57855,57856,57858,57860,57861,57863,57864,58861,58862,58864,58865,58979,58980,58982,58985,59183,59184,59186,59187,59190,59191,59352,59353,59729,59730,59732,59733,59734,59736,59737,59739,59742,59743,61112,61113,61173,61174,61268,61269,61495,61496,61683,61684,62567,62574,62579,62580,62581,62588,62591,62592,62594,62595,62597,62598,62600,62601,62603,62604,62606,62612,62613,62617,62623,62624,62626,62627,62633,62634,62644,62645,64361,64362,64365,64366,64368,64370,64495,64500,65184,65207,65208,65231,65232,65238,65244,65245,65247,65248,65258,65259,65372,65373,65375,65376,65380,65381,65383,65384,65386,65390,65391,65392,65516,65517,65519,65524,65536,65575,67084,67086,67175,67176,68098,68099,68102,68103,71364,71365,79498,79499,80240,80241,82416,82417,82420,82421,86720,86721,86723,86724,93565,93566,94027,94028,98058,98059,98304,98306,98373,98408,102088,102089,103498,103499,103962,103963,108556,108557,109745,109747,110461,110462,110475,163842,163909,229378,229445,262165,262167,274836,275821,280193,280263,280264") == "6bcd75078c59202fa4b099da49d02fece005f238" || 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"), "590,1,100,110,112,119,120,201,203,210,211,216,217,480,482,488,489,491,492,494,505,517,519,525,526,529,531,536,537,545,547,553,554,1579,1580,12263,12264,12917,12918,12922,12924,12943,12944,12948,12949,12954,12955,12956,12957,12960,12961,12962,12963,12966,12967,12968,12969,12972,12973,12974,12975,12978,12979,12980,12981,12984,12985,12986,12987,12991,12992,12997,12998,13002,13003,13007,13008,13012,13013,13486,13487,14391,14397,23882,23883,24165,24166,26974,26975,32118,32119,32768,32770,32837,32874,33063,33064,33068,33070,33087,33088,33123,33124,33133,33134,33136,33137,33189,33190,33240,33241,33247,33248,33273,33274,33424,33425,33823,33824,33826,33828,33892,33893,33963,33964,34031,34032,34034,34035,34037,34038,34097,34099,34101,34102,34166,34167,34237,34238,34305,34306,34308,34309,34311,34314,34315,34316,34378,34379,34445,34446,34448,34449,34452,34456,34458,34459,34461,34463,34524,34525,34527,34529,34589,34590,34592,34593,34654,34655,34657,34658,34718,34719,34721,34722,34786,34787,34855,34856,34923,34924,34990,34991,34993,34994,35057,35058,35124,35125,35127,35128,35189,35190,35192,35193,35257,35258,35260,35261,35323,35324,35326,35327,35391,35392,35394,35395,35456,35457,35459,35460,35524,35525,35527,35528,35592,35593,35595,35596,35660,35661,35663,35664,35728,35729,35731,35732,35799,35800,35801,35802,35868,35869,35870,35871,35876,35877,35937,35938,36004,36005,36007,36008,36071,36072,36138,36139,36141,36142,36203,36204,36206,36207,36271,36272,36274,36275,36337,36338,36340,36341,36405,36406,36408,36409,36470,36471,36473,36474,36538,36539,36541,36542,36606,36607,36609,36610,36674,36675,36677,36678,36742,36743,36745,36746,36813,36814,36815,36816,36882,36883,36884,36885,36950,36951,37023,37024,37026,37027,37089,37090,37160,37161,37169,37173,37174,37175,37374,37375,37441,37442,37444,37445,37448,37453,44873,44874,45038,45039,45348,45349,45410,45411,45560,45561,45640,45641,45673,45674,45750,45751,45818,45819,45891,45892,45984,45985,46057,46058,46103,46104,46208,46209,46252,46253,46255,46256,46288,46289,46450,46451,46522,46523,46575,46576,46900,46901,46903,46904,46998,46999,47123,47124,47198,47199,47232,47233,47296,47297,47368,47369,47918,47920,47925,47927,47995,47996,48048,48049,48576,48577,48925,48926,49184,49185,49964,49965,51506,51507,51635,51636,52528,52531,52624,52625,53501,53502,54736,54738,54739,54740,54747,54748,55580,55581,55583,55585,55785,55786,55789,55790,56274,56275,56282,56286,56303,56304,56305,56306,56343,56344,56346,56349,57038,57041,57854,57855,57856,57858,57860,57861,57863,57864,58861,58862,58864,58865,58979,58980,58982,58985,59183,59184,59186,59187,59190,59191,59352,59353,59729,59730,59732,59733,59734,59736,59737,59739,59742,59743,61112,61113,61173,61174,61268,61269,61495,61496,61683,61684,62567,62574,62579,62580,62581,62588,62591,62592,62594,62595,62597,62598,62600,62601,62603,62604,62606,62612,62613,62617,62623,62624,62626,62627,62633,62634,62644,62645,64361,64362,64365,64366,64368,64370,64495,64500,65184,65207,65208,65231,65232,65238,65244,65245,65247,65248,65258,65259,65372,65373,65375,65376,65380,65381,65383,65384,65386,65390,65391,65392,65516,65517,65519,65524,65536,65575,67084,67086,67175,67176,68098,68099,68102,68103,71364,71365,79498,79499,80240,80241,82416,82417,82420,82421,86720,86721,86723,86724,93565,93566,94027,94028,98058,98059,98304,98306,98373,98408,102088,102089,103498,103499,103962,103963,108556,108557,109745,109747,110461,110462,110475,163842,163909,229378,229445,262165,262167,274836,275821,280193,280263,280264") && 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"), "14,126625,126626,281069,281071,281097,281100,281114,281117,284451,284452,291845,296472,296545,296546") == "b482f9bc4a6ce95006ddd3288c2b466beed69fa2" || 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"), "14,126625,126626,281069,281071,281097,281100,281114,281117,284451,284452,291845,296472,296545,296546") && 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:cd53cfd69b7ba182019157a92d1a5dc73e79871c",
                "EMMC:/dev/block/bootdevice/by-name/boot:134217728:b599216b52a4a1f2741c1accc25870e4ca00b680",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:134217728:b599216b52a4a1f2741c1accc25870e4ca00b680");

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


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

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