getprop("ro.product.device") == "apollo" || abort("E3004: This package is for \"apollo\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Redmi/apollo/apollo:10/QKQ1.200419.002/V12.0.2.0.QJDCNXM:user/release-keys");
ui_print("Target: Redmi/apollo/apollo:10/QKQ1.200419.002/V12.0.3.0.QJDCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/apollo/apollo:10/QKQ1.200419.002/V12.0.2.0.QJDCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/apollo/apollo:10/QKQ1.200419.002/V12.0.3.0.QJDCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/apollo/apollo:10/QKQ1.200419.002/V12.0.2.0.QJDCNXM:user/release-keys or Redmi/apollo/apollo:10/QKQ1.200419.002/V12.0.3.0.QJDCNXM: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:bb7affe97d30393cb5521260ad2bf3d5af7ca921",
                      "EMMC:/dev/block/bootdevice/by-name/boot:134217728:6e5d4b2a74e3d7a425a7fd977fa0c97bad6804fc") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:bb7affe97d30393cb5521260ad2bf3d5af7ca921\" or \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:6e5d4b2a74e3d7a425a7fd977fa0c97bad6804fc\" 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"), "1446,1,251,279,288,290,291,552,556,572,573,32768,32770,32989,33005,35781,35783,36141,36145,36158,36159,36319,36323,36331,36332,36340,36344,36349,36350,36839,36843,36859,36860,36869,36873,36877,36878,37930,37936,37968,37969,37975,37979,37983,37984,37989,37993,37997,37998,38042,38048,38054,38055,42427,42428,42879,42880,42891,42895,42899,42900,43097,43101,43109,43110,43113,43114,43131,43135,43139,44454,45761,45765,45792,45793,45801,45805,45809,45810,45816,45820,45824,45825,45827,45828,49114,49118,49159,49160,49288,49292,49298,49299,49561,49562,49755,49759,49774,49775,52485,52489,52533,52534,53194,53198,53220,53221,53469,53470,53541,53545,53550,53551,53777,53781,53789,53790,53794,53798,53802,53803,53825,53829,53853,53854,55321,55325,55351,55352,56155,56159,56182,56183,56266,56270,56276,56277,61896,61898,65536,65552,67284,67285,67619,67621,67674,67675,67685,67689,67693,67694,67707,67711,67733,67734,68356,68360,68376,68377,69909,69913,69950,69951,70213,70214,70557,70561,70568,70569,70963,70967,70980,70981,73265,73266,74193,74197,74222,74223,86789,86793,86817,86818,89211,89215,89265,89266,98304,98306,98525,98541,99309,99313,99420,99421,101205,101206,102921,102925,102959,102960,102998,103004,103009,103010,105749,105753,105791,105792,108416,108417,108557,108558,108924,108930,108944,108945,111436,111437,112486,112490,112511,112512,113553,113557,113584,113585,113814,113818,113826,113827,114171,114177,114191,114192,116582,116588,116635,116636,119194,119198,119238,119239,119281,119285,119290,119291,119324,119328,119332,119333,119382,119386,119391,119392,119395,119401,119406,119407,121970,121971,122029,122033,122039,122040,122084,122088,122092,122093,123690,123696,123738,123739,123987,123993,124003,124004,124200,124204,124209,124210,124249,124253,124257,124258,126645,126649,126688,126689,126806,126810,126816,126817,126883,126887,126892,126893,127606,127610,127628,127629,127895,127899,127908,127909,131072,131088,136093,136097,138722,138723,138792,138796,138802,138803,143483,143489,143560,143561,148966,148970,149049,149050,149058,149062,149066,149067,149691,149695,149711,149712,150413,150417,150433,150434,150445,150449,150453,150454,153379,153383,153864,153865,155876,155880,155906,155907,163840,163842,164061,164077,170392,170394,175834,175835,177188,177190,178714,178715,179605,179609,179636,179637,179641,179645,179649,179650,179672,179676,179680,179681,179685,179689,179697,179698,179713,179717,179721,179722,180124,180128,180133,180134,180158,180162,180166,180167,182549,182553,182601,182602,182605,182611,182616,182617,182890,182894,182904,182905,183064,183070,183079,183080,183106,183112,183117,183118,184582,184586,184614,184615,185511,185514,189971,189975,192172,192173,196608,196624,197395,197399,197445,197448,199655,199659,199674,199675,200068,200072,200080,200081,200094,200098,200102,200103,203490,203495,203531,203536,203552,203557,203574,203575,203914,203915,206144,206153,206471,206472,206908,206909,208703,208704,211348,211353,211354,211355,211356,211357,211358,211359,211360,211361,211362,211363,211364,211366,213285,213286,217728,217729,223271,223272,229376,229378,229597,229613,230065,230066,230430,230431,232248,232249,232812,232816,232832,232833,244109,244110,248128,248129,262144,262160,269318,269319,270109,270110,271446,271447,284550,284551,285207,285208,289971,289972,294912,294914,295133,295149,295655,295656,297648,297649,298444,298445,303259,303260,307312,307313,313841,313842,318936,318937,327680,327696,328888,328889,344356,344357,344775,344776,360448,360464,362003,362004,382825,382826,383179,383180,383414,383415,383427,383428,383438,383441,383442,383443,383444,383445,383447,383448,383477,383478,383566,383569,383571,383572,383575,383576,383599,383600,383670,383671,383674,383679,383680,383681,383682,383683,383684,383685,384479,384480,384486,384487,385040,385042,385595,385597,385598,385599,385600,385601,385602,385603,385604,385605,385606,385607,385608,385609,385610,385611,385612,385615,387075,387077,387159,387164,387167,387170,387173,387176,387179,387181,387185,387186,387190,387193,387198,387199,387202,387204,387462,387463,387470,387472,387966,387968,388080,388081,388097,388098,388109,388110,388376,388377,388490,388491,388508,388510,389826,389827,393216,393232,403707,403708,411578,411579,413643,413644,414117,414118,417440,429925,433087,433603,436200,436201,436362,436363,440140,455139,458752,458768,458903,459589,462620,462630,463959,463960,467033,474671,475266,475767,475839,476125,476154,476158,476162,476164,476168,476170,476174,476176,476180,476182,476560,476562,476667,476669,476673,476675,476679,476681,476685,476687,476691,476693,476697,476699,476703,476705,476709,476711,476715,476717,476721,476723,476727,476729,476743,476745,476749,476751,476760,476762,476766,476768,476772,476774,476778,476783,476788,476790,476794,476796,476800,476802,476807,476809,476813,476815,476819,476821,476825,476827,476895,476897,476902,476904,476908,476910,476914,476916,476920,476922,476926,476928,476932,476934,476939,476941,476950,476952,476956,476958,476962,476964,476968,476970,477050,477052,477056,477058,477063,477065,477069,477071,477075,477077,477081,477083,477087,477089,477093,477095,477101,477103,477107,477109,477113,477115,477119,477121,477125,477127,477132,477134,477138,477140,477144,477146,477150,477152,477156,477158,477162,477164,477167,477168,477169,477171,477175,477177,477181,477183,477187,477189,477194,477196,477202,477204,477209,477212,477216,477218,477222,477224,477228,477230,477234,477236,477678,477680,477805,477807,477811,477813,477817,477819,477823,477825,477829,477831,477835,477837,477841,477843,477847,477849,477853,477855,477859,477861,477865,477867,477881,477883,477887,477889,477899,477901,477905,477907,477911,477913,477917,477922,477927,477929,477933,477935,477939,477941,477946,477948,477952,477954,477958,477960,477981,477983,477987,477989,478068,478070,478075,478077,478081,478083,478087,478089,478093,478095,478099,478101,478105,478107,478112,478114,478123,478125,478129,478131,478135,478137,478141,478143,478235,478237,478241,478243,478248,478250,478254,478256,478260,478625,486341,486343,486347,486349,486353,486355,486359,486361,486367,486369,486373,486375,486379,486381,486385,486387,486391,486393,486398,486400,486404,486406,486410,486412,486416,486418,486422,486424,486427,486428,486429,486431,486435,486437,486441,486443,486447,486449,486453,486455,486460,486462,488324,488326,488332,488334,491520,491536,494792,494793,498972,498973,499617,499618,499950,499951,499966,499967,499995,499996,500030,500031,500858,500870,502620,504113,507257,507258,507299,507305,515002,515003,520281,520283,524288,524304,525579,525580,525891,525892,529527,529528,534914,534915,535307,535308,535482,535483,536773,536774,541493,541494,543897,543898,544280,544281,544301,544302,544336,544337,544396,544397,555925,555936,557056,557072,559723,559724,569785,569786,584115,584121,589824,589840,598232,598233,622592,622608,623449,623450,629905,629907,646948,646949,654024,654025,655360,655376,662555,662556,667447,667448,674678,674679,675229,675230,675449,675450,677206,677209,679074,679075,679289,679290,683305,683306,684299,684303,684322,684323,684326,684327,684350,684351,684422,684423,684437,684438,684447,684448,684457,684458,684471,684472,684493,684494,684539,684541,684542,684543,684544,684545,684546,684547,684548,684549,684551,684552,684556,684557,684558,684559,684561,684562,684563,684564,684565,684566,684568,684569,684570,684571,684572,684573,684574,684575,684576,684577,684578,684579,684580,684581,684582,684583,684584,684585,684587,684588,684590,684591,684592,684595,684597,684599,684607,684608,684614,684616,684622,684623,684629,684630,684634,684635,685750,685751,685926,685939,685944,697511,697650,697683,697684,697686,697706,697707,697713,697714,697720,697721,697726,697727,697741,697742,697748,697749,697752,697753,697758,697759,697766,697767,697769,697770,697774,697775,697779,697780,697791,697792,697806,697807,697831,697832,697835,697836,697896,697897,697917,697918,697938,697939,697975,697976,698005,698006,698017,698018,698033,698034,698039,698040,698042,698043,698047,698048,698054,698055,698060,698061,698065,698066,698072,698073,698078,698079,698084,698085,698089,698090,698093,698094,698102,698103,698107,698108,698119,698120,698125,698126,698131,698132,698137,698138,698140,698141,698147,698148,698150,698151,698156,698157,698165,698166,698187,698188,698195,698196,698199,698200,698202,698203,698207,698208,698210,698211,698226,698227,698314,698315,699112,699113,707409,707411,712575,712577,712680,712682,712760,712762,720896,720985,739224,739226,739461,739463,739477,739479,740227,740229,740307,740309,746566,746568,746910,746912,750958,750960,752291,752293,753664,753748,753991,753993,754033,754035,754047,754049,754324,754326,754341,754343,755579,755581,755634,755636,756048,756050,756156,756158,756186,756188,756198,756200,757722,757724,757829,757831,771682,771684,774657,774659,786432,786506,801052,801054,801321,801323,810400,810402,813221,813223,817611,817613,819200,819202,819421,819539,824958,824960,843902,843903,844946,844948,849658,849660,849745,849747,849777,849779,851968,852017,857971,857972,857990,857994,857998,857999,858010,858014,858018,858019,858486,858490,858499,858500,859314,859318,859336,859337,865073,865074,867271,867273,869468,869469,869471,869475,869479,869480,869995,869996,871134,871138,871146,871147,871151,871155,871159,871160,874417,874421,874463,874464,874525,874529,874534,874537,874542,874543,882969,882973,883043,883044,883112,883116,883214,883215,883219,883223,883227,883228,883280,883284,883289,883290,884736,884738,884957,884972,886312,886316,886363,886364,886379,886383,886387,886388,886525,886529,886537,886538,888469,888473,888515,888516,889275,889279,890457,890458,890606,890610,890615,890616,890621,890625,890629,890630,890642,890646,890650,890651,890679,890685,890690,890691,892859,892863,892902,892903,893684,893688,893714,898153,900884,915158,915346,915347") == "8c0374c9221df5974182fca358be75e5c04b5cde" || 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"), "1446,1,251,279,288,290,291,552,556,572,573,32768,32770,32989,33005,35781,35783,36141,36145,36158,36159,36319,36323,36331,36332,36340,36344,36349,36350,36839,36843,36859,36860,36869,36873,36877,36878,37930,37936,37968,37969,37975,37979,37983,37984,37989,37993,37997,37998,38042,38048,38054,38055,42427,42428,42879,42880,42891,42895,42899,42900,43097,43101,43109,43110,43113,43114,43131,43135,43139,44454,45761,45765,45792,45793,45801,45805,45809,45810,45816,45820,45824,45825,45827,45828,49114,49118,49159,49160,49288,49292,49298,49299,49561,49562,49755,49759,49774,49775,52485,52489,52533,52534,53194,53198,53220,53221,53469,53470,53541,53545,53550,53551,53777,53781,53789,53790,53794,53798,53802,53803,53825,53829,53853,53854,55321,55325,55351,55352,56155,56159,56182,56183,56266,56270,56276,56277,61896,61898,65536,65552,67284,67285,67619,67621,67674,67675,67685,67689,67693,67694,67707,67711,67733,67734,68356,68360,68376,68377,69909,69913,69950,69951,70213,70214,70557,70561,70568,70569,70963,70967,70980,70981,73265,73266,74193,74197,74222,74223,86789,86793,86817,86818,89211,89215,89265,89266,98304,98306,98525,98541,99309,99313,99420,99421,101205,101206,102921,102925,102959,102960,102998,103004,103009,103010,105749,105753,105791,105792,108416,108417,108557,108558,108924,108930,108944,108945,111436,111437,112486,112490,112511,112512,113553,113557,113584,113585,113814,113818,113826,113827,114171,114177,114191,114192,116582,116588,116635,116636,119194,119198,119238,119239,119281,119285,119290,119291,119324,119328,119332,119333,119382,119386,119391,119392,119395,119401,119406,119407,121970,121971,122029,122033,122039,122040,122084,122088,122092,122093,123690,123696,123738,123739,123987,123993,124003,124004,124200,124204,124209,124210,124249,124253,124257,124258,126645,126649,126688,126689,126806,126810,126816,126817,126883,126887,126892,126893,127606,127610,127628,127629,127895,127899,127908,127909,131072,131088,136093,136097,138722,138723,138792,138796,138802,138803,143483,143489,143560,143561,148966,148970,149049,149050,149058,149062,149066,149067,149691,149695,149711,149712,150413,150417,150433,150434,150445,150449,150453,150454,153379,153383,153864,153865,155876,155880,155906,155907,163840,163842,164061,164077,170392,170394,175834,175835,177188,177190,178714,178715,179605,179609,179636,179637,179641,179645,179649,179650,179672,179676,179680,179681,179685,179689,179697,179698,179713,179717,179721,179722,180124,180128,180133,180134,180158,180162,180166,180167,182549,182553,182601,182602,182605,182611,182616,182617,182890,182894,182904,182905,183064,183070,183079,183080,183106,183112,183117,183118,184582,184586,184614,184615,185511,185514,189971,189975,192172,192173,196608,196624,197395,197399,197445,197448,199655,199659,199674,199675,200068,200072,200080,200081,200094,200098,200102,200103,203490,203495,203531,203536,203552,203557,203574,203575,203914,203915,206144,206153,206471,206472,206908,206909,208703,208704,211348,211353,211354,211355,211356,211357,211358,211359,211360,211361,211362,211363,211364,211366,213285,213286,217728,217729,223271,223272,229376,229378,229597,229613,230065,230066,230430,230431,232248,232249,232812,232816,232832,232833,244109,244110,248128,248129,262144,262160,269318,269319,270109,270110,271446,271447,284550,284551,285207,285208,289971,289972,294912,294914,295133,295149,295655,295656,297648,297649,298444,298445,303259,303260,307312,307313,313841,313842,318936,318937,327680,327696,328888,328889,344356,344357,344775,344776,360448,360464,362003,362004,382825,382826,383179,383180,383414,383415,383427,383428,383438,383441,383442,383443,383444,383445,383447,383448,383477,383478,383566,383569,383571,383572,383575,383576,383599,383600,383670,383671,383674,383679,383680,383681,383682,383683,383684,383685,384479,384480,384486,384487,385040,385042,385595,385597,385598,385599,385600,385601,385602,385603,385604,385605,385606,385607,385608,385609,385610,385611,385612,385615,387075,387077,387159,387164,387167,387170,387173,387176,387179,387181,387185,387186,387190,387193,387198,387199,387202,387204,387462,387463,387470,387472,387966,387968,388080,388081,388097,388098,388109,388110,388376,388377,388490,388491,388508,388510,389826,389827,393216,393232,403707,403708,411578,411579,413643,413644,414117,414118,417440,429925,433087,433603,436200,436201,436362,436363,440140,455139,458752,458768,458903,459589,462620,462630,463959,463960,467033,474671,475266,475767,475839,476125,476154,476158,476162,476164,476168,476170,476174,476176,476180,476182,476560,476562,476667,476669,476673,476675,476679,476681,476685,476687,476691,476693,476697,476699,476703,476705,476709,476711,476715,476717,476721,476723,476727,476729,476743,476745,476749,476751,476760,476762,476766,476768,476772,476774,476778,476783,476788,476790,476794,476796,476800,476802,476807,476809,476813,476815,476819,476821,476825,476827,476895,476897,476902,476904,476908,476910,476914,476916,476920,476922,476926,476928,476932,476934,476939,476941,476950,476952,476956,476958,476962,476964,476968,476970,477050,477052,477056,477058,477063,477065,477069,477071,477075,477077,477081,477083,477087,477089,477093,477095,477101,477103,477107,477109,477113,477115,477119,477121,477125,477127,477132,477134,477138,477140,477144,477146,477150,477152,477156,477158,477162,477164,477167,477168,477169,477171,477175,477177,477181,477183,477187,477189,477194,477196,477202,477204,477209,477212,477216,477218,477222,477224,477228,477230,477234,477236,477678,477680,477805,477807,477811,477813,477817,477819,477823,477825,477829,477831,477835,477837,477841,477843,477847,477849,477853,477855,477859,477861,477865,477867,477881,477883,477887,477889,477899,477901,477905,477907,477911,477913,477917,477922,477927,477929,477933,477935,477939,477941,477946,477948,477952,477954,477958,477960,477981,477983,477987,477989,478068,478070,478075,478077,478081,478083,478087,478089,478093,478095,478099,478101,478105,478107,478112,478114,478123,478125,478129,478131,478135,478137,478141,478143,478235,478237,478241,478243,478248,478250,478254,478256,478260,478625,486341,486343,486347,486349,486353,486355,486359,486361,486367,486369,486373,486375,486379,486381,486385,486387,486391,486393,486398,486400,486404,486406,486410,486412,486416,486418,486422,486424,486427,486428,486429,486431,486435,486437,486441,486443,486447,486449,486453,486455,486460,486462,488324,488326,488332,488334,491520,491536,494792,494793,498972,498973,499617,499618,499950,499951,499966,499967,499995,499996,500030,500031,500858,500870,502620,504113,507257,507258,507299,507305,515002,515003,520281,520283,524288,524304,525579,525580,525891,525892,529527,529528,534914,534915,535307,535308,535482,535483,536773,536774,541493,541494,543897,543898,544280,544281,544301,544302,544336,544337,544396,544397,555925,555936,557056,557072,559723,559724,569785,569786,584115,584121,589824,589840,598232,598233,622592,622608,623449,623450,629905,629907,646948,646949,654024,654025,655360,655376,662555,662556,667447,667448,674678,674679,675229,675230,675449,675450,677206,677209,679074,679075,679289,679290,683305,683306,684299,684303,684322,684323,684326,684327,684350,684351,684422,684423,684437,684438,684447,684448,684457,684458,684471,684472,684493,684494,684539,684541,684542,684543,684544,684545,684546,684547,684548,684549,684551,684552,684556,684557,684558,684559,684561,684562,684563,684564,684565,684566,684568,684569,684570,684571,684572,684573,684574,684575,684576,684577,684578,684579,684580,684581,684582,684583,684584,684585,684587,684588,684590,684591,684592,684595,684597,684599,684607,684608,684614,684616,684622,684623,684629,684630,684634,684635,685750,685751,685926,685939,685944,697511,697650,697683,697684,697686,697706,697707,697713,697714,697720,697721,697726,697727,697741,697742,697748,697749,697752,697753,697758,697759,697766,697767,697769,697770,697774,697775,697779,697780,697791,697792,697806,697807,697831,697832,697835,697836,697896,697897,697917,697918,697938,697939,697975,697976,698005,698006,698017,698018,698033,698034,698039,698040,698042,698043,698047,698048,698054,698055,698060,698061,698065,698066,698072,698073,698078,698079,698084,698085,698089,698090,698093,698094,698102,698103,698107,698108,698119,698120,698125,698126,698131,698132,698137,698138,698140,698141,698147,698148,698150,698151,698156,698157,698165,698166,698187,698188,698195,698196,698199,698200,698202,698203,698207,698208,698210,698211,698226,698227,698314,698315,699112,699113,707409,707411,712575,712577,712680,712682,712760,712762,720896,720985,739224,739226,739461,739463,739477,739479,740227,740229,740307,740309,746566,746568,746910,746912,750958,750960,752291,752293,753664,753748,753991,753993,754033,754035,754047,754049,754324,754326,754341,754343,755579,755581,755634,755636,756048,756050,756156,756158,756186,756188,756198,756200,757722,757724,757829,757831,771682,771684,774657,774659,786432,786506,801052,801054,801321,801323,810400,810402,813221,813223,817611,817613,819200,819202,819421,819539,824958,824960,843902,843903,844946,844948,849658,849660,849745,849747,849777,849779,851968,852017,857971,857972,857990,857994,857998,857999,858010,858014,858018,858019,858486,858490,858499,858500,859314,859318,859336,859337,865073,865074,867271,867273,869468,869469,869471,869475,869479,869480,869995,869996,871134,871138,871146,871147,871151,871155,871159,871160,874417,874421,874463,874464,874525,874529,874534,874537,874542,874543,882969,882973,883043,883044,883112,883116,883214,883215,883219,883223,883227,883228,883280,883284,883289,883290,884736,884738,884957,884972,886312,886316,886363,886364,886379,886383,886387,886388,886525,886529,886537,886538,888469,888473,888515,888516,889275,889279,890457,890458,890606,890610,890615,890616,890621,890625,890629,890630,890642,890646,890650,890651,890679,890685,890690,890691,892859,892863,892902,892903,893684,893688,893714,898153,900884,915158,915346,915347") && 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"), "236,1,153,163,167,172,173,254,258,263,264,268,272,276,277,283,287,291,292,297,298,561,565,570,571,573,577,6351,6352,18252,18254,22947,22948,22950,22961,23489,23493,23498,23499,23635,23636,23648,23652,23656,23657,23660,23664,23668,23669,23672,23673,25104,25445,32768,32770,32898,32914,37589,37590,37646,37647,37958,38010,38694,38695,39302,39303,40360,40366,65536,65555,81797,81798,82426,82428,88101,88102,98304,98306,98434,98449,111091,111092,116978,116979,125017,125022,131072,131087,134906,134908,134945,134946,139655,139657,140314,140315,140401,140402,161778,161779,161793,161794,161798,161800,161818,161819,161864,161865,161883,161884,162027,162030,162689,162690,163454,163455,163464,163465,163840,163842,163970,163985,165947,165948,165973,165974,166012,166013,166134,166135,166781,166782,167268,167269,171490,171491,171506,171507,178164,178165,184061,184062,184064,184065,184466,184468,184520,184521,184683,184684,187674,187677,187678,187679,187692,187693,187694,187695,187698,187700,187813,187814,187815,187816,187842,187843,188269,188270,188295,188296,188398,188399,188512,188513,188918,188919,188980,188981,189120,189121,189242,189243,189311,189312,189480,189481,189596,189597,189642,189643,189859,189860,189901,189902,189939,189940,190117,190118,190251,190252,190640,190641,190752,190753,190807,190808,190858,190859,190957,190958,191020,191022,191023,191029,191125,191127,191134,191146,191147,191149,191156,191168,191188,191189,191767,229378,229506,294914,295042,524289,524303,525864,527460,535820,535937,535938") == "a24a3ada08e8c4bd9c1c55c7a4648d84b4e2c26e" || 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"), "236,1,153,163,167,172,173,254,258,263,264,268,272,276,277,283,287,291,292,297,298,561,565,570,571,573,577,6351,6352,18252,18254,22947,22948,22950,22961,23489,23493,23498,23499,23635,23636,23648,23652,23656,23657,23660,23664,23668,23669,23672,23673,25104,25445,32768,32770,32898,32914,37589,37590,37646,37647,37958,38010,38694,38695,39302,39303,40360,40366,65536,65555,81797,81798,82426,82428,88101,88102,98304,98306,98434,98449,111091,111092,116978,116979,125017,125022,131072,131087,134906,134908,134945,134946,139655,139657,140314,140315,140401,140402,161778,161779,161793,161794,161798,161800,161818,161819,161864,161865,161883,161884,162027,162030,162689,162690,163454,163455,163464,163465,163840,163842,163970,163985,165947,165948,165973,165974,166012,166013,166134,166135,166781,166782,167268,167269,171490,171491,171506,171507,178164,178165,184061,184062,184064,184065,184466,184468,184520,184521,184683,184684,187674,187677,187678,187679,187692,187693,187694,187695,187698,187700,187813,187814,187815,187816,187842,187843,188269,188270,188295,188296,188398,188399,188512,188513,188918,188919,188980,188981,189120,189121,189242,189243,189311,189312,189480,189481,189596,189597,189642,189643,189859,189860,189901,189902,189939,189940,190117,190118,190251,190252,190640,190641,190752,190753,190807,190808,190858,190859,190957,190958,191020,191022,191023,191029,191125,191127,191134,191146,191147,191149,191156,191168,191188,191189,191767,229378,229506,294914,295042,524289,524303,525864,527460,535820,535937,535938") && 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"), "344,1,58,74,78,82,83,90,94,98,99,105,109,113,114,129,133,137,138,198,202,207,208,210,211,213,214,247,251,255,256,262,266,270,271,386,390,394,395,407,411,415,416,419,420,426,430,434,435,458,462,466,467,15032,15033,30714,30715,32126,32127,32768,32770,32797,32818,35271,35272,35283,35287,35291,35292,35302,35303,35308,35312,35317,35318,35322,35328,35333,35334,35340,35344,35348,35349,35361,35365,35369,35370,35372,35377,35386,35387,38497,38502,38559,38564,38572,38577,38605,38610,38632,38637,38658,38663,38682,38683,38694,38696,38860,38861,38862,38863,38864,38865,38866,38867,38903,38904,38908,38910,38918,38919,38923,38924,39261,39265,39269,39271,39276,39278,39282,39284,39288,39290,39294,39296,39300,39302,39306,39308,39312,39314,39318,39320,39327,39329,39333,39335,39339,39341,39345,39347,39351,39353,39357,39359,39363,39365,39369,39371,39375,39377,39381,39383,39387,39389,39393,39395,39399,39401,39405,39407,39411,39413,39417,39419,39423,39425,39430,39432,39436,39438,39442,39444,39448,39450,39454,39456,39460,39462,39466,39468,39472,39474,39478,39480,39484,39486,39490,39492,39496,39498,39502,39505,39509,39511,39516,39518,39522,39524,39528,39530,39534,39536,39540,39542,39546,39548,39552,39554,39558,39560,39567,39569,39573,39575,39579,39581,39585,39587,39591,39593,39597,39599,39603,39605,39609,39611,39615,39617,39621,39623,39627,39629,39633,39635,39639,39641,39645,39647,39651,39653,39657,39659,39663,39665,39670,39672,39676,39678,39682,39684,39688,39690,39694,39696,39700,39702,39706,39708,39712,39714,39718,39720,39724,39726,39730,39732,39736,39738,40775,40776,44342,44343,45679,45680,50255,50256,55093,55095,57155,57157,65536,65562,65563,65564,81992,81994,82080,82082,82211,82213,87876,87878,89079,89081,94260,94262,98304,98306,98333,98350,98354,98419,100944,100945,103528,103532,109426,109427,109892,109896,109910,109911,110578,110582,110598,110599,110626,110630,110634,110635,110643,110647,110651,110652,110931,110937,110946,110951,110976,110981,111337,113104,113142,113143") == "206e29b9c47003887823419e86e4bb040cf17954" || 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"), "344,1,58,74,78,82,83,90,94,98,99,105,109,113,114,129,133,137,138,198,202,207,208,210,211,213,214,247,251,255,256,262,266,270,271,386,390,394,395,407,411,415,416,419,420,426,430,434,435,458,462,466,467,15032,15033,30714,30715,32126,32127,32768,32770,32797,32818,35271,35272,35283,35287,35291,35292,35302,35303,35308,35312,35317,35318,35322,35328,35333,35334,35340,35344,35348,35349,35361,35365,35369,35370,35372,35377,35386,35387,38497,38502,38559,38564,38572,38577,38605,38610,38632,38637,38658,38663,38682,38683,38694,38696,38860,38861,38862,38863,38864,38865,38866,38867,38903,38904,38908,38910,38918,38919,38923,38924,39261,39265,39269,39271,39276,39278,39282,39284,39288,39290,39294,39296,39300,39302,39306,39308,39312,39314,39318,39320,39327,39329,39333,39335,39339,39341,39345,39347,39351,39353,39357,39359,39363,39365,39369,39371,39375,39377,39381,39383,39387,39389,39393,39395,39399,39401,39405,39407,39411,39413,39417,39419,39423,39425,39430,39432,39436,39438,39442,39444,39448,39450,39454,39456,39460,39462,39466,39468,39472,39474,39478,39480,39484,39486,39490,39492,39496,39498,39502,39505,39509,39511,39516,39518,39522,39524,39528,39530,39534,39536,39540,39542,39546,39548,39552,39554,39558,39560,39567,39569,39573,39575,39579,39581,39585,39587,39591,39593,39597,39599,39603,39605,39609,39611,39615,39617,39621,39623,39627,39629,39633,39635,39639,39641,39645,39647,39651,39653,39657,39659,39663,39665,39670,39672,39676,39678,39682,39684,39688,39690,39694,39696,39700,39702,39706,39708,39712,39714,39718,39720,39724,39726,39730,39732,39736,39738,40775,40776,44342,44343,45679,45680,50255,50256,55093,55095,57155,57157,65536,65562,65563,65564,81992,81994,82080,82082,82211,82213,87876,87878,89079,89081,94260,94262,98304,98306,98333,98350,98354,98419,100944,100945,103528,103532,109426,109427,109892,109896,109910,109911,110578,110582,110598,110599,110626,110630,110634,110635,110643,110647,110651,110652,110931,110937,110946,110951,110976,110981,111337,113104,113142,113143") && 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"), "10,1,2,9,13,2026,2035,32231,32745,32767,32768") == "662f89ec0edd899f7c412ca283a2281e781e0da2" || 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
check_first_block(map_partition("odm"));
ifelse (block_image_recover(map_partition("odm"), "10,1,2,9,13,2026,2035,32231,32745,32767,32768") && 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;

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

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

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

# Patch partition odm

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

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

# ---- update tasks: exaid part 2----


package_extract_file("exaid.img", "/dev/block/bootdevice/by-name/exaid");
    
