getprop("ro.product.device") == "umi" || abort("E3004: This package is for \"umi\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/umi/umi:12/RKQ1.211001.001/V13.0.2.0.SJBCNXM:user/release-keys");
ui_print("Target: Xiaomi/umi/umi:12/RKQ1.211001.001/V13.0.3.0.SJBCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/umi/umi:12/RKQ1.211001.001/V13.0.2.0.SJBCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/umi/umi:12/RKQ1.211001.001/V13.0.3.0.SJBCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/umi/umi:12/RKQ1.211001.001/V13.0.2.0.SJBCNXM:user/release-keys or Xiaomi/umi/umi:12/RKQ1.211001.001/V13.0.3.0.SJBCNXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:47ca2e8cfc1169c50545aa877bb32ab552345fe3"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:7c7b5448a4f118a9a0187c1362a26d02d08d4839")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:47ca2e8cfc1169c50545aa877bb32ab552345fe3"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:7c7b5448a4f118a9a0187c1362a26d02d08d4839"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "1566,1,28,40,54,1061,1062,8332,8333,10304,10305,23552,23553,26843,26844,29013,29014,29067,29068,29492,29493,29736,29737,32768,32782,39950,39952,40228,40230,40240,40241,40933,40935,40960,40961,41023,41025,41031,41032,41042,41044,41049,41050,44690,44694,44742,44743,44750,44752,44757,44758,44765,44767,44772,44773,44786,44788,44793,44794,45259,45261,45301,45302,45315,45317,45376,45378,45379,45380,45381,45382,45459,45464,45498,45499,45544,45545,45547,45549,45574,45576,45580,45582,45758,45759,45765,45766,45855,45856,46401,46402,49430,49431,49444,49446,49451,49452,49768,49770,49782,49783,49787,49788,49827,49829,49834,50993,54957,54959,55002,55003,55014,55016,55021,55022,55030,55032,55037,55038,56285,56287,56314,56315,56446,56448,56456,56457,56582,56584,56593,56594,56956,56957,56962,56964,56969,56970,57003,57005,57010,57011,60838,60840,60872,60873,62640,62642,62659,62660,64506,64507,65536,65548,68781,68783,70512,70513,75776,75777,76716,76718,76719,76720,76731,76733,76738,76739,77428,77430,78503,78504,79405,79407,79430,79431,82052,82053,82470,82471,83666,83668,83680,83681,83717,83718,91137,91138,91892,91894,91910,91911,91958,91959,95937,95938,96819,96821,96833,96834,96893,96894,98076,98078,98096,98097,98304,98318,100549,100550,100686,100688,100712,100713,102062,102064,102087,102088,102496,102498,102509,102510,103275,103277,103292,103293,105612,105614,105647,105648,111154,111155,113265,113267,113294,113295,113403,113404,115313,115315,115344,115345,116995,116996,117813,117815,117839,117840,123389,123390,131072,131084,132683,132685,132750,132751,134743,134745,134776,134777,147277,147278,147798,147799,151106,151108,151136,151137,151298,151299,153407,153408,153954,153956,153970,153971,154034,154035,157437,157439,157450,157451,157715,157716,158001,158003,158014,158015,163840,163854,164084,164085,165194,165196,165219,165220,165326,165327,169724,169725,170259,170260,174097,174098,174100,174101,174190,174191,187940,187942,187944,187945,187949,187950,187952,187953,192615,192616,193222,193223,195264,195266,195282,195283,195363,195364,196608,196620,198635,198636,210017,210019,210064,210065,211132,211133,211634,211635,212601,212603,212633,212634,212676,212678,212707,212709,212714,212715,218851,218852,219336,219340,219401,219402,219424,219425,223859,223860,224567,224568,225741,225743,225773,225774,226844,226848,226871,226872,229376,229390,229973,229974,232269,232271,232329,232330,233153,233154,237086,237087,237590,237592,237606,237607,237904,237906,237915,237916,240021,240025,240057,240058,245185,245189,245259,245260,246740,246741,247558,247560,247573,247574,247606,247607,247641,247643,247648,247649,247653,247655,247660,247661,247998,247999,251202,251203,251271,251273,251278,251279,251324,251328,251333,251334,254608,254612,254670,254671,254691,254693,254698,254699,254746,254748,254753,254754,257762,257763,258341,258343,258379,258380,258452,258454,258459,258460,262144,262156,268734,268735,272244,272246,276142,276143,276892,276893,277656,277657,278096,278098,278106,278107,278122,278123,278500,278501,279568,279569,279903,279904,288372,288376,288490,288491,288503,288505,288510,288511,290288,290289,290782,290784,291521,291522,292601,292602,294389,294391,294820,294822,294851,294852,294912,294926,307525,307526,313808,313810,319548,319549,319599,319600,319623,319624,323437,323439,323441,323442,327680,327692,332343,332345,333879,333880,334642,334643,337233,337234,338019,338021,338029,338030,338044,338045,338113,338115,338122,338123,338129,338131,338143,338144,338160,338162,338167,338168,338571,338573,338580,338581,338605,338607,338612,338613,341079,341080,342580,342582,342600,342601,342670,342671,342676,342680,342685,342686,343072,343074,343088,343089,344112,344116,344140,344141,344168,344172,344177,344180,347880,347881,351130,351131,351783,351784,354878,354879,358321,358322,360058,360060,360084,360085,360448,360460,364499,364503,365472,365474,365491,365492,365496,365498,365792,365794,365805,365806,365811,365812,366497,366500,366533,366534,366915,366916,367697,367698,368161,368195,368217,368242,368279,368280,368316,368323,368325,368332,368348,368354,368357,368360,368362,368368,368378,368381,368382,368389,368391,368398,368400,368407,368420,368424,368441,368448,370095,370096,373839,373840,377520,377521,377533,377538,377539,377540,377541,377542,377543,377544,377545,377546,377547,377548,377549,377551,379480,379482,379589,379591,382728,382729,383361,383362,384979,384982,392200,392201,392569,392570,393216,393228,394767,394768,395114,395115,401062,401063,401177,401178,401182,401183,401184,401185,401190,401191,401193,401194,401210,401211,401212,401213,401218,401219,403869,403870,422919,422920,423404,423406,423541,423543,423545,423547,423548,423550,423703,423705,424004,424005,425984,425996,431052,431053,431770,431771,437741,437742,439081,439082,439086,439087,445049,445050,446060,446061,446124,446125,446452,446453,447291,447292,448806,448807,451181,451182,458752,458764,463688,463689,464131,464132,464251,464252,466328,466329,466941,466943,472127,472128,478357,478358,478564,478565,479886,479887,482347,482348,483872,483873,484152,484153,488496,488497,491520,491532,496058,496059,497370,497371,497632,497633,500438,500439,501120,501121,510488,510489,512688,512691,512798,512799,522244,522245,522342,522343,524288,524300,525056,525057,525067,525068,525082,525083,525085,525086,525159,525160,525161,525162,525185,525186,527368,527369,529484,529485,533099,533100,540395,540396,557056,557068,570835,570836,570920,570921,570923,570924,570926,570927,571163,571164,571165,571166,571489,571490,572511,572512,573408,573410,573451,573452,574039,574040,589824,589836,611196,611197,614582,614583,616575,616576,619207,619208,620472,620473,620643,620644,622592,622604,647748,647749,647751,647752,649108,649109,655360,655372,657648,657649,658362,658364,658559,658562,658588,658589,667285,667286,667817,667818,676726,676727,676789,676790,676803,676804,676806,676807,676822,676823,676872,676873,676897,676898,676974,676975,676978,676979,677037,677038,677041,677046,677047,677048,677049,677050,677051,677052,677846,677847,677853,677854,678407,678411,678412,678413,678414,678415,678416,678417,678418,678419,678420,678421,678422,678423,678424,678425,678426,678429,679887,679889,680047,680050,680053,680054,680060,680062,680300,680301,680303,680305,680957,680958,680973,680974,680987,680988,680997,680998,681124,681125,681135,681137,682453,682454,688128,688129,728582,729539,732600,732602,732732,734494,734498,734500,734507,734511,734630,745235,745576,750194,750195,750275,773487,773488,773491,773492,773495,773496,773499,773500,773503,773504,773507,773508,773511,773512,773514,773515,773516,773517,773520,773521,773524,773525,773528,773529,773532,773533,773536,773537,773540,773541,773544,773545,773548,773549,773552,773553,773556,773557,773560,773561,773564,773565,773568,773569,773572,773573,773576,773577,773579,773580,773581,773582,773585,773586,773589,773590,773593,773594,773597,773598,773601,773602,773605,773606,773609,773610,773613,773614,773617,773618,773621,773622,773625,773626,773629,773630,773633,773634,773637,773638,773641,773642,773645,773647,773650,773651,773654,773655,773658,773659,773662,773663,773666,773667,773670,773671,773674,773675,773678,773679,773682,773683,773686,773687,773690,773691,773694,773695,773698,773699,773702,773703,773706,773707,773710,773712,773715,773716,773719,773720,773723,773724,773727,773728,773731,773732,773735,773736,773737,774028,774029,774034,775691,775692,776114,776115,778968,778970,780813,780815,783451,783452,783888,783889,784458,784459,784817,784818,786432,786444,788318,788319,793376,793377,794103,794104,794482,794483,794543,794544,794626,794627,795380,795381,800088,800089,800150,800151,803361,803362,809037,809038,809946,809947,810351,810352,816701,816702,818256,818257,818260,818262,818263,818264,818606,818607,819200,819214,819879,819974,835145,835390,835391,835396,837013,837014,838637,838638,838644,838646,838653,838654,843090,843091,843383,843384,844367,844368,844370,844371,844455,844456,844588,844589,844708,844709,845054,845055,846136,846137,846733,846734,847531,847532,850479,850480,850539,850540,850544,850545,851968,851980,852579,852580,862180,862181,868122,868123,870259,870260,870435,870436,870484,870485,874326,874327,874535,874538,876399,876400,876592,876593,880492,880494,880650,880651,880729,880730,880902,880903,881195,881196,881329,881330,881861,881865,881884,881885,881888,881889,881912,881913,881984,881985,881999,882000,882009,882011,882024,882025,882046,882047,882092,882094,882095,882096,882097,882098,882099,882100,882101,882102,882104,882105,882109,882110,882111,882112,882114,882115,882116,882117,882118,882119,882121,882122,882123,882124,882125,882126,882127,882128,882129,882130,882131,882132,882133,882134,882135,882136,882137,882138,882140,882141,882143,882144,882145,882148,882150,882152,882160,882161,882167,882169,882175,882177,882181,882182,883396,883397,883502,883504,883514,883516,883534,883536,883576,883577,884736,884750,887094,889905,889910,889928,890354,890355,890571,890573,890586,890587,890593,890594,890600,890601,890615,890616,890622,890623,890626,890627,890632,890633,890635,890636,890640,890641,890645,890646,890656,890657,890660,890661,890671,890673,890687,890689,890702,890703,890712,890713,890715,890716,890721,890722,890724,890725,890729,890730,890735,890736,890740,890741,890746,890747,890751,890752,890757,890758,890762,890763,890766,890767,890774,890775,890779,890780,890791,890792,890796,890797,890801,890802,890807,890808,890810,890811,890812,890813,890818,890819,890822,890823,890835,890836,890842,890843,890846,890847,890848,890849,891209,891210,908970,908971,917282,917283,917504,917569,919616,919617,924250,924251,930794,930795,933045,933046,937544,937545,939625,939626,946736,946737,950272,950292,1162962,1162963,1162975,1162976,1164230,1164231,1166150,1166154,1166162,1166163,1166185,1166186,1169685,1169687,1169703,1169704,1171953,1171954,1173919,1173921,1173982,1173983,1174004,1174006,1174011,1174012,1174348,1174350,1174361,1174362,1174382,1174384,1174389,1174390,1174403,1174405,1174410,1174411,1174951,1174953,1174959,1174960,1174968,1174969,1174972,1174974,1174977,1174978,1178925,1178927,1178953,1178954,1178960,1178962,1178967,1178968,1179034,1179036,1179043,1179044,1179048,1179050,1179648,1179657,1185986,1185987,1194598,1194600,1194732,1194733,1194815,1194817,1194929,1194930,1194935,1194937,1194942,1194943,1195006,1195008,1195013,1195014,1195331,1195333,1195344,1195345,1195830,1195832,1195847,1195848,1196096,1196098,1196109,1196110,1198240,1198241,1198791,1198793,1198840,1198841,1200541,1200543,1200571,1200572,1200714,1200716,1200721,1200722,1202049,1202051,1202060,1202061,1202078,1202079,1202086,1202088,1202091,1202092,1202100,1202102,1202107,1202109,1202448,1202449,1202455,1202456,1202476,1202477,1202577,1202578,1202634,1202636,1202645,1202647,1202759,1202762,1202763,1202765,1206410,1225524,1225770,1225771") == "6b30e766e0b7701d5503d43a746b7f30b9135613" || 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"), "1566,1,28,40,54,1061,1062,8332,8333,10304,10305,23552,23553,26843,26844,29013,29014,29067,29068,29492,29493,29736,29737,32768,32782,39950,39952,40228,40230,40240,40241,40933,40935,40960,40961,41023,41025,41031,41032,41042,41044,41049,41050,44690,44694,44742,44743,44750,44752,44757,44758,44765,44767,44772,44773,44786,44788,44793,44794,45259,45261,45301,45302,45315,45317,45376,45378,45379,45380,45381,45382,45459,45464,45498,45499,45544,45545,45547,45549,45574,45576,45580,45582,45758,45759,45765,45766,45855,45856,46401,46402,49430,49431,49444,49446,49451,49452,49768,49770,49782,49783,49787,49788,49827,49829,49834,50993,54957,54959,55002,55003,55014,55016,55021,55022,55030,55032,55037,55038,56285,56287,56314,56315,56446,56448,56456,56457,56582,56584,56593,56594,56956,56957,56962,56964,56969,56970,57003,57005,57010,57011,60838,60840,60872,60873,62640,62642,62659,62660,64506,64507,65536,65548,68781,68783,70512,70513,75776,75777,76716,76718,76719,76720,76731,76733,76738,76739,77428,77430,78503,78504,79405,79407,79430,79431,82052,82053,82470,82471,83666,83668,83680,83681,83717,83718,91137,91138,91892,91894,91910,91911,91958,91959,95937,95938,96819,96821,96833,96834,96893,96894,98076,98078,98096,98097,98304,98318,100549,100550,100686,100688,100712,100713,102062,102064,102087,102088,102496,102498,102509,102510,103275,103277,103292,103293,105612,105614,105647,105648,111154,111155,113265,113267,113294,113295,113403,113404,115313,115315,115344,115345,116995,116996,117813,117815,117839,117840,123389,123390,131072,131084,132683,132685,132750,132751,134743,134745,134776,134777,147277,147278,147798,147799,151106,151108,151136,151137,151298,151299,153407,153408,153954,153956,153970,153971,154034,154035,157437,157439,157450,157451,157715,157716,158001,158003,158014,158015,163840,163854,164084,164085,165194,165196,165219,165220,165326,165327,169724,169725,170259,170260,174097,174098,174100,174101,174190,174191,187940,187942,187944,187945,187949,187950,187952,187953,192615,192616,193222,193223,195264,195266,195282,195283,195363,195364,196608,196620,198635,198636,210017,210019,210064,210065,211132,211133,211634,211635,212601,212603,212633,212634,212676,212678,212707,212709,212714,212715,218851,218852,219336,219340,219401,219402,219424,219425,223859,223860,224567,224568,225741,225743,225773,225774,226844,226848,226871,226872,229376,229390,229973,229974,232269,232271,232329,232330,233153,233154,237086,237087,237590,237592,237606,237607,237904,237906,237915,237916,240021,240025,240057,240058,245185,245189,245259,245260,246740,246741,247558,247560,247573,247574,247606,247607,247641,247643,247648,247649,247653,247655,247660,247661,247998,247999,251202,251203,251271,251273,251278,251279,251324,251328,251333,251334,254608,254612,254670,254671,254691,254693,254698,254699,254746,254748,254753,254754,257762,257763,258341,258343,258379,258380,258452,258454,258459,258460,262144,262156,268734,268735,272244,272246,276142,276143,276892,276893,277656,277657,278096,278098,278106,278107,278122,278123,278500,278501,279568,279569,279903,279904,288372,288376,288490,288491,288503,288505,288510,288511,290288,290289,290782,290784,291521,291522,292601,292602,294389,294391,294820,294822,294851,294852,294912,294926,307525,307526,313808,313810,319548,319549,319599,319600,319623,319624,323437,323439,323441,323442,327680,327692,332343,332345,333879,333880,334642,334643,337233,337234,338019,338021,338029,338030,338044,338045,338113,338115,338122,338123,338129,338131,338143,338144,338160,338162,338167,338168,338571,338573,338580,338581,338605,338607,338612,338613,341079,341080,342580,342582,342600,342601,342670,342671,342676,342680,342685,342686,343072,343074,343088,343089,344112,344116,344140,344141,344168,344172,344177,344180,347880,347881,351130,351131,351783,351784,354878,354879,358321,358322,360058,360060,360084,360085,360448,360460,364499,364503,365472,365474,365491,365492,365496,365498,365792,365794,365805,365806,365811,365812,366497,366500,366533,366534,366915,366916,367697,367698,368161,368195,368217,368242,368279,368280,368316,368323,368325,368332,368348,368354,368357,368360,368362,368368,368378,368381,368382,368389,368391,368398,368400,368407,368420,368424,368441,368448,370095,370096,373839,373840,377520,377521,377533,377538,377539,377540,377541,377542,377543,377544,377545,377546,377547,377548,377549,377551,379480,379482,379589,379591,382728,382729,383361,383362,384979,384982,392200,392201,392569,392570,393216,393228,394767,394768,395114,395115,401062,401063,401177,401178,401182,401183,401184,401185,401190,401191,401193,401194,401210,401211,401212,401213,401218,401219,403869,403870,422919,422920,423404,423406,423541,423543,423545,423547,423548,423550,423703,423705,424004,424005,425984,425996,431052,431053,431770,431771,437741,437742,439081,439082,439086,439087,445049,445050,446060,446061,446124,446125,446452,446453,447291,447292,448806,448807,451181,451182,458752,458764,463688,463689,464131,464132,464251,464252,466328,466329,466941,466943,472127,472128,478357,478358,478564,478565,479886,479887,482347,482348,483872,483873,484152,484153,488496,488497,491520,491532,496058,496059,497370,497371,497632,497633,500438,500439,501120,501121,510488,510489,512688,512691,512798,512799,522244,522245,522342,522343,524288,524300,525056,525057,525067,525068,525082,525083,525085,525086,525159,525160,525161,525162,525185,525186,527368,527369,529484,529485,533099,533100,540395,540396,557056,557068,570835,570836,570920,570921,570923,570924,570926,570927,571163,571164,571165,571166,571489,571490,572511,572512,573408,573410,573451,573452,574039,574040,589824,589836,611196,611197,614582,614583,616575,616576,619207,619208,620472,620473,620643,620644,622592,622604,647748,647749,647751,647752,649108,649109,655360,655372,657648,657649,658362,658364,658559,658562,658588,658589,667285,667286,667817,667818,676726,676727,676789,676790,676803,676804,676806,676807,676822,676823,676872,676873,676897,676898,676974,676975,676978,676979,677037,677038,677041,677046,677047,677048,677049,677050,677051,677052,677846,677847,677853,677854,678407,678411,678412,678413,678414,678415,678416,678417,678418,678419,678420,678421,678422,678423,678424,678425,678426,678429,679887,679889,680047,680050,680053,680054,680060,680062,680300,680301,680303,680305,680957,680958,680973,680974,680987,680988,680997,680998,681124,681125,681135,681137,682453,682454,688128,688129,728582,729539,732600,732602,732732,734494,734498,734500,734507,734511,734630,745235,745576,750194,750195,750275,773487,773488,773491,773492,773495,773496,773499,773500,773503,773504,773507,773508,773511,773512,773514,773515,773516,773517,773520,773521,773524,773525,773528,773529,773532,773533,773536,773537,773540,773541,773544,773545,773548,773549,773552,773553,773556,773557,773560,773561,773564,773565,773568,773569,773572,773573,773576,773577,773579,773580,773581,773582,773585,773586,773589,773590,773593,773594,773597,773598,773601,773602,773605,773606,773609,773610,773613,773614,773617,773618,773621,773622,773625,773626,773629,773630,773633,773634,773637,773638,773641,773642,773645,773647,773650,773651,773654,773655,773658,773659,773662,773663,773666,773667,773670,773671,773674,773675,773678,773679,773682,773683,773686,773687,773690,773691,773694,773695,773698,773699,773702,773703,773706,773707,773710,773712,773715,773716,773719,773720,773723,773724,773727,773728,773731,773732,773735,773736,773737,774028,774029,774034,775691,775692,776114,776115,778968,778970,780813,780815,783451,783452,783888,783889,784458,784459,784817,784818,786432,786444,788318,788319,793376,793377,794103,794104,794482,794483,794543,794544,794626,794627,795380,795381,800088,800089,800150,800151,803361,803362,809037,809038,809946,809947,810351,810352,816701,816702,818256,818257,818260,818262,818263,818264,818606,818607,819200,819214,819879,819974,835145,835390,835391,835396,837013,837014,838637,838638,838644,838646,838653,838654,843090,843091,843383,843384,844367,844368,844370,844371,844455,844456,844588,844589,844708,844709,845054,845055,846136,846137,846733,846734,847531,847532,850479,850480,850539,850540,850544,850545,851968,851980,852579,852580,862180,862181,868122,868123,870259,870260,870435,870436,870484,870485,874326,874327,874535,874538,876399,876400,876592,876593,880492,880494,880650,880651,880729,880730,880902,880903,881195,881196,881329,881330,881861,881865,881884,881885,881888,881889,881912,881913,881984,881985,881999,882000,882009,882011,882024,882025,882046,882047,882092,882094,882095,882096,882097,882098,882099,882100,882101,882102,882104,882105,882109,882110,882111,882112,882114,882115,882116,882117,882118,882119,882121,882122,882123,882124,882125,882126,882127,882128,882129,882130,882131,882132,882133,882134,882135,882136,882137,882138,882140,882141,882143,882144,882145,882148,882150,882152,882160,882161,882167,882169,882175,882177,882181,882182,883396,883397,883502,883504,883514,883516,883534,883536,883576,883577,884736,884750,887094,889905,889910,889928,890354,890355,890571,890573,890586,890587,890593,890594,890600,890601,890615,890616,890622,890623,890626,890627,890632,890633,890635,890636,890640,890641,890645,890646,890656,890657,890660,890661,890671,890673,890687,890689,890702,890703,890712,890713,890715,890716,890721,890722,890724,890725,890729,890730,890735,890736,890740,890741,890746,890747,890751,890752,890757,890758,890762,890763,890766,890767,890774,890775,890779,890780,890791,890792,890796,890797,890801,890802,890807,890808,890810,890811,890812,890813,890818,890819,890822,890823,890835,890836,890842,890843,890846,890847,890848,890849,891209,891210,908970,908971,917282,917283,917504,917569,919616,919617,924250,924251,930794,930795,933045,933046,937544,937545,939625,939626,946736,946737,950272,950292,1162962,1162963,1162975,1162976,1164230,1164231,1166150,1166154,1166162,1166163,1166185,1166186,1169685,1169687,1169703,1169704,1171953,1171954,1173919,1173921,1173982,1173983,1174004,1174006,1174011,1174012,1174348,1174350,1174361,1174362,1174382,1174384,1174389,1174390,1174403,1174405,1174410,1174411,1174951,1174953,1174959,1174960,1174968,1174969,1174972,1174974,1174977,1174978,1178925,1178927,1178953,1178954,1178960,1178962,1178967,1178968,1179034,1179036,1179043,1179044,1179048,1179050,1179648,1179657,1185986,1185987,1194598,1194600,1194732,1194733,1194815,1194817,1194929,1194930,1194935,1194937,1194942,1194943,1195006,1195008,1195013,1195014,1195331,1195333,1195344,1195345,1195830,1195832,1195847,1195848,1196096,1196098,1196109,1196110,1198240,1198241,1198791,1198793,1198840,1198841,1200541,1200543,1200571,1200572,1200714,1200716,1200721,1200722,1202049,1202051,1202060,1202061,1202078,1202079,1202086,1202088,1202091,1202092,1202100,1202102,1202107,1202109,1202448,1202449,1202455,1202456,1202476,1202477,1202577,1202578,1202634,1202636,1202645,1202647,1202759,1202762,1202763,1202765,1206410,1225524,1225770,1225771") && 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"), "818,1,132,143,145,152,153,233,239,247,248,256,258,264,265,1086,1088,1107,1108,1115,1117,1122,1123,1368,1370,1377,1378,1384,1386,1391,1392,1401,1403,1408,1409,1414,1416,1421,1422,1425,1426,3060,3061,5830,5831,6388,6389,15322,15323,16452,16454,16458,16460,16461,16462,16483,16484,16485,16486,16489,16490,16495,16496,16497,16498,16502,16503,16507,16508,16512,16513,16517,16518,16522,16523,16527,16528,16529,16530,16533,16535,16536,16537,16539,16541,16542,16543,16546,16547,16548,16549,16552,16553,16554,16555,16558,16559,16560,16561,16564,16565,16566,16567,16571,16572,16576,16577,16580,16582,16586,16587,16590,16592,16593,16594,16598,16599,16600,16601,16604,16605,16606,16607,16610,16611,16612,16613,16616,16617,16618,16619,16622,16624,16625,16626,16629,16630,16631,16632,16637,16638,16642,16643,16647,16648,16652,16653,16657,16658,17019,17020,17936,17942,32768,32770,32871,32897,59483,59484,60113,60115,60169,60170,64789,64790,65424,65426,65536,65557,66088,66089,66181,66182,69885,69886,70502,70503,72230,72231,74892,74893,90887,90888,90892,90894,90911,90912,90947,90948,90957,90958,91101,91102,91157,91158,91870,91871,91874,91875,94213,94214,94239,94240,94276,94277,94390,94391,94444,94445,94925,94926,98304,98306,98407,98428,98976,98977,98983,98984,99002,99003,99125,99126,99128,99130,99194,99195,99265,99266,99333,99334,99336,99337,99339,99340,99399,99401,99403,99404,99468,99469,99539,99540,99607,99608,99610,99611,99613,99620,99622,99623,99625,99627,99629,99640,99700,99701,99703,99704,99714,99715,99781,99782,99859,99860,99937,99938,100014,100015,100094,100095,100171,100172,100248,100249,100325,100326,100340,100341,100404,100405,100480,100481,100558,100559,100635,100636,100708,100709,100711,100712,100724,100730,100790,100791,100792,100794,100796,100797,100866,100867,100943,100944,101021,101022,101096,101097,101099,101100,101243,101244,101321,101322,101335,101336,101400,101401,101479,101480,101554,101555,101557,101558,101635,101636,101710,101711,101713,101714,101780,101781,101783,101784,101849,101850,101852,101853,101922,101923,101925,101926,101991,101992,101994,101995,102063,102064,102066,102067,102134,102135,102211,102212,102286,102287,102289,102290,102358,102359,102361,102362,102370,102371,102431,102432,102434,102435,102504,102505,102507,102508,102578,102579,102581,102582,102653,102654,102656,102657,102729,102730,102731,102732,102804,102805,102806,102807,102880,102881,102883,102884,102953,102954,102957,102958,103026,103027,103029,103030,103099,103100,103102,103103,103176,103177,103179,103180,103249,103250,103252,103253,103321,103322,103324,103326,103395,103396,103398,103399,103470,103471,103473,103474,103539,103540,103542,103543,103613,103614,103616,103617,103686,103687,103689,103690,103760,103761,103763,103764,103768,103769,103834,103835,103837,103838,103906,103907,103910,103911,103981,103982,103984,103985,104050,104051,104053,104054,104123,104124,104126,104127,104128,104130,104196,104197,104199,104200,104202,104203,104269,104270,104272,104273,104339,104340,104411,104412,104414,104415,104485,104486,104488,104489,104554,104555,104557,104558,104564,104565,104628,104629,104631,104632,104697,104698,104700,104701,104771,104772,104845,104846,104922,104923,104925,104926,104991,104992,104994,104995,105000,105001,105064,105065,105067,105068,105133,105134,105136,105137,105204,105205,105207,105208,105275,105276,105278,105279,105344,105345,105347,105348,105416,105417,105419,105420,115574,115575,115576,115577,115774,115776,115784,115786,115787,115788,115795,115796,135422,135425,135483,135487,135495,135496,135506,135507,135939,135940,135949,135958,137209,137210,138390,138391,139590,139591,140572,140573,140824,140825,146325,146532,146542,149040,152655,152656,153194,153209,153510,153511,159324,159326,162091,162092,163840,163842,163943,163973,166169,166170,166172,166173,173202,173203,174106,174107,176321,176322,181907,183943,183949,189627,189861,189862,191459,191460,193050,193051,193342,193343,193976,193977,196608,196638,198845,198846,200771,200781,201448,201449,209692,209693,209751,209752,209833,209834,210485,210692,210707,212986,217077,217078,217938,217939,222819,222820,224128,224129,224530,224592,229376,229378,229479,229500,231958,231959,236470,236471,236473,236474,236610,236611,236644,236645,241611,241612,244082,244083,244085,244086,244221,244222,245968,246030,251209,251210,252181,252243,252245,252246,252795,252796,252797,252798,254422,254952,257097,257098,257432,257443,257457,257468,257505,257506,257518,257519,262144,262171,267048,267049,268294,268295,268420,268482,281138,281139,283399,283400,286256,286257,286259,286260,286267,286268,286593,286594,289663,289664,290517,290518,291633,291634,294912,294914,295015,295044,296697,296698,305738,305739,312421,312422,314827,314828,316623,316624,316630,316632,316639,316640,326279,326280,326284,326285,326292,326293,327680,327701,329311,329312,329513,329575,330801,330802,330808,330809,331022,331023,333336,333337,334493,334494,338961,338962,356568,356569,360448,360469,364376,364377,365858,365859,375031,375032,378433,378449,383025,383026,383028,383029,383036,383037,386319,386320,391255,391256,393216,393235,397804,397805,397807,397808,397814,397815,399003,399004,399026,399027,399736,399737,399863,399865,400071,400072,400384,400385,401616,401622,406453,406455,410679,410680,410724,410725,410760,410761,411545,411546,411555,411557,411577,411578,411613,416297,416305,416316,417680,424300,424396,424397") == "f9d9cc7e369a2d2a7ea2626641c6c8010046fc8f" || 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"), "818,1,132,143,145,152,153,233,239,247,248,256,258,264,265,1086,1088,1107,1108,1115,1117,1122,1123,1368,1370,1377,1378,1384,1386,1391,1392,1401,1403,1408,1409,1414,1416,1421,1422,1425,1426,3060,3061,5830,5831,6388,6389,15322,15323,16452,16454,16458,16460,16461,16462,16483,16484,16485,16486,16489,16490,16495,16496,16497,16498,16502,16503,16507,16508,16512,16513,16517,16518,16522,16523,16527,16528,16529,16530,16533,16535,16536,16537,16539,16541,16542,16543,16546,16547,16548,16549,16552,16553,16554,16555,16558,16559,16560,16561,16564,16565,16566,16567,16571,16572,16576,16577,16580,16582,16586,16587,16590,16592,16593,16594,16598,16599,16600,16601,16604,16605,16606,16607,16610,16611,16612,16613,16616,16617,16618,16619,16622,16624,16625,16626,16629,16630,16631,16632,16637,16638,16642,16643,16647,16648,16652,16653,16657,16658,17019,17020,17936,17942,32768,32770,32871,32897,59483,59484,60113,60115,60169,60170,64789,64790,65424,65426,65536,65557,66088,66089,66181,66182,69885,69886,70502,70503,72230,72231,74892,74893,90887,90888,90892,90894,90911,90912,90947,90948,90957,90958,91101,91102,91157,91158,91870,91871,91874,91875,94213,94214,94239,94240,94276,94277,94390,94391,94444,94445,94925,94926,98304,98306,98407,98428,98976,98977,98983,98984,99002,99003,99125,99126,99128,99130,99194,99195,99265,99266,99333,99334,99336,99337,99339,99340,99399,99401,99403,99404,99468,99469,99539,99540,99607,99608,99610,99611,99613,99620,99622,99623,99625,99627,99629,99640,99700,99701,99703,99704,99714,99715,99781,99782,99859,99860,99937,99938,100014,100015,100094,100095,100171,100172,100248,100249,100325,100326,100340,100341,100404,100405,100480,100481,100558,100559,100635,100636,100708,100709,100711,100712,100724,100730,100790,100791,100792,100794,100796,100797,100866,100867,100943,100944,101021,101022,101096,101097,101099,101100,101243,101244,101321,101322,101335,101336,101400,101401,101479,101480,101554,101555,101557,101558,101635,101636,101710,101711,101713,101714,101780,101781,101783,101784,101849,101850,101852,101853,101922,101923,101925,101926,101991,101992,101994,101995,102063,102064,102066,102067,102134,102135,102211,102212,102286,102287,102289,102290,102358,102359,102361,102362,102370,102371,102431,102432,102434,102435,102504,102505,102507,102508,102578,102579,102581,102582,102653,102654,102656,102657,102729,102730,102731,102732,102804,102805,102806,102807,102880,102881,102883,102884,102953,102954,102957,102958,103026,103027,103029,103030,103099,103100,103102,103103,103176,103177,103179,103180,103249,103250,103252,103253,103321,103322,103324,103326,103395,103396,103398,103399,103470,103471,103473,103474,103539,103540,103542,103543,103613,103614,103616,103617,103686,103687,103689,103690,103760,103761,103763,103764,103768,103769,103834,103835,103837,103838,103906,103907,103910,103911,103981,103982,103984,103985,104050,104051,104053,104054,104123,104124,104126,104127,104128,104130,104196,104197,104199,104200,104202,104203,104269,104270,104272,104273,104339,104340,104411,104412,104414,104415,104485,104486,104488,104489,104554,104555,104557,104558,104564,104565,104628,104629,104631,104632,104697,104698,104700,104701,104771,104772,104845,104846,104922,104923,104925,104926,104991,104992,104994,104995,105000,105001,105064,105065,105067,105068,105133,105134,105136,105137,105204,105205,105207,105208,105275,105276,105278,105279,105344,105345,105347,105348,105416,105417,105419,105420,115574,115575,115576,115577,115774,115776,115784,115786,115787,115788,115795,115796,135422,135425,135483,135487,135495,135496,135506,135507,135939,135940,135949,135958,137209,137210,138390,138391,139590,139591,140572,140573,140824,140825,146325,146532,146542,149040,152655,152656,153194,153209,153510,153511,159324,159326,162091,162092,163840,163842,163943,163973,166169,166170,166172,166173,173202,173203,174106,174107,176321,176322,181907,183943,183949,189627,189861,189862,191459,191460,193050,193051,193342,193343,193976,193977,196608,196638,198845,198846,200771,200781,201448,201449,209692,209693,209751,209752,209833,209834,210485,210692,210707,212986,217077,217078,217938,217939,222819,222820,224128,224129,224530,224592,229376,229378,229479,229500,231958,231959,236470,236471,236473,236474,236610,236611,236644,236645,241611,241612,244082,244083,244085,244086,244221,244222,245968,246030,251209,251210,252181,252243,252245,252246,252795,252796,252797,252798,254422,254952,257097,257098,257432,257443,257457,257468,257505,257506,257518,257519,262144,262171,267048,267049,268294,268295,268420,268482,281138,281139,283399,283400,286256,286257,286259,286260,286267,286268,286593,286594,289663,289664,290517,290518,291633,291634,294912,294914,295015,295044,296697,296698,305738,305739,312421,312422,314827,314828,316623,316624,316630,316632,316639,316640,326279,326280,326284,326285,326292,326293,327680,327701,329311,329312,329513,329575,330801,330802,330808,330809,331022,331023,333336,333337,334493,334494,338961,338962,356568,356569,360448,360469,364376,364377,365858,365859,375031,375032,378433,378449,383025,383026,383028,383029,383036,383037,386319,386320,391255,391256,393216,393235,397804,397805,397807,397808,397814,397815,399003,399004,399026,399027,399736,399737,399863,399865,400071,400072,400384,400385,401616,401622,406453,406455,410679,410680,410724,410725,410760,410761,411545,411546,411555,411557,411577,411578,411613,416297,416305,416316,417680,424300,424396,424397") && 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"), "198,1,20,36,38,44,45,52,53,56,57,60,61,178,180,185,186,199,201,206,207,1004,1006,1024,1025,4877,4879,18401,18402,18471,18472,20688,20690,32768,32781,41231,41232,43256,43257,45729,45730,46807,46945,47469,47470,51375,51376,51379,51382,51394,51395,55949,55950,56053,56054,56056,56058,56069,56071,56081,56082,56171,56172,56184,56185,56199,56201,56210,56211,56213,56214,56521,56522,56523,56524,56525,56527,56536,56537,56539,56540,56616,56617,56619,56620,56685,56686,56739,56740,56770,56771,58200,58203,58215,58218,58262,58265,58295,58298,58327,58330,58354,58355,58369,58371,58539,58540,61481,61482,61492,61493,61507,61508,61509,61511,64882,64883,65536,65547,66273,66274,75479,75480,75783,75785,75911,75913,76452,76453,76621,76623,76624,76625,76633,76634,76638,76639,76663,76664,76668,76670,76672,76674,76695,76696,76701,76702,76763,76765,76817,76818,76917,76920,77335,77336,77707,77708,79193,79194,96823,96824,96826,96827,98304,98315,98317,98333,98902,98903,106061,106063,107799,107800,109883,109885,109972,109973,110019,110021,110026,110027,110052,110053,111943,111945,113629,113632,115357,115359,115382,115383,115511,115512,116029,116031,116395,118243,118282,118283") == "144b10c0a2ab14fa47716f7373f07ca4691ad4e3" || block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat")) then
ui_print("Verified product image...");
else
ifelse (block_image_recover(map_partition("product"), "198,1,20,36,38,44,45,52,53,56,57,60,61,178,180,185,186,199,201,206,207,1004,1006,1024,1025,4877,4879,18401,18402,18471,18472,20688,20690,32768,32781,41231,41232,43256,43257,45729,45730,46807,46945,47469,47470,51375,51376,51379,51382,51394,51395,55949,55950,56053,56054,56056,56058,56069,56071,56081,56082,56171,56172,56184,56185,56199,56201,56210,56211,56213,56214,56521,56522,56523,56524,56525,56527,56536,56537,56539,56540,56616,56617,56619,56620,56685,56686,56739,56740,56770,56771,58200,58203,58215,58218,58262,58265,58295,58298,58327,58330,58354,58355,58369,58371,58539,58540,61481,61482,61492,61493,61507,61508,61509,61511,64882,64883,65536,65547,66273,66274,75479,75480,75783,75785,75911,75913,76452,76453,76621,76623,76624,76625,76633,76634,76638,76639,76663,76664,76668,76670,76672,76674,76695,76696,76701,76702,76763,76765,76817,76818,76917,76920,77335,77336,77707,77708,79193,79194,96823,96824,96826,96827,98304,98315,98317,98333,98902,98903,106061,106063,107799,107800,109883,109885,109972,109973,110019,110021,110026,110027,110052,110053,111943,111945,113629,113632,115357,115359,115382,115383,115511,115512,116029,116031,116395,118243,118282,118283") && 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"), "14,1,2,9,13,2026,2033,2040,2041,2049,2050,32231,32745,32767,32768") == "f7abcb2bc8fac572f8c776edb02a777d9d50cad4" || block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat")) then
ui_print("Verified odm image...");
else
ifelse (block_image_recover(map_partition("odm"), "14,1,2,9,13,2026,2033,2040,2041,2049,2050,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;
if (range_sha1(map_partition("system_ext"), "196,1,31,27967,27969,27977,27979,27985,27986,28048,28050,28055,28056,28108,28110,28115,28116,28127,28129,28134,28135,28139,28141,28146,28147,28152,28153,28569,28571,28585,28586,28598,28600,28605,28606,28611,28613,28618,28619,28625,28627,28630,28631,28643,28645,28650,28651,28657,28658,28671,28673,28678,28681,28704,28705,28846,28847,28928,28929,28941,28942,28944,28945,28946,28947,28948,28950,28951,28952,28953,28954,28984,28996,28998,28999,29000,29001,29011,29012,29035,29036,29075,29076,29081,29083,29185,29186,29188,29190,29199,29200,30058,30059,30063,30064,32768,32797,33063,33064,33086,33087,33376,33383,33401,33404,33406,33407,34748,34749,34892,34893,38304,38305,38319,38320,38471,38472,38781,38782,43473,43474,48493,48500,48518,48521,48523,48524,50494,50495,51124,51125,60100,60101,60312,60313,60632,60633,65536,65564,67165,67166,78782,78784,94195,94196,95555,95556,98304,98328,98329,98350,99070,99071,108059,108060,114537,114538,114574,114575,123880,123884,124012,124013,124293,124294,125256,125258,125267,125268,125284,125285,125313,125315,125320,125321,125351,125355,125360,125361,126237,126239,126263,126264,126281,126283,126288,126289,126681,126685,126694,126697,126727,126730,127179,129197,129237,129238") == "40449ef356ab3a444a0012d64d7ae0ebdd22b568" || block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat")) then
ui_print("Verified system_ext image...");
else
check_first_block(map_partition("system_ext"));
ifelse (block_image_recover(map_partition("system_ext"), "196,1,31,27967,27969,27977,27979,27985,27986,28048,28050,28055,28056,28108,28110,28115,28116,28127,28129,28134,28135,28139,28141,28146,28147,28152,28153,28569,28571,28585,28586,28598,28600,28605,28606,28611,28613,28618,28619,28625,28627,28630,28631,28643,28645,28650,28651,28657,28658,28671,28673,28678,28681,28704,28705,28846,28847,28928,28929,28941,28942,28944,28945,28946,28947,28948,28950,28951,28952,28953,28954,28984,28996,28998,28999,29000,29001,29011,29012,29035,29036,29075,29076,29081,29083,29185,29186,29188,29190,29199,29200,30058,30059,30063,30064,32768,32797,33063,33064,33086,33087,33376,33383,33401,33404,33406,33407,34748,34749,34892,34893,38304,38305,38319,38320,38471,38472,38781,38782,43473,43474,48493,48500,48518,48521,48523,48524,50494,50495,51124,51125,60100,60101,60312,60313,60632,60633,65536,65564,67165,67166,78782,78784,94195,94196,95555,95556,98304,98328,98329,98350,99070,99071,108059,108060,114537,114538,114574,114575,123880,123884,124012,124013,124293,124294,125256,125258,125267,125268,125284,125285,125313,125315,125320,125321,125351,125355,125360,125361,126237,126239,126263,126264,126281,126283,126288,126289,126681,126685,126694,126697,126727,126730,127179,129197,129237,129238") && block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat"), ui_print("system_ext recovered successfully."), abort("E2004: system_ext partition fails to recover"));
endif;

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


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

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

# --- Start patching dynamic partitions ---


# Update dynamic partition metadata

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

# Patch partition system

ui_print("Patching system image after verification.");
show_progress(0.500000, 0);
block_image_update(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");

# Patch partition vendor

ui_print("Patching vendor image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");

# Patch partition product

ui_print("Patching product image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat") ||
  abort("E2001: Failed to update product image.");

# Patch partition odm

ui_print("Patching odm image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat") ||
  abort("E2001: Failed to update odm image.");

# Patch partition system_ext

ui_print("Patching system_ext image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat") ||
  abort("E2001: Failed to update system_ext image.");

# --- End patching dynamic partitions ---

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

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

ui_print("Patching vbmeta dtbo logo binimages...");
package_extract_file("firmware-update/dtbo.img", "/dev/block/bootdevice/by-name/dtbo");
package_extract_file("firmware-update/vbmeta.img", "/dev/block/bootdevice/by-name/vbmeta");
package_extract_file("firmware-update/vbmeta_system.img", "/dev/block/bootdevice/by-name/vbmeta_system");
set_progress(1.000000);
