getprop("ro.product.device") == "surya" || abort("E3004: This package is for \"surya\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: POCO/surya_id/surya:12/RKQ1.211019.001/V13.0.1.0.SJGIDXM:user/release-keys");
ui_print("Target: POCO/surya_id/surya:12/RKQ1.211019.001/V13.0.3.0.SJGIDXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "POCO/surya_id/surya:12/RKQ1.211019.001/V13.0.1.0.SJGIDXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "POCO/surya_id/surya:12/RKQ1.211019.001/V13.0.3.0.SJGIDXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of POCO/surya_id/surya:12/RKQ1.211019.001/V13.0.1.0.SJGIDXM:user/release-keys or POCO/surya_id/surya:12/RKQ1.211019.001/V13.0.3.0.SJGIDXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:12eb02a6d675240e43febd66b34bb7a915076fd6"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:9c79298b6892dd6364ab6af32016fc09e74217a5")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:12eb02a6d675240e43febd66b34bb7a915076fd6"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:9c79298b6892dd6364ab6af32016fc09e74217a5"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "1594,1,31,44,58,114,115,659,660,9725,9726,11914,11915,32768,32785,39610,39611,39838,39839,40228,40230,40303,40304,40318,40319,44120,44123,44130,44131,44138,44139,44152,44153,44220,44222,44315,44316,44454,44455,44487,44488,44628,44945,44946,45981,50151,50152,50174,50175,51419,51420,51508,51509,51583,51584,51613,51614,52270,52271,52276,52277,52310,52311,55071,55072,56484,56485,56515,56516,57636,57638,57639,57640,58417,58418,59427,59428,65536,65551,66785,66786,67444,67445,69602,69603,69621,69622,69804,69805,69859,69860,70429,70430,72616,72617,78009,78010,83659,83660,84894,84895,85509,85510,90355,90356,91349,91350,92512,92513,93849,93850,98304,98321,100402,100403,100977,100978,108646,108647,108946,108947,118375,118376,120560,120561,121977,121978,124501,124502,126113,126114,127271,127272,131072,131087,134551,134552,136101,136102,137676,137677,139704,139705,141905,141906,144828,144829,163840,163857,164134,164135,169046,169047,169055,169056,170953,170954,173286,173287,173866,173867,175016,175017,175161,175162,182785,182786,188560,188561,189146,189147,191049,191050,195612,195613,196608,196623,197088,197089,197110,197112,197141,197142,202430,202431,204338,204341,205109,205110,208801,208802,209257,209258,210655,210658,212117,212118,213654,213655,215346,215347,217472,217473,220377,220378,220787,220788,220790,220791,222191,222192,222196,222197,222203,222204,222520,222521,225267,225268,225271,225272,225294,225297,227216,227219,227503,227504,227551,227552,228103,228104,229376,229393,230383,230384,230555,230556,230562,230563,230648,230649,232178,232179,233264,233265,235550,235551,235558,235559,235565,235566,235590,235592,237279,237280,238892,238893,239211,239212,239213,239214,240846,240847,242294,242298,243373,243374,243674,243675,244345,244346,244566,244567,244949,244950,245731,245732,246187,246205,246276,246277,247266,247267,251009,251010,254321,254322,254334,254340,254341,254342,254343,254344,254345,254346,254347,254348,254349,254350,254351,254352,254353,254354,254355,254356,254357,254358,254359,254360,254361,254362,254363,254364,254365,254366,254367,254368,254369,254370,254371,254372,254373,254374,254375,254376,254377,254378,254379,254380,254381,254382,254383,254384,254385,254386,254387,254388,254389,254390,254391,254392,254393,254394,254395,254396,254397,254398,254399,254400,254401,254402,254403,254404,254405,254406,254407,254408,254409,254410,254411,254412,254413,254414,254415,254416,254417,254418,254419,254420,254421,254422,254423,254424,254425,254426,254427,254428,254429,254430,254431,254432,254433,254434,254435,254436,254437,254438,254439,254440,254441,254442,254443,254444,254445,254446,254447,254448,254449,254450,254451,254452,254453,254454,254455,254456,254457,254458,254459,254460,254461,254462,254463,254464,254465,254466,254467,254468,254469,254470,254471,254472,254473,254474,254475,254476,254477,254478,254479,254480,254481,254482,254483,254484,254485,254486,254487,254488,254489,254490,254491,254492,254493,254494,254495,254496,254497,254498,254499,254500,254501,254502,254503,254504,254505,254506,254507,254508,254509,254510,254511,254512,254513,254514,254515,254516,254517,254518,254519,254520,254521,254522,254523,254524,254525,254526,254527,254528,254529,254530,254531,254532,254533,254534,254535,254536,254537,254538,254539,254540,254541,254542,254543,254544,254545,254546,254547,254548,254549,254550,254551,254552,254553,254554,254555,254556,254557,254558,254559,254560,254561,254562,254563,254564,254565,254566,254567,254568,254569,254570,254571,254572,254573,254574,254575,254576,254577,254578,254579,254580,254581,254582,254583,254584,254585,254586,254587,254588,254589,254590,254591,254592,254593,254594,254595,254596,254597,254598,254599,254600,254601,254602,254603,254604,254605,254606,254607,254608,254609,254610,254611,254612,254613,254614,254615,254616,254617,254618,254619,254620,254621,254622,254623,254624,254625,254626,254627,254628,254629,254630,254631,254632,254633,254634,254635,254636,254637,254638,254639,254640,254641,254642,254643,254644,254645,254646,254647,254648,254649,254650,254651,254652,254653,254654,254655,254656,254657,254658,254659,254660,254661,254662,254663,254664,254665,254666,254667,254668,254669,254670,254671,254672,254673,254674,254675,254676,254677,254678,254679,254680,254681,254682,254683,254684,254685,254686,254687,254688,254689,254690,254691,254692,254693,254694,254695,254696,254697,254698,254699,254700,254701,254702,254703,254704,254705,254706,254707,254708,254709,254710,254711,254712,254713,254714,254715,254716,254717,254718,254719,254720,254721,254722,254723,254724,254725,254726,254727,254728,254729,254730,254731,254732,254733,254734,254735,254736,254737,254738,254739,254740,254741,254742,254743,254744,254745,254746,254747,254748,254749,254750,254751,254752,254753,254754,254755,254756,254757,254758,254759,254760,254761,254762,254763,254764,254765,254766,254767,254768,254769,254770,254771,254772,254773,254774,254775,254776,254777,254778,254779,254780,254781,254782,254783,254784,254785,254787,262144,262159,263490,263491,263609,263610,263720,263721,264408,264409,264962,264963,265024,265025,265038,265039,265041,265042,265056,265057,265098,265099,265203,265204,265209,265210,265234,265235,265312,265313,265378,265379,265382,265387,265388,265389,265390,265391,265392,265393,265683,265684,266303,266304,266311,266312,266865,266866,266867,266871,266872,266873,266874,266875,266876,266877,266878,266879,266880,266881,266882,266883,266885,266886,266888,266889,266890,266893,268137,268139,268297,268300,268303,268304,268310,268312,268550,268551,268553,268555,269205,269206,269221,269222,269236,269237,269246,269247,269373,269374,269383,269385,269387,269388,278649,278650,294912,294932,296180,296181,297067,297068,302020,302021,302056,302057,302094,302096,302104,302106,302131,302133,302144,302145,302155,302157,302165,302167,302179,302181,302190,302191,302192,302194,302202,302204,302397,302398,302625,302626,302661,302663,302664,302665,303055,303056,303057,303058,303059,303060,303063,303064,303065,303066,303067,303068,303069,303070,303071,303072,303073,303074,303077,303078,303079,303080,303082,303083,303084,303085,303086,303087,303090,303091,303092,303093,303094,303095,303097,303098,303099,303100,303101,303102,303103,303104,303105,303106,303109,303111,303114,303115,303116,303117,303118,303119,303120,303121,303122,303123,303124,303125,303126,303127,303128,303129,303130,303131,303132,303133,303134,303135,303136,303137,303138,303139,303140,303141,303144,303145,303146,303147,303150,303151,303152,303153,303155,303156,303157,303158,303159,303160,303163,303164,303167,303168,303171,303172,303173,303174,303176,303177,303178,303179,303180,303181,303182,303183,303184,303185,303186,303187,303188,303189,303190,303191,303192,303193,303194,303195,303550,303551,303552,303553,303554,303555,303556,303557,303558,303559,303560,303561,303562,303563,303564,303565,303566,303567,303568,303569,303570,303571,303572,303573,303574,303575,303576,303577,303578,303579,303580,303581,303582,303583,303584,303585,303586,303587,303588,303589,303590,303591,303592,303593,303594,303595,303596,303597,303740,303741,303851,303852,303853,303854,303855,303856,303858,303859,303862,303863,303864,303865,303866,303867,303870,303871,303872,303873,303874,303875,303876,303877,303878,303879,303880,303881,303882,303883,303886,303887,303890,303891,303892,303893,303895,303896,303897,303898,303899,303900,303903,303904,303905,303906,303916,303917,303951,303952,303975,303976,303987,303988,303989,303990,303991,303992,303993,303994,303995,303996,303997,303998,303999,304000,304103,304104,304105,304106,304107,304108,304109,304110,304111,304112,304113,304114,304115,304116,304117,304118,304119,304120,304121,304122,304123,304124,304125,304126,304127,304128,304129,304130,304131,304132,304133,304134,304135,304136,304137,304138,304139,304140,304141,304142,304143,304144,304145,304146,304147,304148,304149,304150,304151,304152,304153,304154,304155,304156,304157,304158,304159,304160,304161,304162,304163,304164,304165,304166,304167,304168,304169,304170,304171,304172,304173,304174,304175,304176,304177,304178,304179,304180,304181,304182,304183,304184,304185,304186,304187,304188,304189,304190,304191,304192,304193,304194,304195,304196,304197,304198,304199,304200,304201,304202,304203,304204,304205,304206,304207,304208,304209,304210,304211,304212,304213,304214,304215,304216,304217,304218,304219,304220,304221,304222,304223,304224,304225,304226,304227,304228,304229,304230,304231,304232,304233,304234,304235,304236,304237,304238,304239,304240,304241,304242,304243,304244,304245,304246,304247,304248,304294,304295,304366,304367,304412,304413,304426,304427,304434,304435,304447,304448,304526,304528,304534,304535,304692,304693,304796,304797,304817,304818,304850,304851,304892,304893,304894,304895,304896,304897,304898,304899,304900,304901,305143,305144,305319,305320,305379,305380,305513,305514,305569,305570,315159,315160,319223,319225,319247,319249,321187,321189,321199,321201,321210,331835,332043,336671,336672,336752,338170,338171,341170,341171,341182,341183,342958,342959,342986,342987,343023,343024,345267,345268,347070,347071,348838,348839,353502,353503,354030,354031,360185,360186,360448,360463,360770,360771,361129,361130,369782,369783,371782,371783,376490,376491,376552,376553,377822,377823,384550,384551,384910,384911,391963,391964,391967,391969,391970,391971,392313,392314,393216,393235,393591,393643,407306,407307,408934,408935,409927,409928,411387,411388,412685,412687,412691,412692,413059,413060,413405,413406,414404,414405,414491,414492,415089,415090,418304,418305,418364,418365,418369,418370,423716,423717,425984,426002,430699,430700,436637,436638,438716,438717,440523,440524,441264,441265,454914,462814,462819,463711,463818,463852,489149,489151,489258,489260,491520,491535,494405,494406,500772,500773,512074,512075,524288,524312,533896,533898,533904,533905,538053,538055,547190,547191,552341,552342,557056,557098,559265,559266,565901,565902,579077,579078,589824,589879,590569,590570,591156,591157,591388,591389,594139,594140,606081,606082,606261,606262,614233,614234,622592,622648,623947,623948,627363,627364,628899,628900,633011,633012,633706,633707,636334,636335,637887,637888,638299,638300,641644,641645,649901,649902,651318,651321,655360,655375,655759,655760,658559,658560,665737,665738,666848,666849,682738,682740,685688,685691,685705,685706,687716,687719,688128,688136,691396,691397,692006,692007,692395,692396,692417,692418,692683,692684,692781,692782,692811,692812,692834,692835,693153,693154,693167,693168,696705,696706,696712,696713,696740,696741,699115,699116,707909,707910,712964,712965,713055,713056,713061,713062,713162,713163,713509,713510,713674,713675,716557,716558,717182,717184,717195,717197,718027,718028,719408,719409,719729,719730,720555,720556,720896,720897,722548,722549,722700,722701,725136,725137,725146,725147,726640,726641,726685,726686,726941,726943,727282,727283,727291,727292,727312,727313,727413,727414,727472,727474,727483,727484,727606,727607,727712,727715,727716,727718,729917,741483,741640,741641") == "cc6b006a77e9cce35936c0b57f65098f69613ac6" || 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"), "1594,1,31,44,58,114,115,659,660,9725,9726,11914,11915,32768,32785,39610,39611,39838,39839,40228,40230,40303,40304,40318,40319,44120,44123,44130,44131,44138,44139,44152,44153,44220,44222,44315,44316,44454,44455,44487,44488,44628,44945,44946,45981,50151,50152,50174,50175,51419,51420,51508,51509,51583,51584,51613,51614,52270,52271,52276,52277,52310,52311,55071,55072,56484,56485,56515,56516,57636,57638,57639,57640,58417,58418,59427,59428,65536,65551,66785,66786,67444,67445,69602,69603,69621,69622,69804,69805,69859,69860,70429,70430,72616,72617,78009,78010,83659,83660,84894,84895,85509,85510,90355,90356,91349,91350,92512,92513,93849,93850,98304,98321,100402,100403,100977,100978,108646,108647,108946,108947,118375,118376,120560,120561,121977,121978,124501,124502,126113,126114,127271,127272,131072,131087,134551,134552,136101,136102,137676,137677,139704,139705,141905,141906,144828,144829,163840,163857,164134,164135,169046,169047,169055,169056,170953,170954,173286,173287,173866,173867,175016,175017,175161,175162,182785,182786,188560,188561,189146,189147,191049,191050,195612,195613,196608,196623,197088,197089,197110,197112,197141,197142,202430,202431,204338,204341,205109,205110,208801,208802,209257,209258,210655,210658,212117,212118,213654,213655,215346,215347,217472,217473,220377,220378,220787,220788,220790,220791,222191,222192,222196,222197,222203,222204,222520,222521,225267,225268,225271,225272,225294,225297,227216,227219,227503,227504,227551,227552,228103,228104,229376,229393,230383,230384,230555,230556,230562,230563,230648,230649,232178,232179,233264,233265,235550,235551,235558,235559,235565,235566,235590,235592,237279,237280,238892,238893,239211,239212,239213,239214,240846,240847,242294,242298,243373,243374,243674,243675,244345,244346,244566,244567,244949,244950,245731,245732,246187,246205,246276,246277,247266,247267,251009,251010,254321,254322,254334,254340,254341,254342,254343,254344,254345,254346,254347,254348,254349,254350,254351,254352,254353,254354,254355,254356,254357,254358,254359,254360,254361,254362,254363,254364,254365,254366,254367,254368,254369,254370,254371,254372,254373,254374,254375,254376,254377,254378,254379,254380,254381,254382,254383,254384,254385,254386,254387,254388,254389,254390,254391,254392,254393,254394,254395,254396,254397,254398,254399,254400,254401,254402,254403,254404,254405,254406,254407,254408,254409,254410,254411,254412,254413,254414,254415,254416,254417,254418,254419,254420,254421,254422,254423,254424,254425,254426,254427,254428,254429,254430,254431,254432,254433,254434,254435,254436,254437,254438,254439,254440,254441,254442,254443,254444,254445,254446,254447,254448,254449,254450,254451,254452,254453,254454,254455,254456,254457,254458,254459,254460,254461,254462,254463,254464,254465,254466,254467,254468,254469,254470,254471,254472,254473,254474,254475,254476,254477,254478,254479,254480,254481,254482,254483,254484,254485,254486,254487,254488,254489,254490,254491,254492,254493,254494,254495,254496,254497,254498,254499,254500,254501,254502,254503,254504,254505,254506,254507,254508,254509,254510,254511,254512,254513,254514,254515,254516,254517,254518,254519,254520,254521,254522,254523,254524,254525,254526,254527,254528,254529,254530,254531,254532,254533,254534,254535,254536,254537,254538,254539,254540,254541,254542,254543,254544,254545,254546,254547,254548,254549,254550,254551,254552,254553,254554,254555,254556,254557,254558,254559,254560,254561,254562,254563,254564,254565,254566,254567,254568,254569,254570,254571,254572,254573,254574,254575,254576,254577,254578,254579,254580,254581,254582,254583,254584,254585,254586,254587,254588,254589,254590,254591,254592,254593,254594,254595,254596,254597,254598,254599,254600,254601,254602,254603,254604,254605,254606,254607,254608,254609,254610,254611,254612,254613,254614,254615,254616,254617,254618,254619,254620,254621,254622,254623,254624,254625,254626,254627,254628,254629,254630,254631,254632,254633,254634,254635,254636,254637,254638,254639,254640,254641,254642,254643,254644,254645,254646,254647,254648,254649,254650,254651,254652,254653,254654,254655,254656,254657,254658,254659,254660,254661,254662,254663,254664,254665,254666,254667,254668,254669,254670,254671,254672,254673,254674,254675,254676,254677,254678,254679,254680,254681,254682,254683,254684,254685,254686,254687,254688,254689,254690,254691,254692,254693,254694,254695,254696,254697,254698,254699,254700,254701,254702,254703,254704,254705,254706,254707,254708,254709,254710,254711,254712,254713,254714,254715,254716,254717,254718,254719,254720,254721,254722,254723,254724,254725,254726,254727,254728,254729,254730,254731,254732,254733,254734,254735,254736,254737,254738,254739,254740,254741,254742,254743,254744,254745,254746,254747,254748,254749,254750,254751,254752,254753,254754,254755,254756,254757,254758,254759,254760,254761,254762,254763,254764,254765,254766,254767,254768,254769,254770,254771,254772,254773,254774,254775,254776,254777,254778,254779,254780,254781,254782,254783,254784,254785,254787,262144,262159,263490,263491,263609,263610,263720,263721,264408,264409,264962,264963,265024,265025,265038,265039,265041,265042,265056,265057,265098,265099,265203,265204,265209,265210,265234,265235,265312,265313,265378,265379,265382,265387,265388,265389,265390,265391,265392,265393,265683,265684,266303,266304,266311,266312,266865,266866,266867,266871,266872,266873,266874,266875,266876,266877,266878,266879,266880,266881,266882,266883,266885,266886,266888,266889,266890,266893,268137,268139,268297,268300,268303,268304,268310,268312,268550,268551,268553,268555,269205,269206,269221,269222,269236,269237,269246,269247,269373,269374,269383,269385,269387,269388,278649,278650,294912,294932,296180,296181,297067,297068,302020,302021,302056,302057,302094,302096,302104,302106,302131,302133,302144,302145,302155,302157,302165,302167,302179,302181,302190,302191,302192,302194,302202,302204,302397,302398,302625,302626,302661,302663,302664,302665,303055,303056,303057,303058,303059,303060,303063,303064,303065,303066,303067,303068,303069,303070,303071,303072,303073,303074,303077,303078,303079,303080,303082,303083,303084,303085,303086,303087,303090,303091,303092,303093,303094,303095,303097,303098,303099,303100,303101,303102,303103,303104,303105,303106,303109,303111,303114,303115,303116,303117,303118,303119,303120,303121,303122,303123,303124,303125,303126,303127,303128,303129,303130,303131,303132,303133,303134,303135,303136,303137,303138,303139,303140,303141,303144,303145,303146,303147,303150,303151,303152,303153,303155,303156,303157,303158,303159,303160,303163,303164,303167,303168,303171,303172,303173,303174,303176,303177,303178,303179,303180,303181,303182,303183,303184,303185,303186,303187,303188,303189,303190,303191,303192,303193,303194,303195,303550,303551,303552,303553,303554,303555,303556,303557,303558,303559,303560,303561,303562,303563,303564,303565,303566,303567,303568,303569,303570,303571,303572,303573,303574,303575,303576,303577,303578,303579,303580,303581,303582,303583,303584,303585,303586,303587,303588,303589,303590,303591,303592,303593,303594,303595,303596,303597,303740,303741,303851,303852,303853,303854,303855,303856,303858,303859,303862,303863,303864,303865,303866,303867,303870,303871,303872,303873,303874,303875,303876,303877,303878,303879,303880,303881,303882,303883,303886,303887,303890,303891,303892,303893,303895,303896,303897,303898,303899,303900,303903,303904,303905,303906,303916,303917,303951,303952,303975,303976,303987,303988,303989,303990,303991,303992,303993,303994,303995,303996,303997,303998,303999,304000,304103,304104,304105,304106,304107,304108,304109,304110,304111,304112,304113,304114,304115,304116,304117,304118,304119,304120,304121,304122,304123,304124,304125,304126,304127,304128,304129,304130,304131,304132,304133,304134,304135,304136,304137,304138,304139,304140,304141,304142,304143,304144,304145,304146,304147,304148,304149,304150,304151,304152,304153,304154,304155,304156,304157,304158,304159,304160,304161,304162,304163,304164,304165,304166,304167,304168,304169,304170,304171,304172,304173,304174,304175,304176,304177,304178,304179,304180,304181,304182,304183,304184,304185,304186,304187,304188,304189,304190,304191,304192,304193,304194,304195,304196,304197,304198,304199,304200,304201,304202,304203,304204,304205,304206,304207,304208,304209,304210,304211,304212,304213,304214,304215,304216,304217,304218,304219,304220,304221,304222,304223,304224,304225,304226,304227,304228,304229,304230,304231,304232,304233,304234,304235,304236,304237,304238,304239,304240,304241,304242,304243,304244,304245,304246,304247,304248,304294,304295,304366,304367,304412,304413,304426,304427,304434,304435,304447,304448,304526,304528,304534,304535,304692,304693,304796,304797,304817,304818,304850,304851,304892,304893,304894,304895,304896,304897,304898,304899,304900,304901,305143,305144,305319,305320,305379,305380,305513,305514,305569,305570,315159,315160,319223,319225,319247,319249,321187,321189,321199,321201,321210,331835,332043,336671,336672,336752,338170,338171,341170,341171,341182,341183,342958,342959,342986,342987,343023,343024,345267,345268,347070,347071,348838,348839,353502,353503,354030,354031,360185,360186,360448,360463,360770,360771,361129,361130,369782,369783,371782,371783,376490,376491,376552,376553,377822,377823,384550,384551,384910,384911,391963,391964,391967,391969,391970,391971,392313,392314,393216,393235,393591,393643,407306,407307,408934,408935,409927,409928,411387,411388,412685,412687,412691,412692,413059,413060,413405,413406,414404,414405,414491,414492,415089,415090,418304,418305,418364,418365,418369,418370,423716,423717,425984,426002,430699,430700,436637,436638,438716,438717,440523,440524,441264,441265,454914,462814,462819,463711,463818,463852,489149,489151,489258,489260,491520,491535,494405,494406,500772,500773,512074,512075,524288,524312,533896,533898,533904,533905,538053,538055,547190,547191,552341,552342,557056,557098,559265,559266,565901,565902,579077,579078,589824,589879,590569,590570,591156,591157,591388,591389,594139,594140,606081,606082,606261,606262,614233,614234,622592,622648,623947,623948,627363,627364,628899,628900,633011,633012,633706,633707,636334,636335,637887,637888,638299,638300,641644,641645,649901,649902,651318,651321,655360,655375,655759,655760,658559,658560,665737,665738,666848,666849,682738,682740,685688,685691,685705,685706,687716,687719,688128,688136,691396,691397,692006,692007,692395,692396,692417,692418,692683,692684,692781,692782,692811,692812,692834,692835,693153,693154,693167,693168,696705,696706,696712,696713,696740,696741,699115,699116,707909,707910,712964,712965,713055,713056,713061,713062,713162,713163,713509,713510,713674,713675,716557,716558,717182,717184,717195,717197,718027,718028,719408,719409,719729,719730,720555,720556,720896,720897,722548,722549,722700,722701,725136,725137,725146,725147,726640,726641,726685,726686,726941,726943,727282,727283,727291,727292,727312,727313,727413,727414,727472,727474,727483,727484,727606,727607,727712,727715,727716,727718,729917,741483,741640,741641") && 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"), "648,1,38,49,50,130,135,141,142,147,148,211,212,217,218,223,224,229,230,233,234,1001,1002,3450,3451,12371,12372,12376,12377,13343,13344,13366,13367,13432,13433,13444,13445,13483,13484,13538,13539,13904,13905,14133,14134,14809,14815,16180,16181,21071,21072,22626,22627,22629,22631,22695,22696,22766,22767,22834,22835,22837,22838,22840,22841,22900,22902,22904,22905,22969,22970,23040,23041,23108,23109,23111,23112,23114,23123,23124,23125,23187,23188,23254,23255,23257,23258,23261,23265,23267,23268,23270,23272,23274,23275,23334,23335,23337,23339,23399,23400,23402,23403,23464,23465,23467,23468,23528,23529,23531,23532,23599,23600,23668,23669,23736,23737,23803,23804,23806,23807,23870,23871,23937,23938,23940,23941,24002,24003,24005,24006,24070,24071,24073,24074,24136,24137,24139,24140,24204,24205,24207,24208,24269,24270,24272,24273,24337,24338,24340,24341,24405,24406,24408,24409,24473,24474,24476,24477,24541,24542,24544,24545,24612,24613,24614,24615,24681,24682,24683,24684,24689,24690,24750,24751,24817,24818,24820,24821,24884,24885,24951,24952,24954,24955,25016,25017,25019,25020,25084,25085,25087,25088,25150,25151,25153,25154,25218,25219,25221,25222,25283,25284,25286,25287,25351,25352,25354,25355,25419,25420,25422,25423,25487,25488,25490,25491,25555,25556,25558,25559,25626,25627,25628,25629,25695,25696,25697,25698,25703,25705,25765,25766,25838,25839,25841,25842,25904,25905,25975,25976,25984,25988,25989,25990,26189,26190,26256,26257,26259,26260,26263,26268,28199,28200,28264,28265,28415,28416,28495,28496,28520,28521,28591,28592,28659,28660,28691,28692,28784,28785,28857,28858,28882,28883,28969,28970,29009,29010,29012,29013,29045,29046,29267,29268,29384,29385,29456,29457,29513,29514,29655,29656,29657,29658,29768,29769,29834,29835,29865,29866,29914,29915,29985,29986,30068,30069,30323,30324,30382,30383,30686,30692,30697,30704,30816,30825,30833,30834,30835,30836,30867,30869,30875,30877,30929,30930,30982,30983,31357,31358,31708,31709,31953,31954,32125,32126,32129,32130,32515,32516,32768,32827,34346,34347,34466,34467,35368,35371,35428,35429,36339,36340,37527,37528,37539,37541,37543,37544,38757,38759,39448,39449,39450,39453,39827,39828,39908,39909,39910,39911,40668,40669,40679,40681,41845,41849,41852,41853,41903,41904,41913,41915,41923,41924,41931,41933,41934,41936,42971,42974,43945,43946,44059,44060,44204,44205,44432,44433,44546,44547,44555,44558,44744,44747,44755,44756,44758,44759,44768,44775,44782,44790,44792,44797,44798,44799,44806,44807,44808,44814,44816,44817,46455,46456,47260,47261,47270,47271,47463,47469,47478,47479,47484,47507,47508,47523,47527,47528,47530,47531,48268,48269,48271,48272,49929,49931,49998,49999,50966,50967,62731,62733,65536,65577,66104,66105,70050,70051,70053,70054,76570,76571,80722,80723,82026,82027,87274,89083,89089,92445,92494,92495,92935,92937,93509,93510,94384,94385,95029,95030,95092,95093,98304,98312,109201,110769,153209,153407,155552,155553,155887,155898,155912,155923,155960,155961,155973,155974,160081,160143,160144,160145,162039,162040,163840,163879,164937,164938,166843,166844,172314,172315,172321,172322,172647,172648,173409,173410,178341,178342,184538,184539,187294,187295,191805,191806,191808,191809,193390,193391,193393,193394,193483,193484,195993,195994,196000,196002,196009,196010,196608,196637,203697,203698,203702,203703,203710,203711,209351,209352,209368,209369,209370,209372,209373,209375,209376,209378,209379,209381,209382,209383,209439,209441,209442,209443,209445,209446,209448,209449,209635,209636,210631,210632,211465,211466,211477,211478,213072,213073,220630,220631,226100,226102,226436,226438,227655,227656,227788,227789,229376,229401,230562,230563,230620,230621,230769,230770,231557,231558,234002,234003,239960,239961,239965,239966,239973,239974,241282,241283,241305,241306,242134,242135,242264,242266,242377,242378,242741,242742,245562,245563,246902,246904,251045,251046,253210,253212,253219,253224,253231,253232,253234,253235,253241,253243,253251,253253,253269,253270,253334,257540,257547,257558,258341,262438,262503,262504") == "2577af158f572c04601ab3f71cdd3273bf4f6152" || 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"), "648,1,38,49,50,130,135,141,142,147,148,211,212,217,218,223,224,229,230,233,234,1001,1002,3450,3451,12371,12372,12376,12377,13343,13344,13366,13367,13432,13433,13444,13445,13483,13484,13538,13539,13904,13905,14133,14134,14809,14815,16180,16181,21071,21072,22626,22627,22629,22631,22695,22696,22766,22767,22834,22835,22837,22838,22840,22841,22900,22902,22904,22905,22969,22970,23040,23041,23108,23109,23111,23112,23114,23123,23124,23125,23187,23188,23254,23255,23257,23258,23261,23265,23267,23268,23270,23272,23274,23275,23334,23335,23337,23339,23399,23400,23402,23403,23464,23465,23467,23468,23528,23529,23531,23532,23599,23600,23668,23669,23736,23737,23803,23804,23806,23807,23870,23871,23937,23938,23940,23941,24002,24003,24005,24006,24070,24071,24073,24074,24136,24137,24139,24140,24204,24205,24207,24208,24269,24270,24272,24273,24337,24338,24340,24341,24405,24406,24408,24409,24473,24474,24476,24477,24541,24542,24544,24545,24612,24613,24614,24615,24681,24682,24683,24684,24689,24690,24750,24751,24817,24818,24820,24821,24884,24885,24951,24952,24954,24955,25016,25017,25019,25020,25084,25085,25087,25088,25150,25151,25153,25154,25218,25219,25221,25222,25283,25284,25286,25287,25351,25352,25354,25355,25419,25420,25422,25423,25487,25488,25490,25491,25555,25556,25558,25559,25626,25627,25628,25629,25695,25696,25697,25698,25703,25705,25765,25766,25838,25839,25841,25842,25904,25905,25975,25976,25984,25988,25989,25990,26189,26190,26256,26257,26259,26260,26263,26268,28199,28200,28264,28265,28415,28416,28495,28496,28520,28521,28591,28592,28659,28660,28691,28692,28784,28785,28857,28858,28882,28883,28969,28970,29009,29010,29012,29013,29045,29046,29267,29268,29384,29385,29456,29457,29513,29514,29655,29656,29657,29658,29768,29769,29834,29835,29865,29866,29914,29915,29985,29986,30068,30069,30323,30324,30382,30383,30686,30692,30697,30704,30816,30825,30833,30834,30835,30836,30867,30869,30875,30877,30929,30930,30982,30983,31357,31358,31708,31709,31953,31954,32125,32126,32129,32130,32515,32516,32768,32827,34346,34347,34466,34467,35368,35371,35428,35429,36339,36340,37527,37528,37539,37541,37543,37544,38757,38759,39448,39449,39450,39453,39827,39828,39908,39909,39910,39911,40668,40669,40679,40681,41845,41849,41852,41853,41903,41904,41913,41915,41923,41924,41931,41933,41934,41936,42971,42974,43945,43946,44059,44060,44204,44205,44432,44433,44546,44547,44555,44558,44744,44747,44755,44756,44758,44759,44768,44775,44782,44790,44792,44797,44798,44799,44806,44807,44808,44814,44816,44817,46455,46456,47260,47261,47270,47271,47463,47469,47478,47479,47484,47507,47508,47523,47527,47528,47530,47531,48268,48269,48271,48272,49929,49931,49998,49999,50966,50967,62731,62733,65536,65577,66104,66105,70050,70051,70053,70054,76570,76571,80722,80723,82026,82027,87274,89083,89089,92445,92494,92495,92935,92937,93509,93510,94384,94385,95029,95030,95092,95093,98304,98312,109201,110769,153209,153407,155552,155553,155887,155898,155912,155923,155960,155961,155973,155974,160081,160143,160144,160145,162039,162040,163840,163879,164937,164938,166843,166844,172314,172315,172321,172322,172647,172648,173409,173410,178341,178342,184538,184539,187294,187295,191805,191806,191808,191809,193390,193391,193393,193394,193483,193484,195993,195994,196000,196002,196009,196010,196608,196637,203697,203698,203702,203703,203710,203711,209351,209352,209368,209369,209370,209372,209373,209375,209376,209378,209379,209381,209382,209383,209439,209441,209442,209443,209445,209446,209448,209449,209635,209636,210631,210632,211465,211466,211477,211478,213072,213073,220630,220631,226100,226102,226436,226438,227655,227656,227788,227789,229376,229401,230562,230563,230620,230621,230769,230770,231557,231558,234002,234003,239960,239961,239965,239966,239973,239974,241282,241283,241305,241306,242134,242135,242264,242266,242377,242378,242741,242742,245562,245563,246902,246904,251045,251046,253210,253212,253219,253224,253231,253232,253234,253235,253241,253243,253251,253253,253269,253270,253334,257540,257547,257558,258341,262438,262503,262504") && 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"), "284,1,15,32,33,6841,6842,7112,7114,7846,7847,7856,7857,8511,8512,8528,8529,17451,17452,27378,27381,28026,28027,28632,28633,29016,29017,29030,29031,30871,30872,32768,32776,40773,40774,44837,44838,48843,48844,58413,58414,65536,65542,66151,66152,66690,66697,66965,66971,68368,68374,69490,69491,69498,69499,69502,69503,69633,69634,69647,69648,70464,70465,79512,79513,85954,85955,89990,89992,98304,98312,103981,103982,104058,104059,107125,107127,128276,128277,129422,129423,131072,131078,134667,134668,138690,138691,144113,144114,148433,148435,148444,148446,148454,148456,148465,148467,149261,149262,149269,149270,149276,149277,149280,149281,149288,149289,153875,153876,153978,153979,153981,153983,153994,153996,154006,154007,154096,154097,154109,154110,154124,154126,154138,154139,154448,154449,154450,154452,154464,154465,154541,154542,154544,154545,154610,154611,154707,154708,156125,156126,156133,156134,156173,156174,156199,156200,156224,156225,156244,156245,156259,156261,157470,157471,157649,157651,157652,157653,157663,157664,157668,157669,157694,157695,157699,157701,157703,157705,157726,157727,157738,157739,157866,157869,158284,158285,158656,158657,162808,162809,162828,162829,162869,162870,162882,162883,162919,162920,162936,162937,162953,162954,162988,162989,163127,163128,163141,163142,163146,163147,163154,163155,163167,163168,163840,163849,173596,173597,175066,175067,178949,178950,182579,182580,186528,186529,190123,190125,190246,190249,196159,196160,196608,196621,202565,202566,205419,205420,214507,214508,220145,220146,220641,220644,229376,229407,247017,247018,248920,248929,262144,262150,283478,283479,283552,283553,283607,283608,284090,284091,284264,284265,284463,284472,284969,284970,285012,285020,285049,285050,285051,285052,285448,285449,286450,286451,286789,286791,286893,286894,288294,288295,291175,291176,292169,292172,294912,294917,296881,296882,304777,309610,309684,309685") == "c364ccc9430412d65168b884c5faad8d903d4e60" || 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"), "284,1,15,32,33,6841,6842,7112,7114,7846,7847,7856,7857,8511,8512,8528,8529,17451,17452,27378,27381,28026,28027,28632,28633,29016,29017,29030,29031,30871,30872,32768,32776,40773,40774,44837,44838,48843,48844,58413,58414,65536,65542,66151,66152,66690,66697,66965,66971,68368,68374,69490,69491,69498,69499,69502,69503,69633,69634,69647,69648,70464,70465,79512,79513,85954,85955,89990,89992,98304,98312,103981,103982,104058,104059,107125,107127,128276,128277,129422,129423,131072,131078,134667,134668,138690,138691,144113,144114,148433,148435,148444,148446,148454,148456,148465,148467,149261,149262,149269,149270,149276,149277,149280,149281,149288,149289,153875,153876,153978,153979,153981,153983,153994,153996,154006,154007,154096,154097,154109,154110,154124,154126,154138,154139,154448,154449,154450,154452,154464,154465,154541,154542,154544,154545,154610,154611,154707,154708,156125,156126,156133,156134,156173,156174,156199,156200,156224,156225,156244,156245,156259,156261,157470,157471,157649,157651,157652,157653,157663,157664,157668,157669,157694,157695,157699,157701,157703,157705,157726,157727,157738,157739,157866,157869,158284,158285,158656,158657,162808,162809,162828,162829,162869,162870,162882,162883,162919,162920,162936,162937,162953,162954,162988,162989,163127,163128,163141,163142,163146,163147,163154,163155,163167,163168,163840,163849,173596,173597,175066,175067,178949,178950,182579,182580,186528,186529,190123,190125,190246,190249,196159,196160,196608,196621,202565,202566,205419,205420,214507,214508,220145,220146,220641,220644,229376,229407,247017,247018,248920,248929,262144,262150,283478,283479,283552,283553,283607,283608,284090,284091,284264,284265,284463,284472,284969,284970,285012,285020,285049,285050,285051,285052,285448,285449,286450,286451,286789,286791,286893,286894,288294,288295,291175,291176,292169,292172,294912,294917,296881,296882,304777,309610,309684,309685") && 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("system_ext"), "112,1,24,27960,27962,27970,27971,28033,28034,28405,28407,28464,28465,28486,29678,29685,29686,29924,29925,29991,29992,30188,30189,30193,30194,30199,30200,30639,30640,30652,30653,30659,30660,30672,30673,30684,30685,30690,30691,30697,30698,30711,30712,30724,30725,30753,30754,30772,30773,30903,30904,30991,30992,31011,31012,31014,31015,31016,31017,31018,31020,31021,31022,31023,31024,31054,31066,31068,31069,31070,31071,32768,32795,33527,33528,34642,34643,34672,34673,36040,36041,36190,36191,38980,38981,39033,39034,39343,39344,39693,39694,44670,44671,50706,50707,51346,51347,59563,59564,59625,59626,59945,59946,65536,65552,76389,131084,131088,137344,137757,139943,139986,139987") == "576f1cf22994645f94774eddb211856b9d5b6161" || 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"), "112,1,24,27960,27962,27970,27971,28033,28034,28405,28407,28464,28465,28486,29678,29685,29686,29924,29925,29991,29992,30188,30189,30193,30194,30199,30200,30639,30640,30652,30653,30659,30660,30672,30673,30684,30685,30690,30691,30697,30698,30711,30712,30724,30725,30753,30754,30772,30773,30903,30904,30991,30992,31011,31012,31014,31015,31016,31017,31018,31020,31021,31022,31023,31024,31054,31066,31068,31069,31070,31071,32768,32795,33527,33528,34642,34643,34672,34673,36040,36041,36190,36191,38980,38981,39033,39034,39343,39344,39693,39694,44670,44671,50706,50707,51346,51347,59563,59564,59625,59626,59945,59946,65536,65552,76389,131084,131088,137344,137757,139943,139986,139987") && 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.600000, 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 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:12eb02a6d675240e43febd66b34bb7a915076fd6"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:9c79298b6892dd6364ab6af32016fc09e74217a5"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:9c79298b6892dd6364ab6af32016fc09e74217a5")));

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