getprop("ro.product.device") == "tiare" || abort("E3004: This package is for \"tiare\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/tiare_ru/tiare:8.1.0/OPM1.171019.026/V10.2.17.0.OCLRUXM:user/release-keys");
ui_print("Target: Xiaomi/tiare_ru/tiare:8.1.0/OPM1.171019.026/V10.2.18.0.OCLRUXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/tiare_ru/tiare:8.1.0/OPM1.171019.026/V10.2.17.0.OCLRUXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/tiare_ru/tiare:8.1.0/OPM1.171019.026/V10.2.18.0.OCLRUXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/tiare_ru/tiare:8.1.0/OPM1.171019.026/V10.2.17.0.OCLRUXM:user/release-keys or Xiaomi/tiare_ru/tiare:8.1.0/OPM1.171019.026/V10.2.18.0.OCLRUXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
apply_patch_space(20779008) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1("/dev/block/bootdevice/by-name/system", "48,1,177,187,337,5412,5419,8011,8013,15311,15312,16696,16739,17760,17767,17891,18117,20024,20054,23129,23527,23641,23642,27101,27102,28100,28221,31846,31967,32384,32385,32393,32770,32933,98306,98469,131073,139264,163842,164005,229378,229541,294914,295077,306989,334150,336784,336791,339456") == "46644a2ccf7ba35d6159396f7449a1bacc9f3859" || block_image_verify("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block("/dev/block/bootdevice/by-name/system");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/system", "48,1,177,187,337,5412,5419,8011,8013,15311,15312,16696,16739,17760,17767,17891,18117,20024,20054,23129,23527,23641,23642,27101,27102,28100,28221,31846,31967,32384,32385,32393,32770,32933,98306,98469,131073,139264,163842,164005,229378,229541,294914,295077,306989,334150,336784,336791,339456") && block_image_verify("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat"), ui_print("system recovered successfully."), abort("E1004: system partition fails to recover"));
endif;
if (range_sha1("/dev/block/bootdevice/by-name/vendor", "294,1,45,47,109,2552,2559,3142,3144,4361,4364,4384,4385,4417,4418,4737,4738,5677,5678,6971,6972,7348,7349,14289,14290,15265,15266,15941,15942,16100,17312,18563,18565,20361,20362,20578,20579,22313,22314,25394,25395,29837,29838,32768,32770,32809,32810,40561,40562,40975,40976,42332,42333,42374,42375,42919,42920,45136,45137,50104,50105,50135,50136,50671,50672,58536,58537,58722,58723,58901,58902,60189,60190,61246,61247,61335,61337,61358,61360,61380,61382,61384,61385,61751,61752,65840,65841,65865,65866,65906,65907,65921,65922,65953,65954,66038,66039,66088,66090,66377,66378,66699,66700,67008,67009,67327,67328,67329,67330,68130,68131,68136,68137,68144,68145,68170,68171,68226,68227,68626,68627,68636,68637,68670,68671,68713,68714,68773,68774,68839,68842,68860,68861,68879,68880,68925,68926,68968,68969,69297,69298,69695,69696,70165,70166,70768,70769,71810,71811,72034,72036,72042,72044,72052,72053,72083,72110,72111,72113,72114,72116,72118,72119,72121,72122,72125,72126,72127,72130,72140,72142,72143,72145,72147,72148,72150,72151,72153,72154,72156,72157,72159,72160,72162,72163,72165,72166,72168,72169,72171,72172,72175,72176,72178,72179,72182,72183,72185,72186,72188,72189,72191,72192,72193,72196,72272,72273,72275,72277,72279,72280,72282,72283,72285,72286,72296,72297,72299,72300,72301,72303,72304,72306,72308,72309,72311,72312,72317,72318,72319,72322,72332,72334,72344,72346,72347,72349,72351,72352,72381,72382,72384,72385,72387,72388,72390,72391,72393,72394,72396,72397,72399,72400,72402,72403,72405,72406,72408,72411,72412,72414,72416,72417,72419,72420,72422,72423,72425,72430,72431,72435,72436,72438,72439,72441,72448,72449,72451,72452,72453,72455,72456,72458,72460,72461,72569,72570,72828,73020,74556,74796,80127,80760,80767,81408") == "2e63b55156c99f36b5684ffdafb6cc3a15e1a40c" || block_image_verify("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block("/dev/block/bootdevice/by-name/vendor");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/vendor", "294,1,45,47,109,2552,2559,3142,3144,4361,4364,4384,4385,4417,4418,4737,4738,5677,5678,6971,6972,7348,7349,14289,14290,15265,15266,15941,15942,16100,17312,18563,18565,20361,20362,20578,20579,22313,22314,25394,25395,29837,29838,32768,32770,32809,32810,40561,40562,40975,40976,42332,42333,42374,42375,42919,42920,45136,45137,50104,50105,50135,50136,50671,50672,58536,58537,58722,58723,58901,58902,60189,60190,61246,61247,61335,61337,61358,61360,61380,61382,61384,61385,61751,61752,65840,65841,65865,65866,65906,65907,65921,65922,65953,65954,66038,66039,66088,66090,66377,66378,66699,66700,67008,67009,67327,67328,67329,67330,68130,68131,68136,68137,68144,68145,68170,68171,68226,68227,68626,68627,68636,68637,68670,68671,68713,68714,68773,68774,68839,68842,68860,68861,68879,68880,68925,68926,68968,68969,69297,69298,69695,69696,70165,70166,70768,70769,71810,71811,72034,72036,72042,72044,72052,72053,72083,72110,72111,72113,72114,72116,72118,72119,72121,72122,72125,72126,72127,72130,72140,72142,72143,72145,72147,72148,72150,72151,72153,72154,72156,72157,72159,72160,72162,72163,72165,72166,72168,72169,72171,72172,72175,72176,72178,72179,72182,72183,72185,72186,72188,72189,72191,72192,72193,72196,72272,72273,72275,72277,72279,72280,72282,72283,72285,72286,72296,72297,72299,72300,72301,72303,72304,72306,72308,72309,72311,72312,72317,72318,72319,72322,72332,72334,72344,72346,72347,72349,72351,72352,72381,72382,72384,72385,72387,72388,72390,72391,72393,72394,72396,72397,72399,72400,72402,72403,72405,72406,72408,72411,72412,72414,72416,72417,72419,72420,72422,72423,72425,72430,72431,72435,72436,72438,72439,72441,72448,72449,72451,72452,72453,72455,72456,72458,72460,72461,72569,72570,72828,73020,74556,74796,80127,80760,80767,81408") && block_image_verify("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat"), ui_print("vendor recovered successfully."), abort("E2004: vendor partition fails to recover"));
endif;

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

write_value("0", "/sys/class/power_supply/battery/batfet_reset_enable");
write_value("0", "/sys/devices/soc/qpnp-power-on-5/kpdpwr_reset");
ui_print("Patching system image after verification.");
show_progress(0.800000, 0);
block_image_update("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");
ui_print("Patching vendor image after verification.");
show_progress(0.100000, 0);
block_image_update("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");
ui_print("Installing boot image...");
package_extract_file("boot.img", "/dev/block/bootdevice/by-name/boot");

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

ui_print("Patching firmware images...");
ifelse(msm.boot_update("main"), (
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpm");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/emmc_appsboot.mbn", "/dev/block/bootdevice/by-name/aboot");
package_extract_file("firmware-update/lksecapp.mbn", "/dev/block/bootdevice/by-name/lksecapp");
package_extract_file("firmware-update/keymaster64.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/sbl1.mbn", "/dev/block/bootdevice/by-name/sbl1");
package_extract_file("firmware-update/cmnlib64_30.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/cmnlib_30.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
), "");
ifelse(msm.boot_update("backup"), (
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpmbak");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/emmc_appsboot.mbn", "/dev/block/bootdevice/by-name/abootbak");
package_extract_file("firmware-update/lksecapp.mbn", "/dev/block/bootdevice/by-name/lksecappbak");
package_extract_file("firmware-update/keymaster64.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
package_extract_file("firmware-update/sbl1.mbn", "/dev/block/bootdevice/by-name/sbl1bak");
package_extract_file("firmware-update/cmnlib64_30.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/cmnlib_30.mbn", "/dev/block/bootdevice/by-name/cmnlibbak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
), "");
msm.boot_update("finalize");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
set_progress(1.000000);
write_value("1", "/sys/class/power_supply/battery/batfet_reset_enable");
write_value("1", "/sys/devices/soc/qpnp-power-on-5/kpdpwr_reset");
