bootrecover Silvan Calarco GPL 0.5 bootrecover 0 0 593 514 5 5 0 0 openmamba boot loader recovery wizard image0 introduction Welcome! BackBox 180 50 20 20 false NextBox 130 50 20 20 true GroupBox2 10 10 560 160 7 7 0 0 255 255 255 AcceptScript 10 280 32 32 @dcop(@dcopid, KommanderIf, enableWidget(QString,bool), next, true) Label21 410 390 130 21 Version 0.4 AlignVCenter|AlignRight Label29 420 130 130 16 40 96 6 8 www.openmamba.org wizardScript 10 50 32 32 @dcop(@dcopid, KommanderIf, setEnabled(QString,bool), next, @NextBox.checked) @dcop(@dcopid, KommanderIf, setEnabled(QString,bool), back, @BackBox.checked) @dcop(@dcopid, KommanderIf, setEnabled(QString,bool), finish, true) @dcop(@dcopid, KommanderIf, setVisible(QString,bool), help, false) PixmapLabel2 80 40 400 74 image1 Label1_2 280 100 230 20 11 1 GNU/Linux distribution AlignCenter Label1 10 10 540 34 0 0 0 20 Boot loader recovery tool for AlignVCenter|AlignLeft Label18_2_2_2 10 120 400 29 8 1 Copyright (c) 2007-2011 by Silvan Calarco Released under the terms of the GNU GPL v3 license AutoText WordBreak|AlignVCenter Label30 10 190 560 20 1 This program will recover the openmamba boot loader. Label18_2 10 220 560 200 This operation is normally needed after the very first sector of the disk (Master Boot Record) has been rewritten by the installation of another operating system. Usually you will need to use this program only after the installation of a release of Microsoft Windows to restore the openmamba boot menu. This tool is also useful before the installation of a third party boot manager in the Master Boot Record, by moving the openmamba boot loader installation from the MBR to its own partition. WordBreak|AlignTop disk_choice System partition choice removablebox 420 240 150 20 removab&le devices driverlabel 404 155 121 31 Label21_2 20 10 540 30 15 Choose openmamba system partition AlignCenter PartitionBox true 10 60 560 370 3 7 0 0 Where do you want to install the boot loader from? Label24 10 30 540 40 Please, select the openmamba system partition where you want the boot loader to be installed from. RichText WordBreak|AlignTop Label3 10 340 180 20 1 Install bootloader from: AlignVCenter|AlignLeft devicesbox 10 90 540 230 showdevice 180 340 350 20 scanDevices 540 0 32 32 @devicesbox.clear @BackBox.setChecked(false) @NextBox.setChecked(false) @execBegin function get_udisks_key() { LANG=C udisks --show-info $1 | grep " $2:" | head -n1 | sed "s|[[:space:]]*$2:[[:space:]]*\(.*\)|\1|" } devices=`udisks --enumerate-device-files | grep -v /dev/disk | sort -n -r` partlabel= for device in $devices; do native_path=`get_udisks_key $device native-path` [ -e $native_path/partition ] || continue is_system_internal=`get_udisks_key $device "system internal"` volsize=`get_udisks_key $device size` volsize=`expr $volsize / 1024 / 1024` volname=`get_udisks_key $device label` [ "$volname" ] || volname="unnamed" parttype=`get_udisks_key $device usage` [ "$parttype" ] || parttype="unknown" partscheme=`get_udisks_key $device scheme` [ "$partscheme" ] || partscheme="unknown" fstype=`get_udisks_key $device type` [ "$fstype" ] || fstype="unformatted" add_info="" is_mounted=`get_udisks_key $device "is mounted"` [ "$is_mounted" = "1" ] || { mkdir /mnt/${device:5:5} && mount $device /mnt/${device:5:5} } mount_point=`get_udisks_key $device "mount paths"` add_info="" [ "$is_system_internal" == "1" ] || { add_info=",removable" [ @removablebox.checked == 1 ] || continue } if [ "$partscheme" == "mbr" -o "$partscheme" == "embr" ]; then partlabel="$partlabel<br>${device:5:5} $fstype $volname $volsize MB" case "$fstype" in ext2|ext3|ext4|reiserfs|reiser4) [ "$mount_point" -a -e $mount_point/etc/openmamba-release ] && { release=`cat $mount_point/etc/openmamba-release` dcop @dcopid KommanderIf "addListItem(QString,QString,int)" devicesbox "${device:5:5} $mount_point ($fstype,$volname,$volsize MB${add_info})" 0 } ;; *) ;; esac elif [ "$partscheme" == "gpt" -o "$partscheme" == "unknown" -a $volsize -gt 0 ]; then case "$fstype" in swap|iso9660) ;; ext2|ext3|ext4|reiserfs|reiser4) [ "$mount_point" -a -e $mount_point/etc/openmamba-release ] && { release=`cat $mount_point/etc/openmamba-release` dcop @dcopid KommanderIf "addListItem(QString,QString,int)" devicesbox "${device:5:5} $mount_point $volsize MB ($release)" 0 } ;; *) ;; esac fi done @execEnd setlabel 540 40 32 32 @execBegin function get_udisks_key() { LANG=C udisks --show-info $1 | grep " $2:" | head -n1 | sed "s|[[:space:]]*$2:[[:space:]]*\(.*\)|\1|" } @if (@devicesbox.currentItem >= 0) currdev=@String.section(@devicesbox.item(@devicesbox.currentItem)," ",0) @showdevice.setText(@devicesbox.item(@devicesbox.currentItem)) @dcop(@dcopid, KommanderIf, enableWidget(QString,bool), next, true) @BackBox.setChecked(true) # # set MBR combo box # dcop @dcopid KommanderIf "clear(QString)" mbrbox devices=`udisks --enumerate-device-files | grep -v /dev/disk` dcop @dcopid KommanderIf "addListItem(QString,QString,int)" mbrbox "$currdev (@i18n("System partition"))" 0 for device in $devices; do native_path=`get_udisks_key $device native-path` [ -e $native_path/partition ] && continue is_system_internal=`get_udisks_key $device "system internal"` partscheme=`get_udisks_key $device scheme` if [ "$is_system_internal" == "1" -o "@removablebox.checked" == "1" ]; then [ "$partscheme" == "mbr" ] && \ dcop @dcopid KommanderIf "addListItem(QString,QString,int)" mbrbox "${device:5:5} (master boot record)" 0 fi done dcop @dcopid KommanderIf "setCurrentItem(int)" 0 @endif @execEnd @setBootableCheckbox.execute() bootloader Computer startup configuration Label21_2_2 20 10 540 30 15 Configure the boot manager AlignCenter BootloaderBox 10 50 560 370 3 4 0 0 Bootloader configuration Layout5_2 10 330 530 26 unnamed 0 6 Label3_2_3 1 1 0 0 Install bootloader on: mbrbox 3 1 0 0 bootableBox false set &bootable true Label3_2_2_2 10 70 290 24 Please select the boot menu options: Label28 10 30 540 40 Below is a list of other operating systems found on this computer, you may configure them to appear as a choice when the computer starts. WordBreak|AlignTop chainloadbox 10 100 540 170 Multi Label29_2 10 280 531 40 Please select where you want to install the boot manager. WordBreak|AlignVCenter setBootableCheckbox false 520 70 32 32 @execBegin mbrdevice=@String.section(@mbrbox.item(@mbrbox.currentItem)," ",0) mbrpart=${mbrdevice:3:2} if [ "$mbrpart" ]; then if [ $mbrpart -le 4 ]; then dcop @dcopid KommanderIf setEnabled bootableBox true else dcop @dcopid KommanderIf setEnabled bootableBox false dcop @dcopid KommanderIf setChecked bootableBox false fi else dcop @dcopid KommanderIf setEnabled bootableBox false fi @execEnd scanbootloader 10 10 32 32 @BackBox.setChecked(true) @NextBox.setChecked(true) @chainloadbox.clear @setBootableCheckbox.execute() @execBegin function get_udisks_key() { LANG=C udisks --show-info $1 | grep " $2:" | head -n1 | sed "s|[[:space:]]*$2:[[:space:]]*\(.*\)|\1|" } installdevice=@String.section(@devicesbox.item(@devicesbox.currentItem)," ",0) devices=`udisks --enumerate-device-files | grep -v /dev/disk | sort -n -r` partlabel= for device in $devices; do native_path=`get_udisks_key $device native-path` [ -e $native_path/partition ] || continue is_system_internal=`get_udisks_key $device "system internal"` volsize=`get_udisks_key $device size` volsize=`expr $volsize / 1024 / 1024` [ $volsize = 0 ] && continue volname=`get_udisks_key $device label` [ "$volname" ] || volname="unnamed" parttype=`get_udisks_key $device usage` [ "$parttype" ] || parttype="unknown" partscheme=`get_udisks_key $device scheme` [ "$partscheme" ] || partscheme="unknown" fstype=`get_udisks_key $device type` [ "$fstype" ] || fstype="unformatted" add_info="" [ "$is_system_internal" = "1" ] || { add_info=",removable" [ @removablebox.checked == 1 ] || continue } if [ "$partscheme" == "mbr" -o "$partscheme" == "embr" ]; then partlabel="$partlabel<br>${device:5:5} $fstype $volname $volsize MB" case "$fstype" in swap|iso9660|unformatted) ;; ext2|ext3|ext4|reiserfs|reiser4|unformatted) ;; *) dcop @dcopid KommanderIf "addListItem(QString,QString,int)" chainloadbox "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" 0 dcop @dcopid KommanderIf "setSelection" chainloadbox "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" ;; esac elif [ "$partscheme" == "gpt" -o "$partscheme" == "unknown" -a $volsize -gt 0 ]; then case "$fstype" in swap|iso9660|unformatted) ;; ext2|ext3|ext4|reiserfs|reiser4) ;; *) dcop @dcopid KommanderIf "addListItem(QString,QString,int)" chainloadbox "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" 0 dcop @dcopid KommanderIf "setSelection" chainloadbox "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" ;; esac fi done @execEnd endinstall End of installation confirmBox 104 135 20 20 finallabel 20 0 540 50 18 Installation completed. AlignCenter installlog 20 60 540 360 AlwaysOn LogText launchinstall 20 20 32 32 @NextBox.setChecked(false) @execBegin conffile=~/.bootrecover.conf cat > $conffile << _EOF # # openmamba installation file # # created by openmamba bootrecover wizard # _EOF @dcop(@dcopid, KommanderIf, enableWidget(QString,bool), back,false) installdevice=@String.section(@devicesbox.item(@devicesbox.currentItem)," ",0) mountpoint=@String.section(@devicesbox.item(@devicesbox.currentItem)," ",1) mbrdevice=@String.section(@mbrbox.item(@mbrbox.currentItem)," ",0) IFS=$'\n' CHAINLOAD_SELECTED=(`dcop @dcopid KommanderIf selection chainloadbox`) for i in ${CHAINLOAD_SELECTED[*]}; do chainloaddevices="/dev/${i:0:4} $chainloaddevices" done IFS=$' \t\n' cat >>$conffile << _EOF INSTALL_DEVICE='/dev/$installdevice' INSTALL_MOUNTPOINT='$mountpoint' INSTALL_BOOTLOADER_DEVICE='/dev/$mbrdevice' INSTALL_BOOTLOADER_DEVICE_SETBOOTABLE=@bootableBox.checked INSTALL_BOOTLOADER_CHAINLOAD=($chainloaddevices) _EOF @execEnd @if (@Message.question(@i18n("Boot loader from") @String.section(@devicesbox.item(@devicesbox.currentItem)," ",0) @i18n("will installed to ") @mbrbox.item(@mbrbox.currentItem). @i18n("OK to continue?"), @i18n("Warning"), @i18n("OK"), @i18n("Abort")) == 1) @confirmBox.setChecked(true) @endif @if (@confirmBox.checked); then @dcop(@dcopid, KommanderIf, setEnabled(QString,bool), back, false) @exec("sudo /usr/share/openmamba/bootrecover/bootrecover.sh ~/.bootrecover.conf @dcopid `whoami` &> ~/.bootrecover.log") @execBegin dcop @dcopid KommanderIf setText installlog "`cat ~/.bootrecover.log`" @execEnd @endif @if (!@confirmBox.checked); then @Message.info(@i18n("Installation aborted.")) @dcop(@dcopid, MainApplication-Interface, quit()) @endif @BackBox.setChecked(false) ScriptObject7 540 20 32 32 dcop @dcopid KommanderIf setText installlog "`cat ~/.bootrecover.log`" 789cc59c57afdd46d6a6effb5718cdbbc680df662631988b9373ce6730171599c913f68983f9ef53bbde5525d9966459ddc067360c3d665ab5f22a6ef57ffdebb7dbd3a3dffef55fff785eb2652b7e130d7bfaed5ff2651c3ffef7fff95ffff71fffccd3dfccffa24595fe16fff37ffce39f67cbdfc46fc7f3a4561006068285fd67c5f2d672e4f9ce72b248893f2c679e99e56aa116d18a27dccfdd799d1267747d4c5c804565594505ee979f2b8e165106eeecf551b22871fd545a4eddfdf360992d24389c2d737307de175996b15ed8c5eb35cbdac88bf30fc41a1cd8ebe3242279e7de72e69eaff62de7510c6eb9651e45f4fe5362ba5eec581669b1482ddbfb9328d6919567b2eb4f5444ef9fdf579ca65145f29d58ce627a7e6be54ff388d3f3b7c155b6c856fc202d174623b85e582e13ba5fae5bae2a89eb8dafac58c624afbcb7ac58b6282c872bce162c5ee4f67d7b96a35247b0d71a98315cdf9e807989ebd9367105960bcb312fe8fc16b13b6ffd314b780cf9c416319d178167fbbed9ea374b23b2678be7e731d967b2fe9b15b1207f6cc1ee7e7d64b9e47cc1ecf3772d33777eb2f6c8b8d37ffd06e66c5159ffb4face24570b69cf6bcb9a0b3c2fb0facda394e4a995e5d8bd8f6d121b0fb4fe65e5c9d394e2474d60f33c6edf67f59d673c22f91f88c542d8e7597de439cfa13ffd482c219fee2c17ee7dad8d97bc1411ec391d5aae128ab7f9ccb28829ded425d8ddcf62b0301ebbe2e6deb3cd2fc2ea2f976ebdcd022c4c84d9f36fc46964e5532f9695f14ffbfce9c0b28e499e07464cfedf419fdaf89ff58f6e5c71b170fecc2e2c4729d9af3925a6f3cd1a586491d5676dd75ba46281f8acadfc4526e2c8c66f238849fedae68b224f28dfb0c47221ca18febd6199890afae86c7e2b8cff4489b5c7b1652118ce4f3796654cfe3ce7e0c4f9b3cdbf8572fed1623daad2c82fccfa6fb9e009b8b1f158462efe3b1bbf659c507ed3579613a37fbb7e6efdb94c53d2af5c828d3eacbcb3b56f59262e3f6d800b1dc3ff71be4a5cfedb040b9340ec796bff92bbf353615938fd35365e4a99e4e46faf9695d117ec61e3b9d4ce9eaa01e7a49f6e1d5ca50b2b2fb7fe5d2da459b1d5cfb3e528a7f7b5c76019c5d67fb9e33829ad3cb83ec95dbd7b071709fc415e818dfeecf5b38dafaa48285ef83a3873f588832b7a7e5d834509fb3fd8fc5695eefef91cecf2477307965962e35ddb78ad98895ff8a3adbf154fe9fed6c64b2513ca7f8d04cb38b6f1d8597fab7429501f671b8f6c9150fd089fc139c59fbe060b1edbebd93a5856b41e2b2ff3fad4365fb0d85daf7bb0396fdf1fda7cc5929cfc899f8025c3fa1e6cbcb1d4f94bfb0976f6e7d69f5896d1fd0dce67d218d8fa87d507cb4541f9e58e98c536dff107b0e429fcdbc60f2b9dffb33db08863bb3e61e38f55ee7e0d792b93d0acbc13f4c7128a5fa5c099abbf365e192f28fe266b6f2672773e0117e606cbd09f34f5d2e6ffc9f60f4c25d42fd431b870f6b6f1c774eae26704f38cf2a3ad4f7c5146888f76021b7fb2eb11365e789491be6b5bbf79ecfc5727c4140fb3d5074fdcf9f0065cd07a440a36f910ebb5fec3bdfd1e3831dddfd97e8e6729f99fb6f6e47946eb91787e5e4511f46df3232f5c7c88126c146ed73b597fe3a57bfeb800e7f47cf90c568b0cf16bfb035eb9ebc506581689d5d783ed873873f9b77924a6f810908f65649fd1da977377fd9c5916a9b3bfe31cfd6e734cecea6f414cfedded12937f69c8239cffcf23b18bdf065cd0f583cd575c3aff981be212fed03c1093ffab3db07bfe007b2827cf5c79b6f1dd06c4eefd4b7049f619705ebbe7cfafc412fed9d8fe472cfcf99258523d9b895d7d5c1093be259d77fa6fad7f0a5fef03092e487eb5045726e1dbeb6d7e10b17bded4818dbfdb7c3587e09ce6a3701d5cba7eed9098ecdb8057e5163c1193ffcf36be8c3b64e8dfe43131bdbfb3f951642ebe9a9198de273ec1a641b0f5a3b9052b53712cdb78123e7ee688b8a07ef7006c2c867ac7c1c6dfd14fd0f5aaccecf5bdcd3f263d51be995e8915fa3581f717a5cb470f605622ff37361e4599917f771131a3fa734aac50ef05f45daa2ab7fed1c31f2a9fef3b6237efbc13733c6fba07e7b4fe50834b773fec57a904f97fb0fda76019f95f7d43ece68b337011235ec6736237cfe279ccd443cc27b00fcfa8fe0ea7c4e48f3de437ed3afaf5f9823842feafe1cfbc74f148e74d3f8678b1f94a0873bfcd1ff31d718e7e7cda23ae70fd60eb9590cebf66f8a374f52780bcb270f3ee15d8f803fa0b3b8f09e5faadf69698e63985f8d2aebf1a8e89c95ffb3d629a0794cd6726f85d7e0c88297e8633629a9fa72362d2e774052ee2c8d647c1c04a64b0afad3f3272f69ff78805f5fb1f60c913ab2f89e7c739d973704cfeda34c482ec85e79bf108f9a3bb059712f5a9b6fe207d7fd33e1293bf0fafc48aea730f36fe857c60ed63d235d9bf2fc00543ff192cc025e517b10676fea707b01918d0ffa6c432c7fc67fb6d9915344ff61531cdfb21de97556efec5f3f29ce2613a26a6fd95e913eceaff70481c53fece8829ff349ab85a60fe498915f245afc025cd279aeeaf5cbdb7fd845c851fecbb465ca2df0b5b70e5e6333aaf74867c69fb6f597a79b68839cdd3b057e9f43b2c8973f433fa146cfa69abcfba212e13c49b8d6f5915246fbf4eecfa8b8998fc7f1a88c95f07c8cfdcf93e2676f3db823887fef93db1cbcf6b9eadfdfbc433f2e906b1a079fe9cd8d59f6d7049fdd480f571275f774d4cf1c1d788291ff7079eadfd46c41f2f5d3ddb242ef0fc1af1c0e522b6f1cc6dff2f85cb47c38167e457d84f940cf384823f99844ffac57a858e0aecb7ec3b2e6dbc0fb85fba7e6062c42ede06628af711f69025e5d3f1999863fe1b3f8925f2d114126bc83722dfc96a81796f3c238ee14fe33d714af96483388f613fd85b39f9064d2ca87f3cf06ce34dbf102bb27fef19fdf10836e6b3fa9867e23cb6fa1d2e890bd4a331242eb11fd0207f2a55a07fe86dfe97daf59b1af1a24dff87f8bd27ce115fc38767ab8fa127e698b718fc4d57e4efcaae5ff9f9a53f264e17f6fa2124ce302fd53db144beece8fe2a83be9b8498e2b9b7f2a9c8f97fff0e76f11f9c822bd78fd7601641dedefabf8a5dbfabde3c5bfbb421710e7955445c42ffc33e7105fdcc2f603390d8f5d6f4fc8af60b7adb9fa8c4c59312c429e5834f628a777e475ce2fd13276688ffdefabf690629df8c17c4a4ff3e2276fb1bdcb3954f8cc48cfa657a5e95611e0fd688a97ed7d0676ae6756b9fdee61395f9f7dd12533c8f6bc4945f06452ca13f71e5d9be7f18c06660c3fe143d9fe5c82f7d4bccd03f331b8f2a37fab1f61a97c44ede0db031bfbd5fbd1327d0dfb0e718f1326f11f3c45eafd789ddfe17de9fb318f56284fd0bd79f7617c4947fe448aca97f3a00bbe7f5587f5952ffdb7f1093fc9d3b4ff139c29e6545f9bd7d232eb01f3ce4c412fd647b0e6602fa6a214fa9930af5d2f6fbaa72fd6aff464cef1fe10fabf041fced1347f0c7e08cd8dd0f7f65a55b5f40ac687df03fe69ed70b628a3f79e819f9ec9a98e2a5de24a67c11d2fdccd5fbc27164f5dd3e837984f50f2371965b7902e40f5ebafcf10836f2d9f3dd39b1cb5f9fc4146fdd0b714ef9c05dafd1ff28f80b77f24d0be282f69fe87ea612ebef7d0ae625cd4fbbc43a41bcc35ec2e807f22d8913c837ac11533c8e976046f56b3e21ce52f40778bee07186e7c1dea6a1217d4fc415f4dd43ff522c20df40e7cd848dfa08fd4999627f2a803f2bafaf8298e46bbf30fce38998c1bf3a773fc5537fe919f502f6542c427d1b2431edff0f1931f597ed0d31eddf378817c573ec870f3bc40cf3b32679a44cecf50ae77555923c27c46e7fa222a6fe497f1073ac47c7c4f4bda92d8935ea6987f8d0c65fd07fac1347e857da03625a5fc888293e7a0d36131ee4473ed29225e01b629d229e894d41c77e8a5d9f5e54f47d3710c4d42ff62331c57b58839d7f377b9e916f0e8973cab76f8e91bfe698b8ccd1af1d105731ea7f40ecbeb7ec82573b84f67d0a2c2a709f83658cfd143d13e798873b3b1feac8ada74b88295f7525b1cbd7585fc45cbf7f02e605e2a7966021b17faef0bed57c8afd729bbf74ecf5b54d4cf9bcdb2776fb5feb60e6e68f67cf365f849cd8c5cf2e7189fd97f18558609e9d6f896586fdef8858231eba77304fd0af0e903f361332fcd3e62f532ddcfe209e973057df3b6209ff1c52b0791efadb6d62eaf73b9b1fb4ef27ba09ccdcf7f288d8ed5f4b62ca47dd3171897add5f1073c4c3c88925cd3ff0df94c7d047f04e5c605e0dee8805fac1ae2356b1bdbed900cb3cb5dcd1f592e5d87fb3f55967ce7e21aecf9cfce10331f94f3811bbfd8a756201fb0d379eed7ada8e58d1f7cc5dcfd65e01d69bb9f531d82f1334dfea86388bb07f00fbe44edfe113b1db1f92c4645f1d1053bc0c8c5840ffe115b1843c1d3dcfc883fdf98438c9adfcf325719aa3bf7a2596985f263a2fd2d4facbb4eed9fa2b3b25a6fdfd11facd65061e88cd04017d3e1347a84f9d20ceb1dfd41e1157880f293ce3f70b8e8d0aed7aa1ffc2e9a35f1273e4bbfe9458101f7a46fe433c14c6bfec7abb2db090c8171dd65fc832c5f779e4cbd2e7f7899853ffb3e519f50cf9a6e409fc5fdd83459960be60c40cfd7b8bfc53ca32b7fa6d908f4b9561fddd26718e7e89d3fbb5c03cdec2df2b978fc21762ca175d4accd11fb519d8b83bea73e219f3ad639622df4fc41af6096dbfa999f3cff091d8e58799b8c23c1dc4c44e9e07cf58df81676b8fb02376bf57382496f47b0ed41766fc1bf9ed9db8247fdf27d6d8af6b604f2632e497b621ce910fdb6de202f38d227905277b7d100bd86b443d32e1867e563f1327e827bb10ac52f8fb40fa510af6d2a8df4c6719e62bd43beef4d7c6c4257d1f4a882bf497a12426fdf00d62cae73df4cf9d3ec24d620d793bc8cbc502f37b784e1c637d61e919f58813537d6a73e214fec26f8905e6d5593b463f3b217eb92c33c41bf20d576586fea22156d007837e85f397567946bd70ecd60b7f37fd33ea737746cc307fd515b1a0dfdbec102bda0fc0fa85d347f34a9c62bd6220aee02ff3bae302f23c130bece704e79eb17fd67ab6f2b5b087900be85b7d1097e86f45465c211f8d3131c3f7564deb33fd0d7ecf7047acd00f35c82fc2942bd4837be238b5fedd5e1057a4ff3762817adad3fb4d4540fee5c415ea87863da5d37f7847ece64df8bfe4f43dbea98869ffab2ec0c69fb0df78499c51bf49d7bbdf030d253143fcce4b62097d8cf0372923f8df3813e7d81f68dd7995229ed01f1b847dea8eb8a07a44ef37fe69f34b0fff947a91617ff591581596d9a767c433f295f2fa792576bf0f7820a6feb377e7357dcf857d158fc0f511b1c43c2be18f4ad0f7fc96ee37fe8afd870be21cfba1434c2cd14f314d4cbf3f1a50bf94f147c42fc9675e87fdd413e204fe3a35c4658679e18a58903d68fd52a27ed5f07f65fc0ff9a3f78cdf2fa6c4648f76499cc35f9b73c7f057754d5c209e6ae85f69fa3d4278494cfd73c088f302fdda1b31a3fa101173cc3ffd0eb1c86dbee8493fc6c3b1bf7a40ac18ec8b7ca49d3d6b46ac31bf856f9ef1fb9fa567cc475fae47bd84beb549ef38bfeb19fdc4197144fbd57b9eadfc614f9ca09e068967ab4ff9e819bfefe1c4f4bdbe597ab6fa55dbc4b4ff5c079eadfe8275c78877cd3de3f74deefd05fa6b551297f4fb4de698e68923e28a9ef74ecc50efd596677cef7ef06c9fc7371d537d1b8939dd7feed9de2f0f3c5b7dd64bcff0df1dcfd057414cf381def70cffd29e31bf3a7dd13ca406cfe81fdcf50ae7f59b67ec5f6d7ac67c94116bb0a4f78b05ea9bca3d23bfd1fa4cbec0fb761ca31fa81f1d23feb9f26cf513923f8a98d6137ac6fc507b867f70cff89e78ef98fa4db2a748489f1b9ead3c92fcd9fd1e561f7886bf9c3a86fc8af421e8fb44fd424cdf2764e519f345ef19bf8f14c4348fb24bc7a8c7f38de31cf6207f37f5c9c6a7dcf50c7f70fa2b51bfd5b167cc83ce3e25f25d4ff12c68bf45a59ead3f04ce3e0ce765e919df9bf73c5b7dceee7d0cfb49835b3fc7bc233bcff89eb2464cf3777dec19dff7773c633e72fa97607141ace87b62e219f9a6f08cfd904dc7f89eac9dfd558e7ec1ad4fe3fa21f28cfed0d95723ff4bd4172d1738af9e3d633fb421267f97db9e310f6e3886ff0bca0f320637a167d4d74dcf888f77cff8de70e63843bfbfedd9ca3b3e1127789ecc3d231f397953707de219df8b7acf981faf8933b0a4fce8f6dbc49967f853ea18fdf8704b5ce0bccc3ce3fc9d67f45f478e0bc84ff16ffa57e4a317cff83eca1da39f989dbc65699fdf907f987e17dfa33acfd8bf1b3c5b7f9a9d7d2bccc3d2d983f6579bc0337edf72ea19fee7eccdb03f2bdcfa5881fd912bc715e64de75fd46f73ca07eef7aba3f06cfd4f6acf989f978ed10f4d3b9ef13d5e79463c38ffa3fd6ed17ab6fe3a3af925cd57179e11cf9fc40ad70be75f0afbcd53e4b840bfece4a1fd6871e219dff37acf9887c97e6a011e4f3d231f2acf98972bc7e8af830dc7b0df48f635f30aee7ff50c7fbe709ce3f7b6141fa67f44be7cf06cfd9dbf7b46ff4ffea812f0f8ea19fb5db563f4973c725cc15f0f3cc31e941f4dbf8a78b9f68cbf0f70e519fdb0748cef1993d317ed0fe82dc715fa69aaff2ac3fd527ac6f7ad7bc7d8bf1b9567d8dbad27477d1185675c3f3a267f7cf60cf99d3c7985fa42f5c1f4dbf679fccd33eaffad67c4c3a6671b0f8193a7403f3d4e8e313f0bca27aaa4f9f8cab3bd9f5f7ac67ecac27189fd47aa17aac2f5f2cd33e26fdb31f43fbe7bc63c47f942d17e977af40c7d6ac7f0dfc9f92fe58ff1c37181feaef78c7ce1fc8de3fef1c833e6e1d071897e95e25509cc9fe2d0337e0feafc99e693d1ad4f14f8fb184e5e51597d8ccefe942ff885677c6fbaf40cff77f228b0509ead7f4ee79e918f9cbf50fd0e179e617f172f1af7d7179e118fd79ea1cf13c798a739add7cc77d0ef8d67ebafecc433e22d710c79a6d8b35def347bc6f3fcfd88f796d6a3233c6f7af20c7d1f3bc6fdb33f0ffb73d28f8e291f3f79b6f7b3ca33f281744cfbf35f18f174e718fe51a79e919f1e1d57d8ef227bea04cf17d233e2ffc633eae1a1e30afa72cf4b293e969eb17f70ec19fdfdbe639237770cf9d8956366edaf3acf98a7c9bfdc7e685b7b467edc742c104fd4cfe81ce759e919fee8f493c3fee3ad67cc43cf8e4bf4bb4ebe82fc453b467f320bc715e603ca5fab1f6059969ef1f7639e3da37f73fa29b11f51ef3a463d61af8e99d55740f941537fd35c7846becb1ca37e0754ff34f5fbfcd433f6733f3ce3f70efefa12f238ff64d8ef939e05d647f9c3ed8f30e119f3b1b337873cda5f2facff04cebf04aee74f9eb13f71eb19f1e6e24f94563f815baf1970ac3f3bff1412dfc75d3c4b3c2fcc3ce379cebf24f67f26e73f12f1c49cbe15ae0f8f3d235eb9677cbf9f3ce3f78ace3f15e23f74f652a8e761e519f5dce507da3fd2fe3c87fda9df300e8afdabc933be37a59ef13decc833e2f1d333f4b7ef19fb35a363d88be59eb15f75e819fefee57ac433f38cfdaa3dcfd8ff183c431f8967d8c7afaf40fc679ea1efc033d6bfeb19fed47bc6fa63cf980fbfc88ffd8d2fcfc7fa5dfed3b07fb0e319fed479c6ef616acff8fe1279c6dff7f8f08cf8083d63dedaf60c7fbff68cef05ad67bbfec0af1ff1c9bc3e4bacbff28cefe9af9e516fb73cc3fe8d67acdfe53b8d7c3f3c79c6fabdfcc87741e919feb9e919f3a7970ffe1ebc78c6dfe75d7846bd7ef78cf55f7ac6fa0bcfe837bd7f631ee3de1fe9f773de1fd0efb07bcf58ffd233d6effd1df1d77bfb30acffc233fa25bf3ee4e7dafb3b83fdef3cc3fede7f18f29db717437fedfd93a15ff3f233d8fbd633d6f7e619fd90b707b3ebe33e9e38f6effcfbb95d0ff3fece913f7dbc20df08ef3f1cfd9fd73fea01f7f983437eefaf1cf1ebfd99a3dff0f6e7b097d73747fdf6fae390dffb27c7fe985f1fea8ff0f126d00f7b7b0ad8c7c7b780fc3e5f08cc833e7e05be67797f14f8fba9cf9e610f9f5f51bfb8cf0fe83f84f72f81f9c0c78f84fe7dbe9390cffb97847c5effd2beef6cf9df7bfcaa0c6110b2909b7f9be3bf4306f35e11ca509943ff5906f35feab0f93bb2fd5d19ccb3dbb0336fefc3211cc3299c7fff36430fe163f8143effbc147f4706f3d465f812be866fe17bf8117e866b4696f5afed61feb46124d80cb7c2ed70e7672df5f33298e7ed9af7ab702fdc0f0fc2c3f0283c0e4f8c4ca7ee4d5682b3f03cbc082fc3abf03abcf939297e4e06f3a4dbf0cebcff3e5c845118878991210db330373a29f02692a00c2bf3c72060010f44207f468abf9661150181f1bf400775d0046dd0057d300463300573f0103c062a78721204cfc13278095ec3c85cf316bc071fc1e75f4bf16319cc82d6561110ac071b667d9bc156b01dec04bbc15eb01f1c0487c151701c9c04c61ac19991e03cb8082e83abe03ab8091323e56d7017dc078b20fab114df97611501416cde9f046990057950046550b130b8610163e127e34c30c914d3ac664d78c65ad6b13ed86443d0992bc6300d0ed9c466f6c01ed9d38fa4f89e0cec7915016cc95ed82b7b635db064efc62803fb609f6c8dadb30db6c9b6d8b639b6d80edb657b6c9f1d986b1a16b2c36030321e0547ec989db05376c6ced9c5f7a5f8960ce6ea691501ec925db16b76c36ed91dbb670ba3e580452cb66ffed691b0d478e30ecb581e1cb0c28c62150f79c019e7666c92df93e28f32b808e08a6b5ef386b7bce33d1ff818bcf089cfdf7d3f1dfc813f1a4b1df127fecc97fc85bff237fece3ff8275fe3ebdff6cf3fcac037ccfb37f916dfe63b7c97eff17d7ec00f830b7e146cf2e3bf92c04a71128c66e1a7fc8c9ff30b7ec9aff835bfe1b7fc8edff3c5b7a4f8bd0cb612291ef198273ce519cf79c14b5ead3c52843f2301db168160820b21a450428b5a34a2159de8c520463189f9cf52fc4986207c110fe2513c8967b1142fc27ba478fbdd9bdec587f8146b625d6c884db125b6c58ed8a5737b625f1cb01371288ec4b13811a7e24c9c8b0b7129aec4b5f853f6fcb33f88db50893b712f162262d72286478ae42b09b6442a3291f3775198952a5689525492f42403c9249762e58d524a25b5ac65235bd9c95e0e7294939ce5c3d7527cc3278390cb47f9f47b8f94cf5f64904bf9629efc6adef0662c7ececfe4bbfc909f72cd9eb59e2737c27ce58d22979b724b6ecb1db92bf7e4be3c9087f2481ecb932f52fc3936cdfda7a192675f3c529ecb0b79f9950c57c6c7aee5b53832ef79e14b26e58dbc9577f2de9e5dc848c6329129bc51663297852c65b54af88a9990134a2af547199456b56a7ced0954cb96aa8347aa5e0da152e31719d4a466f5206af5c843f5c44a7eaa9ed552bd7cb1957a556fea5d7da8cf95379ab36b6a5d6da84db5a5b6d58eda557b6aff8f32ac72b239baf0561da84323c351a0d4b1785127cae8449da97375f1b547aa4b75a5aec5a1ba3139e0993fc9dcbce9f6abf377ea5e2d54a4e29537aa44a52a53b92a54a92ab5ab43f8c31ff470a4835069a6f94a162d42ae4da5d22bb9ded4b6697e6bdde8f6f731a83bddeb418facd0933893b59ef5039d79d44fea413feba57ed1aff046f38437fdae3f8c049f7acde9fb6b1956acd7cd5b37f4a6ded2db7a47ef5a69f654a9f755ae0fe4ae3efc5636d047fa589fe8537da6cff585bed457fa5adff02b51eb5b7da7eff54247f04655e8d84890e8f4f7127c2d839122336fcd75c1533384577558073533dadbac792d6457cb5a7d3f33d5baaeeba66e576fe76fe2c834305a1cd65dddd7433dea5a05f5f46d09bec405fe7b3dd70ff563fdc4f7d91b1feae77a69a428ea1759aa449cd7aff5dbf7a5b092bcd71ff26df57613b3217f6127f567bd56afd71bf566bd556f7f4b82af6393ce2e0355efd4bbf59ee917aeeafdfaa03eac8fea63f55c9fc8ba3eadcffe2a57d7e73cac2fd8897aaa2f8dc79ed557f5b5da3512dcd4b7f55d7d5f2feae84b04aea4f93a3f902ee250d6499d9a3f5ed7599dd7455dd655138ab3261079c31ade881f4bd148f7762683a34635bade6aeaa669daa66bfa6668c6666ae6e6a1796c6c6ff38d7a1134a67f6996cd8bedc8f683c3e6b5796bdebfce8dcd47f3d9acfd408a75360547fcb4d96836d56eb3d56caff2944a9b9d66b7d96bf69b83e6b0396a8e9b933fcbe0a5380d779bb3e63c18c3e3e6821d3797cd55736df2ee57b9d1c876d3dc3677cdfd3764583451133749933659938bb62964d394c6ab4c9668aa366cc63668594bb3e277faa8a015ad6c55abf9695bb393306f9bb66dbbb65fe54656ad7263781cec85513bb0ae1ddba9fd4377d33eb48fed53fbdc2edb1791235bcaae7d6ddfdaf7f6a3fd6cd7be78c4b7fb492bc57af8d86eb49bedd6aa06b72fed76bbd3eeb67b2e3706fba66fdc0a96ed7e7bd01eb647adef70da93f6b43d6bcfdb8bf6b2bd32ba3b3123c1b57a6e6fdadbf6aebd6f17dff7c9df4bd1466ddc266dda66f639a6feb5795bb4655b195f33b9313c08aebbb0334db43d78273ab992a0539deeeaae6193f1ccd0788fa95c5ddb755ddf4cddd08d5fbf1f31fa7d19baa99bd576f7d03d764f261e825505ee9ebb65f7d2bdb2a3f0b07bebdee9fd383ebacf6ead5bef36ba4d338b66ab7eb2be508f52765bdd76b7d3ed767b5ff2c38ffa87af64d8ef0e4c9d3bef0ebba3eeb83b11e7dda9dcedcebaf3eea2bb34eb62bf3baebaebeea6bbedee821da3a171d5d9af7adaeebe5b7451b76374107febfd7f2143d2a55d668fbc2bbab2ab5679bfcbfab00f7ad6f32fefef452fc575af7a6de6bcaaafcd8493afbadabee9dbde6404f3cfd0de7dfbfd3f96a11ffbc9d41a7bf473ffd03ff64ffd73bfec5ffad7fead7fef3fecfb3ffbb57ebddfe837fbad7edbcc205b66d6dc0d0ffb9d7eb7dfebf7fb83feb03fea8fdb8fef49f043194e7aa3fbd5d19f99e3bcbfe82ffbabfebabfe96ffbbbfebe5ff49139e23ee9d33e438531d366c33e82becffba22ffbaabf30155b2b33760ddf95e087b630835d77ea0ed38724a6232b063e88410e6ad0433d34433b74433f0cc3384cc33c3c0c8fc3d3f03c2c8797e175781bde8777d3379863f8187e307f7f5f86616d581f36860dd395d3316c9a8c8ba319b686ed6167d81df686fde160381c8e9a7438aeb78693e174381bce870bb55e8bd561bae96ab81cae7e4986ebe1c67462740cb7c3adcc863bd3a7fb63b81f16a6577c1ea2a61ce22119d2211bf2a118cafad854da35d33f7543b5faff5c19c3f1976c31b2919be9e4d4e4177b985efa6614a66e99c3f44ce618e5a8446f6a7a03ed8c7aac8db636e4f6d8ac648374a64e1463fb6b32745763274e46131ea643f7c73898da690e33c135e3384e4e27e33c3e8c8f2b8dc9adf6babd26d9ac74e3d3f8fc8b7a588e2fe3abbc36b9d61ee3dbea9052d4ee18dfc70f7d2ef56806497eb3d295c9a69bab4374a652c25e77c682b7e3e72fcab036ae8f1be3a6a9166f3878b03ad4a3e9d5ec316e8ddbf2751c4843bdd1da8ea991b9992ada95ad56d241b671f71765d81bf7c783f1703c6a4dedf9fa10aabe581de3f17822e5b8aa4aabaa766c6aab39ccf463ecb4b2d7780ae98c6c67bf268391e27cbc182fc7abf1da740c74d497ab635cd5efe5783bde99b9d668a8bd3213b639cc84f9063bad64fb22dd78ffab32182916fdfb188df1988ca9e94dedc126734853159fc76ccc7968b4743116a6c738341dd6ebea10da743a56b6b16cafc6cdb19a7e29369d1453605ec92731492682c3af8e39cc263569f5c4cfdbad76cbf4d137a6c77ba92f8263a1c86a17e270aaa7666aa76eea7f450627055f9f86699ca6690ed3f0c81e9f38827e7ae067fccc747bab717ab93aa6c795ad56569b9ea6e76939bd4caf6330bd4defbf2683d7c5c7f439ad4debd3c6b41926e1c1ea6099393ea62d7eca4f8387e06875f067264df7b4b257396d4f3bd3eeb467debf3f1d7cbf6effb50c5e8ac3e9683a9e4ea6d3e9ac37e35b188591a98fcdf0c47878cc8e4c5f9505b3e9318d9558319d4f17d3e57465de7f3ddd4cb73f96e0e7f6ccad1477d37dbd3e2da6687a089ae02ab81a9e4ca57e090f591e8cc1beb58eb1d3149bf727533a65533e1553f9bddee9efca405254733807339bf92cf8c84c2b55eff1d1b4548139b2957d6639ab59cff5dccceddccdfdcfbcffe7658014f3308ff334cff3c3fcc80f79cf0ff8c042f6b1b2ccfc343fcfcbf965361e38bfcdef7fee9eff7d199c67cc1ff3e7bc36af73cdf7c50bef8d45aeea74de9837e7ad797b1501f3cedf79ffdf93c14bb1dbf4f3debc3f1ff09a77f3e17c341fcf27f3e92a02e6b3bffbfebf2b8397e2bc19e78bf972be9aafe79bf976befb7304fc9d2f8ebff05d6f25c5fdbc98a3399e93399dff4604fc6764f052e473319773f5103e043f1f01ff29199c140fec813f8807f92b1ef0efcbe0f78d827ffffdbf2ec39fe5f8d5f7ff7b327c91e2df79ffbf2bc37feaf8e7fffb9ffff8ff5ccd2287 789ced5d5b53db4c93be7f7f45ea9dbbafb6e6b32c5987dada8b70720c04128209646b2f66743027070810025bfbdfb7d52dc933a3912c270136fba93a60da927a5aa3e7e99e9326fffcc79be30fefdffce39f7fddde89bbb3f84d7c2abebdf947723f9f3ffee77ffdc77ffff5b73718bc09bc374377f066f8f7bffdf5379fbd89dfb0c160e00c06a85f14fa9074b18fba37080678be9ca03e1a84030f8f9fa11e0ca2c1087507f5702007019e4ff6c5201e84a80bd453282ec6f333d433c719a4a89fe4bae338ae83e5b331eaaee339583edb43dd73468e8bfe5ea23e727c07fd911275df091df4879fa21e3a9183fe081f75e1c44e84fa77d463277124eaef514f870327c1eb37727d38183a4e86f6dfa1ee0cdd21d5cf08f5e1d01b3ae8df17d45dd0a97eef51f786a321f9fb80fa68180cc9df5bd4fd6138447f19d6371c0d873edaff887a349443ac3fb6857a3c4c86e42fd94f86e910eb53929e0eb321fa2f19ea99eb0ca97e835c771dd775a97e87a80f4127fff1fe41f35cf45f84a87baeefa2ff6c8abaef062efa2b63d4033772c9dfafa847ae70c9df0fa80b57ba58df92a31ebb898bfe4bbc1fd03217fd6758bf6eea0d5cf45f60fd7b03cf71b1fec526ea8e37f4c8ffcfa87b9eefa17f721bf591177884cf0875df0b3daadf75d4434f7884871475e1498ff08078f5622ff5d03fbe837a22a381c0e3f35c1f0d46430ffde158dec891b183f527cf511f8ebc11d5e72eeaa35130427ff815eafe281c51fddda11e8ca211d61f3b465d8ce211fac327a44b49f8e7583f2309e5a13d36403d1ea523f2f710f544a60ed6bfb8413df50723c233f993c9cca1fb417ef8037f38a2fb413cfa8eeffa58bf12f909dac8273ce0fdf99eeffb58df02cb072df0a97ef1798116fa743f88773f8a87845786fcf3055417e2917f2a74b7c02f3e1f5fc61ee19753f9b19ff874bd8b7ae2673ee125223df609cf129f8f9f06039ff083f7130c032fc0e721309e80e607c447d247714078e4885f381a06743f21e9709ce21fc68b2008a200ef8f23fee16c11209ed80fd2e3c8a5fbc3fa82b36540cf03eb03b424c0fa67882fd0b280e221f225c84227c0ebd93de9b1f4287e227ec241380c880fc8c7d089b311ddcf37d487a117e2fdf203d2e3c4a3e78d780ddd7014129e12d4fd300ce97e112f6114a7845786f80b452843c2e37bd2a13c8af78fa427c311dd2fc65f383b09e9fe46a42703c2b7407c8671e28c887f18bfe1ec2ca4fbbf463d8b9c10ed49accfc889dc88e22de225729321e1935d17bae7137ff17e222ff223aa0fbc9f68140511c55bcc57a04511f983f107341951bc42fc80964474bf53d29380f022111f511ca511c5df5dd213bfc027c66bb83a8bf07e38d94f92a8c0d31aeaa91844884ff6447a22084f0ce3b518886144f11a9fb770842b08df783d6823417cf450f7e07ac23be61f381a088a7feba427055e052f7449f86118ff842f4241cf53909ec421b507480f4424c83f7c7e70b6108477ac6f382a05d5df11ea42c402eb8f61bc062d1514eff17e45223241fc0d484f52c297bc263d1d44143fa9fc540e04dd1fe241644956e00be39774a42b880f184fa52b4792ea07f39bf4c01eb51ff0f9c3d14012bee9fc51ead2f364d87e91be0c253dafefa4a70ee147c485eed1f365d85e016b4252fd209e6524a5a4fac0fa062d91e8af443cca58a692e20db6676402e553bc3b2a749fea5b627b4c66b123090f3ba4c3717a3ee85fecc4aea4f88df7130f632fa6fa43be80e6c714af9f4887eb897f6ea18792f885f12286781853befa487a1ad0f39518df631f1e27d947ffe0ec2826fc30d2d3909e3fc7e70947654cf541f6451cc7840fac4fd0d298ea639374a81e8a5788f73881f2e879be2df4b8a83fd2d33491943f100f71963831c58f31e9608f9e37e693c449dc84e207e67bd04609c543ac9fc44b53ba7f89cf138e06095dff9674288fda57a59ec5c42fcccf899f8409e107e32d6822a1e789f13289e072ca07f8fc414b12c233c697046e30a1fba3f3e30c223c1ec7f80e74c962e21f1d4fa0b947f783f13749d34142f1e596f4cc4b28ffe1f5e9201d2684177c5ee930f552ca1758df2934c712e223e62b38eaa714ff12d2a13c7afe5ea17be4bf24fb809794f82249cf46c5fd20dfc15a9852fb1cf906674729e553e42b1c1529e113f10547654af585ed23381aa784af7dd2b3c23f86f916ce4e53c2cf67d2c13f2a1ff36b1a6741513ee6a7142a28a5f8b4497ae653fdf11f855ef8c7301ea7693648e9f871a117fe726c2fa459e6a4c457cc9fd9201ba654df985f32277333e2ef49a187644f20ffe1e828233c627ccebc2cc8a8fe4b3d2cca5b2f7451d8c7f658e6676146fcfd5ce849610ff90ed6a28cea1bdb6370b6c8c81eb6a7e0a8ccb0be393e5f381a6754df183fe1689261fd72cc37705492fd8f187f32a8802c26bd975e7a69929e23bdf4d22e3d477a790de18c0b2e795c93e4b53dab4bcf915e5e5a78ca333e6b90d3d7f6ae2e3d477a7959e167fc1cb87061959e23bdf49273e41233869d253d477af9171760c8bc911f7d1ee9a597bb228f3471a4cf23bdfccb0b30e48c7fedf3482fbdb409b4b6aefa3cd24b2f4d8299e48c5ff31bfe0de4b6cf23bdf46293822967fccec823f7afed595d7a8ef4f27a021cf96ee49187d7f6a92e3d477a793da971a4cf23bdf4a2c9ffcf3cc27ff047fec4dfc2cf1a5f7f6def7bf9b3c5c2918dd7f6a92edd38c2d7f926dfe263fe8e4ff836fc4cf80e7c6ef35dfe9eeff1fdd7be0b8bc71ff847f0f8807fe287e8e921fc75c0a7fca8bbb7fc333fe6278dc74e205efc80df5f7eabdf03eef021771b8e7a7c04c71d3eff69fb3e9f83fd006c843cfa656f3dce18fc638249ee598e8f58cc1296c24f66f3d9e088754d230fd98c9d828d949db11978de50371d3d8ed83993ec825d82bd394bf81dfbcaaedaaf59ce11fec8ae810b3b2013fcbd90093206d8c26ef8db0efefd60dfd82d3ffbd527b3a4947576c7eed12f62f24ec569f2799b8fd9f7653990477c8b3de4ec62e0b57a843db227b080c7f0f803fbc1a7ecad0d232bf93d606b6c9d6f2052eed906d78fba6c93dfb22d362624b1776cc2b63b5af6d836a06c87edb2f7fc9e9fd20a5bb6c7f6d9079eb18f6d7600c5013b609f74e1417e841db2e962c52efbc08ed4fa83a39f0b6f8b15bdec989dd4ac9b79e454b1f0097c9e6a36f272beb001603b5cb1761de6f06f5003fba63db038664396d7efc07e6d3b4798c74688304299f9b953e12f47de017f6cf1711d324e9e81b699cf37f57a02e604fc3d0b81898720bb2ce207820bc68f57ab873cbab300ecefd4fc9c54df95daa1106d3c115ce1d63bfea1f85642349854bc5bd8836fd88388db79c2e7221129fb2232436650d33336349f9d3865e7789d0798b8afaf231767e25c5cb494e7b2585c8a79c98a66115fc5952dce036b6b5ee1f9d73c1437d5cac4c5f773ee60c9df2bf65c68675c88b950224e531e11171001be54164c2b794999b8ed1223a0ceef982bccda5b94a87aff5d3c90ffbab47144fc0074a859a3fea9679609e0ae214b884764c80eb5d184ac30fd1dda40dbc5f70bf46d17fa8178eade96116fc15693bf3aa7e9af4f62ada166cfb4abb705b289dd15f531d1ca503416b2469600aa361a10ba096d95b1f6bc0a4440d4dbe64ca4fab7157272d960336b69013c6fbd3c03ad0636f3dcc5f53a105bd6b3e17c31d638a0f8c4b6c43b31ae5da596beb1c0b6655ceb94a7e25289f5e65a15dde7733169e1872bb68b35c626db9a56c2ccf825ab61b889237cbd42f5c4c099f99d1ead0f6cd1195a2e8b489eff6ce1b79b153fec78a6f6d127b1d38521908bb6954c675aabe73e622bb7b19a3dea7709ada948ec563d31bd04b506f27ecf939d756cd2f464d89e86353dc26d88ef46e433f02ede8bbd3a430a7e5cd49066634869695f7c506cf890bb2e2c38bd502cdb91dbfc76089d719fb7d5ac1cc9e3c2d062d7e601f9fc511c34c539716ba9d776219bc6d89a9d23d0171d37e2c18ca3469b0b5a4a1f6af6d6f42ba0bfb00e98b3b5df74e695fd888332f334d48727ea1944f5d796fb8abfc5a199a900cf6fb558308196d9b4666361552ff7d0dee6149badcfbb1e29d5633a0a4d8ebd1747c61d64d628de54868adf8cda8b793fc460421ded6de86dc52164c6332b479aca6b6109dcffa11d1356162fb34a3cd5b2938d231041c6c6b39fd47493416ad48dcc9e84f86c20eb1db0a453ebad2a7b57b48c0ab0eb1ac376b80dbf261bc9df91ce109047cbd576ef4c2ee69f9ff8e77a54639f5b9f4cb76376bcced89a51d67a474c587097dbcaeb401c8b9315fd5dce8fea1c16d738d23dda2f384a71ff4cd4dae3e0ffb7ced66c565b39027e1f6868327be7e6b73a26493f506333585cd3f035e12676cd8c64662b1c71160dad18b16ef545cd21cd719f32d554b31801a7cd4860b6daf4d100dd2ab4e02c5e3eb43e9b5f12b6af8f16409cfe193b84d2cbbcf78e2c69b2d2d6065a7e3784eb81258fac5e0f8b5c222c35eefc9445fc0d59bf6a83d7392286161c2312c4ae7001ed277cce5df8d98716c9943d18f1beb86e81128ccbfb35b4b68d95d5e376d1daaff7b1c1f6660da7a5a5b1f0f8117f62dfd837bec9eec42e786be7f48e70357fd78ce3f6fca4b2d16c271ed7fc0cc4e8a7906b0844cdfd3a52d4311e4047db5b4c64e3cc8a0ec26f42b5c0b685bfcc1bf6456c88a0a5a47d118a88a91e63396039b2b6b56c658cd95072102632f3be4b91421fe5428e9f3671444a198b4d11894d3615750fa816aa7e8ec99122e2ab18257e0cf9177104dc88a09d7796730c5a642e77d995782a78a263697bd12a8733d7b88efd26b1314545deb634f696e1eb063a4b7f3d99f2b938ca25e734fdc5aef8a3d855ec55e7337f31d6c0fd228fd4fb5bf817bb16ae4cd839ff00f7f524d6b58c529e55ef47034b64267c39b3e093f094b24bf030644c363c5b3190a7705717625be8a89b496de4414c646c5c79029818b38fcc61524ca046e67cc4b6d92158acf55cd8fb0a65c7e25a9e832d2be7642c2fe0d9e66c3aacf196cee06c863127aa8d58cce4e5728e0093cec53b7882b446d8832738e3e752da9822bef2d4a8714732c59799b89719fb284f01b3a5c5fc1e8f207a5d6a36a9cd97357144e9fb2edaeb378086397103d97156ae6dc64f9f9f407fa086247ea030fab38137337f8cf994ef41467802d91443f1a9e29d79dd58ef6143a6d0d99963f89eaf010efc453d28026c81dec6b866bbca7cf95932d130afe40be10137e6984923e0d211c68dc5fd2f7c31465baaf23d1eb0430b1e666cae3cb75beb196bca197a3b68266ef5b2d8b99cb32df151c66c437e0566b9d6dac8eff5926d99986352f3f94c66757f449a23ad3ccbe4249d913f830201470a8b08d5d7ed1c913379557aad7bc343f1a0592b6c8acb5a8dcf4522e7e216187a07d147b96be3a99c893dbea1fb27633b47aa7e838af5e982758bf2e9a728c515809d5a0b7d5266129eb7d0d46ca0b7a1a680e8a32ae2cf8ba87f0c6da47b5b3b4c5e2bfe9e18bee68cbee6a95913468db8ec1ce702f57ecb61b9ee04fdadf75a26c0db2760861225f07704e787da38209debd5595230f0a68921e5991616cdf88d5affdc446d6696859e45262aea02fe9cd63862cc4c8a81e90f7b07cf49f5a7f66621fb4c1caaceb8d7cab890a7ad1c3985230d5e630cb8b48c285cf251fdcc3a2fcc73e8b7b8d2fc5366fc171c4136adebb115734868b76af8e002d68df609bbaece59b3b7e58105fb7caedf4581252f6fc941ff476ff3e7f28e468dd0dfa199bfc0df79331e14a4a61503177da8b8f277bfce65f620bfd52d57f63617fc28ae695ae955e708b41f54cb705fe69b47c66824cff7a8d29ea8accd92ebd1b2ad3ec0a35b0d1d3379a39f51cb23d50c47754f7786bf5be2583f437cd4223ff2b08923e23bcbea68d67d1607d21cf39bb11df3cc66249867b26dc3d6b86cbb691c89949e05e20ef493652555d134d4da47b98577c558bb5beb8f146300253feaf755c4c1b9855ddbd4d6c7e3631dc9b9bf6d88506a79aef9441e1fd48ea96dbc869ac0fb8fa0dc89666da769c6bdce1179afe79c3a47d8077dfd21d8f86ecc8064f6d2baa0c398bbb170c4cc23d076319e99c91135eb9130a3c7d29247a0fc2ecf9009a35706dcfaf9d59e624faf51362e679dd4b656113dd536fa93d90fb27b4b3c616f95ebe9f3c988cb6a86baaf6728dd66c1137dce1bf15a9c71a265bd49de0eebe62ff5a3a0ef65b62bd71bfc9db0f325befada9859fed3b07aadc69199d834cf30383213666f34e7c8923ca29d1f31c9122ef9ad98433f229739bfe531bf6197103f1d68391918d5ef4ecb2379cbffbae68fe9f156ed9e3eea6734e69199187789ffc8dd73c52b8afe974de7b37371c026f90884c84a6e413ffe3df4d88ec5833c93670647f62c796420f456782eebab642b259394ad97612d2e2f18b4bf3c1716bdbda1c192493e930fadb14db307243e09ce9eba08f4b23c9cc7d4f31bcec0407f7f4dcda6d85759924bc5919245495e94234d79847b6c539c420c9f2d91468ea03f7a1e315a7e5d38d23d8f08c7b6aeb0e1ee02638c70c6bfda6a1c7a2f1bf5f5beedb550cf23e0adc702bdff2ba6dcefcc0f92a99e47c46e35ae3531183235d74f34db85be9f9183443edee121776c63c55d441f3f287bdae59dec9bbda7e55e1a7964d29123b3a51cc9cf98d56c74c823dc656b6c4b7bfa2616ec33e3af9947666cd0352e63ad9bec7d679c13b1a3a20eca6c6394a7fce8966c79648ebd6e352a5bd7fbd9bdcd7f03968ff46c21a685e5dafc08b3f47f1b6bc2c5390d05df2cc0d2a646de6b9f7bd165627c5254f0b01d162aeb023ae591dc1bcc236a24786c1a9531fb231d38f21379847d62ef2b062c5f1dd83d8fd4d633fdd63c3263ddb3c899311a95cba9dada960fda9ae995c4cc2345bcded5dbe010a7bdaefe161eaf6958cd672a704e4059af55e2ee6495685171afc4f227cddf897eb4d38fce81728ce2ba218fbc5bd6d6c23ca25aee9a4796b7b57e228f409b60a2658b5518d29e4768dcebc7aa1ce99847f27bfda65fd95eefda68147957bd7dc52e70f5f3caec28fc33f2088e6d4c70fe50692941db6ba57706a1e7e01a71fd00e3b2de1fc17154ee75b70d76d7748c23f7e68abf3ad6bb32a4368e9073ef633edba4ce13e5b2bbf469b9caaa1c1a3f68f8df669e3f8f40de1d748e9eb6b3daf2c8ec59f3c80cf2c04a6f10c3b3327260f9e62d737e2e7f94d290473ca36d3f5da9c74ef3155a8f86dd58f348fe57c79a28ecae19d78f73ab7caae0bdbb1823562aae293f81e55a1e59eea5d667ff9de35a2be6119c5ffcc9f6858d23b63cf24cfd116de6ae1b3ac4c45c45421c1107d047ff697ef0e63c32d4319347ebeedee6f9a258c9b2e8b74fc9b2d1becfe7383abe878bd71f415f5a4538ce6440af61ca770c5677ebadabf944cb2be291fa23b87646cd0a4bf248de67c23ebb9a9d5ea53f029edcfc22435eb73f72ba4adb255f5156bcc159fa7691738407fcb4ad1f26f649da6ac19a473ce8471b3d59517b0fa2152727e6f57cafc8039fb98ae53cc374d823a2b09ac7e86b05dfb95f8fd5389c9e47c67c0ccc6efd9d7fe6bfe92ff57b9040cb7b0a83967ba9f547ba8f6bfde63c224f9b5684cb99e43c13f93ebb20e2526c8b5b3163ef2deb275fb53fd27de417cb7d347dcff77b1169c31acb7c86286117f23117b1c7c00bf90475712b368c759bd63cc27dce6abdd9e90afe7ab244f222a2af916556ee5252c57176ddd16a7efdc8cc16f9f853bee258c908589e7c4bab0c71a561f59bbea1f560b4e61572e6a458fd3aa7b3708d6231e7afcc8f9435b1b43f82e35a5a7b50262f9f477884ef99d7b1c1e59abae64715f07c5b5d1f6b72e4c5c7b536cd2bdbd0218cfe48fe268db4f6b2d8941da9eb7d4d61c615b63c82b37207b5c8dcb2d789e1ad9a2b76cae85bac2c51db5a05fa9a7747303922b8de6b28e747aa5e43552ee404fb6adf8e52f57f16f339f479d8ee2366b587ca97495bcd3d5f1e81e79c59b0b19fef62c0ad2b742a9ee8ef11bf4e7fa45ce3be428fa4f67627be055c5bef997f9fd02851732d1819c99a47f231028ccc5a6c667efded74abb727c57af3450ec1590cf4cb5caf8518623fba8c2c83f74f467f3dcf239ff31e00d7e73c29935c6b6b72cf4a9eb5235cd58cfe13d93e6cb780f7a88fab4d5e238fe088afc612197367f97abb368ebc601e29e6f9ec3bbd587dbfab8d6a4da03d70af9794cfb9d863842ac67a2dfb3cfb19ee02a83e696a33ac2f8ff810d1c7c675f9e77ef5f6809963e8dcf74b77822b19a2f6c6f36ce115b13b30b25efe77ededa655a4ca237adbf070f935ddd7a270134fbf2d8f480333100b3b8cdff3c878fbe375fb23f9ce289d5626b22b5967430691de78ff8cc79d564832adee2cf3ec059ae7d56af34536c9f7c3695d37c2370d7c507b68bd8ce61897d5b64b89e96df6a36916a1783a7b1a522b16146b28af2abbbae569d79d88f909b4dab6f801f83f1698d7681c4d59afd5298f54ebb5142637e591bc5fad3fd9df9747a057ae63fd7c79fce4df8539d3f67afd91b2bd952e5f9b0a3dcada0c21dc7fb99f8b8af6a50c91a7626e6660dbbadfa247322fd69b1b330780e68d3af220afbd65377a0babd2ca379668de5ae38f82fa6d76cd2c11977f166b556ed2380b5874cbbc07fdf075e338fd3e64816cecfb816d299ea0dc48d9170f7764adec7e36eee87009ce3acf8fe09946ecfb8d79c478a350b4ee300d3dfc4b6865fdc4b8d6b3add75abc53ffb5bdc5250e8cb72789bba7c811e35b316eab037953e7076f58af55d4c79c7dabc5fb027fec818d58007d964d908f62281e21c398a3bd2556957d25b43ca2f324971ca79fd835d87373cb80de00caf1cdbc54e5277577069733a5afac9e9defc53be6537627c7fc2dc82658df130298f1036c6f2bfbeba91973b3b62ea0431ec17b5cacd72a3db1ce8f20e29e298f00fb8ecd272d1eec7b488b3d7129cb1d3e5b39f2bc7984d9de942fd7b9bbecc0f2565bc42ee03e6d2357ef30c2b9ca5bb7a537e3fa88324fe58578908b5d4e6b5eb0af758e94efff1933763a02b7f98eb6b7e2c4f8a4581f942b868bd1d4da7c432dafec14a82dedebf3710b9e5e9733f4d558dca3d65756a3ffb66243fda9e79df267cad5f55a1df388d21f51aeb2b7b59e378fb0b57a6c95eff839a0e11bc4d78049f689df00e2371a9151e3c8f3f64758cbfe2c58d22d5896f26b2e6cce13b65bec035cf39a8df3ccc32d6b81b106cfc48c27622bb723aec5a0b656be566fe0e1419d23d533bc2a56c9d7d1af23ad7e061d992e566359d6d1d6f16a1e51bfd7cf1bf32ffa281477c5b1364fa2b2bb9e29eafe6a25895d258fac34ae557b7f64d232cffe6cfd11e8a199efa65f6848a8cb528e3c731eb1ef11d3eeb315d5b21ac584dec59966abd9a2adec452438b571a49a2948e5b5864d730d879907d4bfa7eaa8841697cd76933adf68678bd913f9a0bed152d8f6b85fbcf76eb6106d1eaaedbcda688058abfa23fa7d2fe1489147f4f25fa13f0257268dcfbd644c898196f35eae3f62e5888e5f5b8caf5d213ea86fefd7f7a85851a8a6ae6d1ca94a897858ac73b7f49a2d785c206f4f9fa9d1e6ad156e28ef00eaf8d559a29400579cd8560b93b7fc519bc39b689f3bc69dd4bdc663c22b5a86473f313f32af95ffe27984deac6fdc577819ce1a38f22a796455447f5b8cdf152b07c35fb76bcf236a5ccc67fec45441511dd3667f659cef6ba532c4e88f2879095a485e2d9adbb24059fa541cb7cc14e7bba89c14bbcb993cb0e71123c300c28f68ec5719875b615c0b30d0a9adf59c79a488a1c7c6ca929fc0dcabf6475645f2446c993b5080b0dab8d7cab5d09647aa72f27da33695fdb1279a685c610fe209e2af678ec72bfd1105a5f8fec81c62ffbd05afb55e0ebb21bc2ddb7521cf57b86f96bd5d576fe71577c4eea147e396b339abe711f460aecd8fecb4aed77ab6fe48511761cbfedb1611fbe65be1af9747e46cb5bd8ad93b96d9e680e03b67b59dc1d9d4fca62d8f54a8a3f83c676f8b1d44ecadfc09e0729307e59e7c363b96f74710d560fd49d99da4d6b701e67980d7e1f2d52455eecbb39fa7ac2f34db87aa0ff9ee909bec9cd67869b656ca235c5dafb5a89b17ef8f28deb8f2aa693f54831f67f29c7f7fbdf55accdcb3e1147768e8d25ebc90f772ade93da4226a26f65d588d3a3861037629cd3397e611f5e903860680a42716884fec9efaa63833fd490cd937dc3dd56b8af296fe08e591b38225037104b637f35d4ad8436e9bddc0df01587ecbced9d562b56a1b4a156f23dc37710e4c71c1ce0dfecf85942dc03a9401d6f91e7b8b7bdf55ab7d0d7f8ff83ebb867bbd2681365cebfae7a23f12a857c035fb4d35c2bef2ab85b05d332ae34cbc7286bcabc76df1453f431affbb02942279d6f8bf231032d6e559de82c5377baf349f8c5d1fc581b852453e9afef03bfd0cf3ff0dc2ddb0f0084be4532ef44e2d0ff4eb58528c80ccf8391b36ed8c2c25e4080977d8828b02377371c9b6ec76e48c7d11a7ec28dfc30acfbc32e4b83347caf5812e4f717579b1d2bc5867eeb623d89247f02f35fa7fbc5357b083cd908762422db7050a3b72a414bf5c1baf4ab16e7e5eb60aad399a22107992ef581b75d9e108e7fc8f68176e3e20ee75f0b2cd87df708638668eb8955bfc417cc7bde2012f725b0cf2772868ff5b9b2d7b5be0f77bdc54f242635f99c313e0fa0cbc8e20da6ff06fb9efb4c6bd3b22f2ddc5c483ccd8aedc96dbfc563cb0b9bce181adccfa3d74fdffd96d36d4bb6dbe4ecb2393b20d65f6ebeb35d79519b612dbbc6d7e8efad50bad4b898bab9a6db7d56bdd5eb3be4a5d14e2636ecd63836507e0d53cfe7db2bcd4d59edd73d9e9ce91fa5fddf083a2bee991ff1cea4fa89badd56a457d06af85826e9e3ea767bf86ad5e72e9ca919f15cbb8562d8ff4f2dcd2d7f6afc8f373c4981f9994fd915e7af933e485f34839e3f1f0eb967be9e565e425f288f17e789f477af9a3e445f288f93e469f477af983e405f3c8a4ef8ff4f227ca0be791be3fd2cb1f272f9a4776fa3cd2cb9f277d1ee9a5977679a53cb2641ff65e7af9bf237d1ee9a5977679913ce2f579a4973f57fa3cd24b2fedd2f7477ae9a55d5e228f8823fe81dd68d2f17f1fe9a597d79797e98f546fffe56f037afd4aed5efe247991fe48ff9e4f2f7fb0fcfd3ffffed7ff02f4bd0fa9 mbrbox textChanged(const QString&) setBootableCheckbox execute() bootrecover selected(const QString&) wizardScript execute() installlog widgetOpened() ScriptObject7 execute() mbrbox widgetTextChanged(const QString&) setBootableCheckbox execute() bootableBox widgetOpened() scanbootloader execute() NextBox widgetOpened() wizardScript execute() devicesbox widgetOpened() scanDevices execute() devicesbox selectionChanged() setlabel execute() NextBox stateChanged(int) wizardScript execute() mbrbox widgetOpened() setBootableCheckbox execute() installlog widgetOpened() launchinstall execute() installlog widgetOpened() launchinstall adjustSize() devicesbox