getprop("ro.product.device") == "cepheus" || abort("E3004: This package is for \"cepheus\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/cepheus/cepheus:10/QKQ1.190825.002/V12.0.4.0.QFAMIXM:user/release-keys");
ui_print("Target: Xiaomi/cepheus/cepheus:10/QKQ1.190825.002/V12.0.5.0.QFAMIXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/cepheus/cepheus:10/QKQ1.190825.002/V12.0.4.0.QFAMIXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/cepheus/cepheus:10/QKQ1.190825.002/V12.0.5.0.QFAMIXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/cepheus/cepheus:10/QKQ1.190825.002/V12.0.4.0.QFAMIXM:user/release-keys or Xiaomi/cepheus/cepheus:10/QKQ1.190825.002/V12.0.5.0.QFAMIXM: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:50dacad6f389ca376ff4322cb97445d91919b122",
                      "EMMC:/dev/block/bootdevice/by-name/boot:134217728:957906c1f736c1acb6055d745a5fab0a87bfafd6") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:50dacad6f389ca376ff4322cb97445d91919b122\" or \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:957906c1f736c1acb6055d745a5fab0a87bfafd6\" 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("/dev/block/bootdevice/by-name/system", "1604,1,620,728,742,775,782,784,785,1031,1036,1038,1039,1145,1146,1631,1632,2320,2321,2323,2325,2326,2327,2342,2343,2524,2525,3696,3697,3699,3700,3704,3705,3713,3714,3715,3716,5819,5936,9073,9074,9076,9077,9481,9482,9484,9485,10481,10483,16422,16423,16556,16557,19326,19328,25594,25596,32768,32770,32990,32991,34762,34763,34765,34767,34826,34827,34960,34962,35015,35016,35030,35031,35043,35691,35697,35698,35703,35704,35823,35826,37440,37441,39652,39653,39684,39685,39924,39925,40024,41436,43749,43750,43763,43764,43769,43770,43772,43773,46894,46895,47265,47266,47353,47354,47437,47438,50123,50124,50127,50128,50376,50377,50837,50838,51744,51745,51749,51750,51772,51773,52993,52994,53408,53409,53445,53446,53498,53499,53686,53687,54989,54990,55128,55129,55161,55162,55612,55613,56296,56297,56305,56306,57659,57660,57836,57837,59019,59020,62899,62900,63385,63386,65536,65537,66635,66636,66708,66709,66728,66731,70045,70046,72669,72670,73460,73461,73609,73610,73790,73791,74450,74451,75160,75161,75165,75166,89208,89209,89419,89422,89432,89433,95030,95031,96748,96749,96800,96801,96804,96807,98304,98306,98526,98527,99392,99393,99477,99478,99480,99481,99502,99503,100449,100452,100852,100855,101021,101022,101061,101062,103062,103063,103113,103114,103464,103465,103486,103487,103492,103493,103566,103567,104435,104436,108944,108945,108950,108951,109348,109349,110834,110835,112611,112612,113060,113061,113065,113066,113078,113079,113083,113084,113095,113096,113119,113120,115083,115084,115086,115087,115241,115242,115612,115615,115618,115619,116537,116538,117107,117108,121356,121359,123658,123659,124008,124009,126638,126639,126651,126652,126991,126992,129343,129344,129777,129778,131072,131073,132019,132020,133410,133462,134570,134574,134888,134889,134901,134902,134912,134915,134916,134917,134918,134919,134921,134922,134923,134924,134990,134991,134997,134998,135086,135087,135091,135092,135093,135095,135118,135119,135188,135189,135192,135197,135198,135199,135200,135201,135202,135203,136133,136134,136141,136142,136695,136697,137250,137252,137253,137254,137255,137256,137257,137258,137259,137260,137261,137262,137263,137264,137266,137267,137268,137271,138128,138130,138131,138132,138215,138216,138218,138219,138222,138224,138482,138483,138490,138492,138981,138983,139092,139093,139123,139124,139135,139136,139402,139403,139516,139517,139533,139535,139537,139538,148472,148473,156395,156396,158344,158345,158623,163842,164062,164063,164568,196609,197114,201969,202248,204852,207880,207890,208949,208950,218777,226311,226614,227117,227152,227434,227448,227452,227456,227457,227461,227464,227469,227470,227474,227476,227491,227492,227497,229378,229598,229599,230104,236079,237750,237752,238034,241543,243749,243750,248162,248163,248537,248538,248854,248855,248870,248871,248899,248900,248943,248944,250068,250188,250268,250280,251352,252833,256022,256119,257290,257332,262144,262145,265195,265196,268818,269129,272280,272282,276186,276188,276384,276385,280018,280019,285482,285483,285879,285880,286054,286055,287346,287347,292045,292046,294423,294424,294784,294785,294805,294806,294840,294841,294911,294914,295134,295135,297681,297682,306307,306467,306574,306589,310620,310621,314886,314887,325750,325867,327680,327681,336791,336792,360448,360449,365180,365182,367360,367361,384098,384099,391080,391081,393216,393217,395195,395628,407210,407211,412101,412102,419441,419442,419996,419997,420216,420217,421974,421977,423852,423853,424066,424067,425984,425985,428839,428840,429590,429594,429613,429614,429617,429618,429641,429642,429713,429714,429728,429729,429738,429739,429748,429749,429762,429763,429784,429785,429830,429832,429833,429834,429835,429836,429837,429838,429839,429840,429842,429843,429847,429848,429849,429850,429852,429853,429854,429855,429856,429857,429859,429860,429861,429862,429863,429864,429865,429866,429867,429868,429869,429870,429871,429872,429873,429874,429875,429876,429878,429879,429881,429882,429883,429886,429888,429890,429898,429899,429905,429907,429913,429914,429920,429921,429925,429926,431035,431036,431141,431143,431153,431155,431173,431175,431215,431216,431218,431233,431238,446801,446940,446973,446974,446976,446996,446997,447003,447004,447010,447011,447016,447017,447031,447032,447038,447039,447042,447043,447048,447049,447056,447057,447059,447060,447064,447065,447069,447070,447081,447082,447096,447097,447121,447122,447125,447126,447186,447187,447207,447208,447228,447229,447265,447266,447295,447296,447307,447308,447323,447324,447329,447330,447332,447333,447337,447338,447344,447345,447350,447351,447355,447356,447362,447363,447368,447369,447374,447375,447379,447380,447383,447384,447392,447393,447397,447398,447409,447410,447415,447416,447421,447422,447427,447428,447430,447431,447437,447438,447440,447441,447446,447447,447455,447456,447477,447478,447485,447486,447489,447490,447492,447493,447497,447498,447500,447501,447516,447517,447520,447521,447523,447524,447528,447529,447534,447535,447547,447548,447551,447552,447554,447555,447558,447559,447561,447562,447564,447565,447567,447568,447570,447571,447573,447574,447576,447577,447580,447581,447583,447584,447587,447588,447590,447591,447593,447594,447596,447597,447599,447600,447604,447605,447607,447608,447610,447611,447614,447615,447617,447618,447621,447622,447624,447625,447627,447628,447632,447634,447639,447640,447643,447644,447647,447648,447651,447652,447655,447656,447658,447659,447662,447663,447666,447667,447671,447672,447675,447676,447684,447685,447699,447700,447704,447705,447707,447708,447714,447715,447725,447726,447733,447734,447737,447738,447744,447745,447757,447758,447764,447765,447769,447770,447787,447788,447790,447791,447796,447797,447804,447805,447807,447808,447811,447812,447817,447818,447823,447824,447830,447831,447842,447843,447845,447846,447851,447852,447861,447862,447872,447873,447881,447882,447886,447887,447901,447902,447905,447906,447923,447924,447927,447928,447933,447934,447938,447939,447943,447944,447948,447949,447966,447967,448014,448015,448029,448030,448063,448064,448076,448077,448104,448105,448110,448111,448125,448126,448137,448138,448140,448141,448143,448144,448149,448150,448157,448158,448160,448161,448163,448164,448173,448174,448188,448189,448193,448194,448198,448199,448203,448204,448208,448209,448224,448225,448227,448228,448233,448234,448237,448238,448242,448243,448249,448250,448257,448258,448263,448264,448268,448269,448274,448275,448279,448280,448284,448285,448293,448294,448304,448305,448314,448315,448321,448322,448330,448331,448337,448338,448346,448347,448350,448351,448353,448354,448362,448363,448370,448371,448383,448384,448396,448397,448400,448401,448407,448408,448414,448415,448419,448420,448433,448434,448445,448446,448454,448455,448466,448467,448469,448470,448478,448479,448484,448485,448487,448488,448495,448496,448509,448510,448515,448516,448520,448521,448527,448528,448535,448536,448541,448543,448547,448548,448553,448554,448559,448560,448577,448578,448581,448582,448587,448588,448595,448596,448610,448611,448613,448614,448622,448623,448628,448629,448631,448632,448634,448635,448645,448646,448651,448652,448657,448658,448672,448673,448688,448689,448695,448696,448700,448701,448719,448720,448738,448739,448744,448745,448751,448752,448754,448755,448757,448758,448763,448764,448816,448817,448821,448822,448825,448826,448830,448831,448836,448837,448846,448847,448858,448859,448862,448863,448868,448869,448875,448876,448880,448881,448885,448886,448900,448901,448916,448917,448919,448920,448932,448933,448943,448944,448948,448949,448951,448952,448956,448957,448959,448960,448965,448966,448970,448971,448976,448977,448979,448980,448982,448983,448985,448986,449010,449011,449025,449026,449031,449034,452062,452063,452425,452426,452478,452479,453879,453880,455142,455143,456641,456643,457127,457128,458752,458753,463889,463890,463949,463950,464027,464028,464154,464155,464353,464354,464360,464361,465900,465901,471518,471519,472551,472552,472611,472612,472673,472674,479468,479469,479800,479801,479808,479809,480506,480507,483259,483260,483268,483283,483661,483662,483669,483670,485872,485873,485879,485880,487108,487109,487138,487139,487606,487607,489080,489081,489748,489749,489842,489845,489902,489903,489908,489909,491520,491521,492237,492238,492363,492364,492375,492376,492380,492381,495072,495073,496624,496627,496960,496961,499047,499048,503576,503577,506620,506621,515021,515022,515557,515558,524288,524289,536779,536782,537906,537909,538177,538178,550863,550864,553571,553572,553609,553610,557056,557057,561125,561126,575549,575550,584655,584656,584673,584674,584711,584712,584739,584740,584750,584751,584768,584769,584771,584772,585290,585291,586989,586990,586994,586995,587056,587057,589824,589825,594018,594019,601831,601832,601904,601905,601909,601910,602000,602001,604774,604775,604790,604791,604948,604949,610020,610021,611636,611637,611791,611792,611800,611801,611843,611844,611851,611852,611883,611886,614100,614101,614663,614664,614746,614747,615061,615064,615077,615078,619414,619415,619422,619423,619427,619428,619488,619489,622592,622593,626234,626235,626874,626875,627239,627240,627252,627253,634146,634147,634548,634549,641714,641715,649765,649766,655360,655361,662156,662157,662816,662817,662823,662824,662828,662829,662957,662958,662965,662966,662969,662970,662974,662975,662986,662987,677552,677553,688128,688129,693738,693739,695152,695153,701536,701537,708778,708779,708785,708786,708796,708797,708801,708802,708806,708807,708819,708820,708822,708823,708828,708829,711939,711940,711954,711955,711959,711960,711984,711985,711993,711994,712001,712002,712011,712012,712021,712022,712185,712186,712187,712188,712189,712190,712191,712192,712228,712229,712230,712231,712236,712237,713168,713169,716713,716714,717595,717596,720896,720897,722783,722784,724012,724015,724464,724465,724836,724837,726322,726323,726413,726415,726417,726418,726420,726421,726423,726424,726426,726427,726429,726430,726432,726433,726437,726438,726442,726443,726448,726449,726453,726454,726472,726473,726492,726493,726498,726499,726518,726519,726534,726535,726539,726540,726556,726557,726562,726563,726581,726582,726595,726596,726600,726601,726618,726619,726624,726625,726644,726645,726659,726660,726662,726663,726665,726666,726668,726669,726671,726672,726674,726675,726677,726678,726680,726681,726683,726684,726686,726687,726689,726691,726986,726987,727028,727029,728347,728348,729842,729843,745599,745600,751877,751879,753664,753665,755144,755145,755316,755317,755357,755358,755479,755480,756728,756729,757778,757779,757951,757952,758104,758105,766733,766734,767158,767159,772022,772023,779126,779127,786432,786433,796004,796005,796494,796495,797870,797871,799278,799279,801160,801161,801586,801587,819200,819202,819422,819423,828342,828343,839837,839838,839868,839869,842431,842432,842435,842436,842708,842711,842732,842733,842748,842751,851968,851969,853039,856828,857204,857205,857208,857209,857228,857229,857286,857288,857297,857298,857423,857424,857615,857616,857617,857620,884736,884738,884958,884959,903007,917316,917503,917504") == "0e1be71fce69f53c3db082ea7bfb1a18f5753444" || block_image_verify("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block("/dev/block/bootdevice/by-name/system");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/system", "1604,1,620,728,742,775,782,784,785,1031,1036,1038,1039,1145,1146,1631,1632,2320,2321,2323,2325,2326,2327,2342,2343,2524,2525,3696,3697,3699,3700,3704,3705,3713,3714,3715,3716,5819,5936,9073,9074,9076,9077,9481,9482,9484,9485,10481,10483,16422,16423,16556,16557,19326,19328,25594,25596,32768,32770,32990,32991,34762,34763,34765,34767,34826,34827,34960,34962,35015,35016,35030,35031,35043,35691,35697,35698,35703,35704,35823,35826,37440,37441,39652,39653,39684,39685,39924,39925,40024,41436,43749,43750,43763,43764,43769,43770,43772,43773,46894,46895,47265,47266,47353,47354,47437,47438,50123,50124,50127,50128,50376,50377,50837,50838,51744,51745,51749,51750,51772,51773,52993,52994,53408,53409,53445,53446,53498,53499,53686,53687,54989,54990,55128,55129,55161,55162,55612,55613,56296,56297,56305,56306,57659,57660,57836,57837,59019,59020,62899,62900,63385,63386,65536,65537,66635,66636,66708,66709,66728,66731,70045,70046,72669,72670,73460,73461,73609,73610,73790,73791,74450,74451,75160,75161,75165,75166,89208,89209,89419,89422,89432,89433,95030,95031,96748,96749,96800,96801,96804,96807,98304,98306,98526,98527,99392,99393,99477,99478,99480,99481,99502,99503,100449,100452,100852,100855,101021,101022,101061,101062,103062,103063,103113,103114,103464,103465,103486,103487,103492,103493,103566,103567,104435,104436,108944,108945,108950,108951,109348,109349,110834,110835,112611,112612,113060,113061,113065,113066,113078,113079,113083,113084,113095,113096,113119,113120,115083,115084,115086,115087,115241,115242,115612,115615,115618,115619,116537,116538,117107,117108,121356,121359,123658,123659,124008,124009,126638,126639,126651,126652,126991,126992,129343,129344,129777,129778,131072,131073,132019,132020,133410,133462,134570,134574,134888,134889,134901,134902,134912,134915,134916,134917,134918,134919,134921,134922,134923,134924,134990,134991,134997,134998,135086,135087,135091,135092,135093,135095,135118,135119,135188,135189,135192,135197,135198,135199,135200,135201,135202,135203,136133,136134,136141,136142,136695,136697,137250,137252,137253,137254,137255,137256,137257,137258,137259,137260,137261,137262,137263,137264,137266,137267,137268,137271,138128,138130,138131,138132,138215,138216,138218,138219,138222,138224,138482,138483,138490,138492,138981,138983,139092,139093,139123,139124,139135,139136,139402,139403,139516,139517,139533,139535,139537,139538,148472,148473,156395,156396,158344,158345,158623,163842,164062,164063,164568,196609,197114,201969,202248,204852,207880,207890,208949,208950,218777,226311,226614,227117,227152,227434,227448,227452,227456,227457,227461,227464,227469,227470,227474,227476,227491,227492,227497,229378,229598,229599,230104,236079,237750,237752,238034,241543,243749,243750,248162,248163,248537,248538,248854,248855,248870,248871,248899,248900,248943,248944,250068,250188,250268,250280,251352,252833,256022,256119,257290,257332,262144,262145,265195,265196,268818,269129,272280,272282,276186,276188,276384,276385,280018,280019,285482,285483,285879,285880,286054,286055,287346,287347,292045,292046,294423,294424,294784,294785,294805,294806,294840,294841,294911,294914,295134,295135,297681,297682,306307,306467,306574,306589,310620,310621,314886,314887,325750,325867,327680,327681,336791,336792,360448,360449,365180,365182,367360,367361,384098,384099,391080,391081,393216,393217,395195,395628,407210,407211,412101,412102,419441,419442,419996,419997,420216,420217,421974,421977,423852,423853,424066,424067,425984,425985,428839,428840,429590,429594,429613,429614,429617,429618,429641,429642,429713,429714,429728,429729,429738,429739,429748,429749,429762,429763,429784,429785,429830,429832,429833,429834,429835,429836,429837,429838,429839,429840,429842,429843,429847,429848,429849,429850,429852,429853,429854,429855,429856,429857,429859,429860,429861,429862,429863,429864,429865,429866,429867,429868,429869,429870,429871,429872,429873,429874,429875,429876,429878,429879,429881,429882,429883,429886,429888,429890,429898,429899,429905,429907,429913,429914,429920,429921,429925,429926,431035,431036,431141,431143,431153,431155,431173,431175,431215,431216,431218,431233,431238,446801,446940,446973,446974,446976,446996,446997,447003,447004,447010,447011,447016,447017,447031,447032,447038,447039,447042,447043,447048,447049,447056,447057,447059,447060,447064,447065,447069,447070,447081,447082,447096,447097,447121,447122,447125,447126,447186,447187,447207,447208,447228,447229,447265,447266,447295,447296,447307,447308,447323,447324,447329,447330,447332,447333,447337,447338,447344,447345,447350,447351,447355,447356,447362,447363,447368,447369,447374,447375,447379,447380,447383,447384,447392,447393,447397,447398,447409,447410,447415,447416,447421,447422,447427,447428,447430,447431,447437,447438,447440,447441,447446,447447,447455,447456,447477,447478,447485,447486,447489,447490,447492,447493,447497,447498,447500,447501,447516,447517,447520,447521,447523,447524,447528,447529,447534,447535,447547,447548,447551,447552,447554,447555,447558,447559,447561,447562,447564,447565,447567,447568,447570,447571,447573,447574,447576,447577,447580,447581,447583,447584,447587,447588,447590,447591,447593,447594,447596,447597,447599,447600,447604,447605,447607,447608,447610,447611,447614,447615,447617,447618,447621,447622,447624,447625,447627,447628,447632,447634,447639,447640,447643,447644,447647,447648,447651,447652,447655,447656,447658,447659,447662,447663,447666,447667,447671,447672,447675,447676,447684,447685,447699,447700,447704,447705,447707,447708,447714,447715,447725,447726,447733,447734,447737,447738,447744,447745,447757,447758,447764,447765,447769,447770,447787,447788,447790,447791,447796,447797,447804,447805,447807,447808,447811,447812,447817,447818,447823,447824,447830,447831,447842,447843,447845,447846,447851,447852,447861,447862,447872,447873,447881,447882,447886,447887,447901,447902,447905,447906,447923,447924,447927,447928,447933,447934,447938,447939,447943,447944,447948,447949,447966,447967,448014,448015,448029,448030,448063,448064,448076,448077,448104,448105,448110,448111,448125,448126,448137,448138,448140,448141,448143,448144,448149,448150,448157,448158,448160,448161,448163,448164,448173,448174,448188,448189,448193,448194,448198,448199,448203,448204,448208,448209,448224,448225,448227,448228,448233,448234,448237,448238,448242,448243,448249,448250,448257,448258,448263,448264,448268,448269,448274,448275,448279,448280,448284,448285,448293,448294,448304,448305,448314,448315,448321,448322,448330,448331,448337,448338,448346,448347,448350,448351,448353,448354,448362,448363,448370,448371,448383,448384,448396,448397,448400,448401,448407,448408,448414,448415,448419,448420,448433,448434,448445,448446,448454,448455,448466,448467,448469,448470,448478,448479,448484,448485,448487,448488,448495,448496,448509,448510,448515,448516,448520,448521,448527,448528,448535,448536,448541,448543,448547,448548,448553,448554,448559,448560,448577,448578,448581,448582,448587,448588,448595,448596,448610,448611,448613,448614,448622,448623,448628,448629,448631,448632,448634,448635,448645,448646,448651,448652,448657,448658,448672,448673,448688,448689,448695,448696,448700,448701,448719,448720,448738,448739,448744,448745,448751,448752,448754,448755,448757,448758,448763,448764,448816,448817,448821,448822,448825,448826,448830,448831,448836,448837,448846,448847,448858,448859,448862,448863,448868,448869,448875,448876,448880,448881,448885,448886,448900,448901,448916,448917,448919,448920,448932,448933,448943,448944,448948,448949,448951,448952,448956,448957,448959,448960,448965,448966,448970,448971,448976,448977,448979,448980,448982,448983,448985,448986,449010,449011,449025,449026,449031,449034,452062,452063,452425,452426,452478,452479,453879,453880,455142,455143,456641,456643,457127,457128,458752,458753,463889,463890,463949,463950,464027,464028,464154,464155,464353,464354,464360,464361,465900,465901,471518,471519,472551,472552,472611,472612,472673,472674,479468,479469,479800,479801,479808,479809,480506,480507,483259,483260,483268,483283,483661,483662,483669,483670,485872,485873,485879,485880,487108,487109,487138,487139,487606,487607,489080,489081,489748,489749,489842,489845,489902,489903,489908,489909,491520,491521,492237,492238,492363,492364,492375,492376,492380,492381,495072,495073,496624,496627,496960,496961,499047,499048,503576,503577,506620,506621,515021,515022,515557,515558,524288,524289,536779,536782,537906,537909,538177,538178,550863,550864,553571,553572,553609,553610,557056,557057,561125,561126,575549,575550,584655,584656,584673,584674,584711,584712,584739,584740,584750,584751,584768,584769,584771,584772,585290,585291,586989,586990,586994,586995,587056,587057,589824,589825,594018,594019,601831,601832,601904,601905,601909,601910,602000,602001,604774,604775,604790,604791,604948,604949,610020,610021,611636,611637,611791,611792,611800,611801,611843,611844,611851,611852,611883,611886,614100,614101,614663,614664,614746,614747,615061,615064,615077,615078,619414,619415,619422,619423,619427,619428,619488,619489,622592,622593,626234,626235,626874,626875,627239,627240,627252,627253,634146,634147,634548,634549,641714,641715,649765,649766,655360,655361,662156,662157,662816,662817,662823,662824,662828,662829,662957,662958,662965,662966,662969,662970,662974,662975,662986,662987,677552,677553,688128,688129,693738,693739,695152,695153,701536,701537,708778,708779,708785,708786,708796,708797,708801,708802,708806,708807,708819,708820,708822,708823,708828,708829,711939,711940,711954,711955,711959,711960,711984,711985,711993,711994,712001,712002,712011,712012,712021,712022,712185,712186,712187,712188,712189,712190,712191,712192,712228,712229,712230,712231,712236,712237,713168,713169,716713,716714,717595,717596,720896,720897,722783,722784,724012,724015,724464,724465,724836,724837,726322,726323,726413,726415,726417,726418,726420,726421,726423,726424,726426,726427,726429,726430,726432,726433,726437,726438,726442,726443,726448,726449,726453,726454,726472,726473,726492,726493,726498,726499,726518,726519,726534,726535,726539,726540,726556,726557,726562,726563,726581,726582,726595,726596,726600,726601,726618,726619,726624,726625,726644,726645,726659,726660,726662,726663,726665,726666,726668,726669,726671,726672,726674,726675,726677,726678,726680,726681,726683,726684,726686,726687,726689,726691,726986,726987,727028,727029,728347,728348,729842,729843,745599,745600,751877,751879,753664,753665,755144,755145,755316,755317,755357,755358,755479,755480,756728,756729,757778,757779,757951,757952,758104,758105,766733,766734,767158,767159,772022,772023,779126,779127,786432,786433,796004,796005,796494,796495,797870,797871,799278,799279,801160,801161,801586,801587,819200,819202,819422,819423,828342,828343,839837,839838,839868,839869,842431,842432,842435,842436,842708,842711,842732,842733,842748,842751,851968,851969,853039,856828,857204,857205,857208,857209,857228,857229,857286,857288,857297,857298,857423,857424,857615,857616,857617,857620,884736,884738,884958,884959,903007,917316,917503,917504") && block_image_verify("/dev/block/bootdevice/by-name/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("/dev/block/bootdevice/by-name/vendor", "318,1,273,602,610,620,621,702,703,767,768,770,771,773,784,786,787,795,796,804,805,1702,1703,2835,3583,12176,12177,12294,12295,13087,13088,13720,13721,14714,14719,16972,16973,18622,18623,19894,19895,32768,32770,32864,32865,41707,41709,46554,46555,50381,50382,65536,65537,66043,66044,69736,69737,74446,74447,79440,79441,93500,93501,98304,98306,98400,98401,103380,103381,104403,104405,104439,104440,104817,104818,105180,105182,105655,105656,105715,105716,119923,119926,119944,119945,119990,119991,120009,120010,120153,120154,120202,120203,120259,120260,120470,120471,120496,120497,120532,120533,120648,120649,120729,120730,120878,120879,120892,120893,126848,126849,129060,129062,131072,131073,135704,135705,135708,135709,136275,136277,142663,142664,145702,145703,145704,145705,145726,145727,146152,146153,146209,146210,146571,146573,146574,146580,146607,146609,146617,146630,146631,146633,146643,146658,146684,146685,146687,146691,146839,146840,147731,147732,147941,147942,150667,150668,154721,154722,155298,155299,157945,157946,162008,162009,162531,162532,163062,163063,163840,163842,163936,163937,166391,166392,170475,170476,170983,170984,171488,171489,171908,171909,174697,174698,175675,175676,176518,178077,187280,187281,196608,196609,206567,206568,210275,210362,214812,214813,215780,215781,215803,215804,216475,219496,219499,223370,223387,223389,223509,223510,225098,225099,227637,227639,229359,229360,229376,229378,229472,229473,230054,230055,230247,230248,231130,231131,231340,231341,234066,234067,238120,238121,238697,238698,241344,241345,245407,245408,245930,245931,246461,246462,249188,249189,253272,253273,253780,253781,254285,254286,254705,254706,256553,256554,257340,257341,258344,258345,259373,259374,259687,259688,260693,262129,262144,262145,272906,272907,294912,294914,295008,295009,306089,306090,321988,321989,327680,327681,330068,330069,343083,343084,346387,346388,354941,354942,360448,360449,363261,363262,365116,365117,365141,365142,366522,366523,372512,372514,375445,375449,375451,375452,375490,375491,377981,377982,377990,377992,378016,378017,378042,378073,378079,378090,386991,393125,393215,393216") == "ef1c9fa2bb41f6ebe0111884847dc5b0f15997c5" || block_image_verify("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block("/dev/block/bootdevice/by-name/vendor");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/vendor", "318,1,273,602,610,620,621,702,703,767,768,770,771,773,784,786,787,795,796,804,805,1702,1703,2835,3583,12176,12177,12294,12295,13087,13088,13720,13721,14714,14719,16972,16973,18622,18623,19894,19895,32768,32770,32864,32865,41707,41709,46554,46555,50381,50382,65536,65537,66043,66044,69736,69737,74446,74447,79440,79441,93500,93501,98304,98306,98400,98401,103380,103381,104403,104405,104439,104440,104817,104818,105180,105182,105655,105656,105715,105716,119923,119926,119944,119945,119990,119991,120009,120010,120153,120154,120202,120203,120259,120260,120470,120471,120496,120497,120532,120533,120648,120649,120729,120730,120878,120879,120892,120893,126848,126849,129060,129062,131072,131073,135704,135705,135708,135709,136275,136277,142663,142664,145702,145703,145704,145705,145726,145727,146152,146153,146209,146210,146571,146573,146574,146580,146607,146609,146617,146630,146631,146633,146643,146658,146684,146685,146687,146691,146839,146840,147731,147732,147941,147942,150667,150668,154721,154722,155298,155299,157945,157946,162008,162009,162531,162532,163062,163063,163840,163842,163936,163937,166391,166392,170475,170476,170983,170984,171488,171489,171908,171909,174697,174698,175675,175676,176518,178077,187280,187281,196608,196609,206567,206568,210275,210362,214812,214813,215780,215781,215803,215804,216475,219496,219499,223370,223387,223389,223509,223510,225098,225099,227637,227639,229359,229360,229376,229378,229472,229473,230054,230055,230247,230248,231130,231131,231340,231341,234066,234067,238120,238121,238697,238698,241344,241345,245407,245408,245930,245931,246461,246462,249188,249189,253272,253273,253780,253781,254285,254286,254705,254706,256553,256554,257340,257341,258344,258345,259373,259374,259687,259688,260693,262129,262144,262145,272906,272907,294912,294914,295008,295009,306089,306090,321988,321989,327680,327681,330068,330069,343083,343084,346387,346388,354941,354942,360448,360449,363261,363262,365116,365117,365141,365142,366522,366523,372512,372514,375445,375449,375451,375452,375490,375491,377981,377982,377990,377992,378016,378017,378042,378073,378079,378090,386991,393125,393215,393216") && block_image_verify("/dev/block/bootdevice/by-name/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;

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

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

# ---- 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/imagefv.elf", "/dev/block/bootdevice/by-name/imagefv");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hyp");
package_extract_file("firmware-update/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/aop.mbn", "/dev/block/bootdevice/by-name/aop");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_config");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsec");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecapp");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfw");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/dspso.bin", "/dev/block/bootdevice/by-name/dsp");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xbl");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlibbak");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hypbak");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/aop.mbn", "/dev/block/bootdevice/by-name/aopbak");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_configbak");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecappbak");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfwbak");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xblbak");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
show_progress(0.600000, 600);
ui_print("Patching system image after verification.");
block_image_update("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");
ui_print("Patching vendor image after verification.");
block_image_update("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");
show_progress(0.100000, 2);

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