From 48e0d6f155e6335afba44e20c66b39cd0476d907 Mon Sep 17 00:00:00 2001 From: Haojian Zhuang Date: Thu, 24 Dec 2015 21:38:50 +0800 Subject: [PATCH 1/6] ArmPkg: Bds: check path first for supporting fs BdsFileSystemSupport() checks Handle first before validating device path of file. There's the potential issue at here. BdsConnectAndUpdateDevicePath() will skip to locate handle if it's file or memory mapped. Then BdsFileSystemSupport() tries to use the invalid Handle when it's not file path in file system. Now check the device path first. If it's not file path in file system, return directly. Signed-off-by: Haojian Zhuang --- ArmPkg/Library/BdsLib/BdsFilePath.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ArmPkg/Library/BdsLib/BdsFilePath.c b/ArmPkg/Library/BdsLib/BdsFilePath.c index 924c61ed34f7..15bf4fb490af 100644 --- a/ArmPkg/Library/BdsLib/BdsFilePath.c +++ b/ArmPkg/Library/BdsLib/BdsFilePath.c @@ -460,9 +460,11 @@ BdsFileSystemSupport ( EFI_STATUS Status; EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FsProtocol; - Status = gBS->HandleProtocol (Handle, &gEfiSimpleFileSystemProtocolGuid, (VOID **)&FsProtocol); - - return (!EFI_ERROR (Status) && IS_DEVICE_PATH_NODE (RemainingDevicePath, MEDIA_DEVICE_PATH, MEDIA_FILEPATH_DP)); + if (IS_DEVICE_PATH_NODE (RemainingDevicePath, MEDIA_DEVICE_PATH, MEDIA_FILEPATH_DP)) { + Status = gBS->HandleProtocol (Handle, &gEfiSimpleFileSystemProtocolGuid, (VOID **)&FsProtocol); + return (!EFI_ERROR (Status)); + } + return FALSE; } EFI_STATUS From 417c9b8911e7d97be0216230a55d18934cf2c086 Mon Sep 17 00:00:00 2001 From: Haojian Zhuang Date: Thu, 24 Dec 2015 21:44:33 +0800 Subject: [PATCH 2/6] ArmPkg: Bds: tranverse handles for fv file BdsConnectAndUpdateDevicePath() won't set right handle if device path is file path or memory mapped. Now try to tranverse all handles for FvFile in Fv. Signed-off-by: Haojian Zhuang --- ArmPkg/Library/BdsLib/BdsFilePath.c | 135 +++++++++++++++------------- 1 file changed, 75 insertions(+), 60 deletions(-) diff --git a/ArmPkg/Library/BdsLib/BdsFilePath.c b/ArmPkg/Library/BdsLib/BdsFilePath.c index 15bf4fb490af..a868e1993403 100644 --- a/ArmPkg/Library/BdsLib/BdsFilePath.c +++ b/ArmPkg/Library/BdsLib/BdsFilePath.c @@ -630,81 +630,96 @@ BdsFirmwareVolumeLoadImage ( EFI_FV_FILE_ATTRIBUTES Attrib; UINT32 AuthenticationStatus; VOID* ImageBuffer; + UINTN NoHandles, HandleIndex; + EFI_HANDLE *Handles; + MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FwDevicePath; ASSERT (IS_DEVICE_PATH_NODE (RemainingDevicePath, MEDIA_DEVICE_PATH, MEDIA_PIWG_FW_FILE_DP)); - Status = gBS->HandleProtocol (Handle, &gEfiFirmwareVolume2ProtocolGuid, (VOID **)&FwVol); - if (EFI_ERROR (Status)) { + Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiFirmwareVolume2ProtocolGuid, NULL, &NoHandles, &Handles); + if (EFI_ERROR (Status) || (NoHandles == 0)) { + DEBUG ((EFI_D_ERROR, "FAIL to find Firmware Volume\n")); return Status; } + // Search in all Firmware Volume for the EFI Application + for (HandleIndex = 0; HandleIndex < NoHandles; HandleIndex++) { + Status = gBS->HandleProtocol (Handles[HandleIndex], &gEfiFirmwareVolume2ProtocolGuid, (VOID **)&FwVol); + if (EFI_ERROR (Status)) + continue; + + FwDevicePath = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)RemainingDevicePath; + FvNameGuid = &(FwDevicePath->FvFileName); + if (FvNameGuid == NULL) { + Status = EFI_INVALID_PARAMETER; + continue; + } - FvNameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((CONST MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)RemainingDevicePath); - if (FvNameGuid == NULL) { - Status = EFI_INVALID_PARAMETER; - } - - SectionType = EFI_SECTION_PE32; - AuthenticationStatus = 0; - //Note: ReadSection at the opposite of ReadFile does not allow to pass ImageBuffer == NULL to get the size of the file. - ImageBuffer = NULL; - Status = FwVol->ReadSection ( - FwVol, - FvNameGuid, - SectionType, - 0, - &ImageBuffer, - ImageSize, - &AuthenticationStatus - ); - if (!EFI_ERROR (Status)) { + SectionType = EFI_SECTION_PE32; + AuthenticationStatus = 0; + //Note: ReadSection at the opposite of ReadFile does not allow to pass ImageBuffer == NULL to get the size of the file. + ImageBuffer = NULL; + Status = FwVol->ReadSection ( + FwVol, + FvNameGuid, + SectionType, + 0, + &ImageBuffer, + ImageSize, + &AuthenticationStatus + ); + if (!EFI_ERROR (Status)) { #if 0 - // In case the buffer has some address requirements, we must copy the buffer to a buffer following the requirements - if (Type != AllocateAnyPages) { - Status = gBS->AllocatePages (Type, EfiBootServicesCode, EFI_SIZE_TO_PAGES(*ImageSize),Image); - if (!EFI_ERROR (Status)) { - CopyMem ((VOID*)(UINTN)(*Image), ImageBuffer, *ImageSize); - FreePool (ImageBuffer); + // In case the buffer has some address requirements, we must copy the buffer to a buffer following the requirements + if (Type != AllocateAnyPages) { + Status = gBS->AllocatePages (Type, EfiBootServicesCode, EFI_SIZE_TO_PAGES(*ImageSize),Image); + if (!EFI_ERROR (Status)) { + CopyMem ((VOID*)(UINTN)(*Image), ImageBuffer, *ImageSize); + FreePool (ImageBuffer); + } } - } #else - // We must copy the buffer into a page allocations. Otherwise, the caller could call gBS->FreePages() on the pool allocation - Status = gBS->AllocatePages (Type, EfiBootServicesCode, EFI_SIZE_TO_PAGES(*ImageSize), Image); - // Try to allocate in any pages if failed to allocate memory at the defined location - if ((Status == EFI_OUT_OF_RESOURCES) && (Type != AllocateAnyPages)) { - Status = gBS->AllocatePages (AllocateAnyPages, EfiBootServicesCode, EFI_SIZE_TO_PAGES(*ImageSize), Image); - } - if (!EFI_ERROR (Status)) { - CopyMem ((VOID*)(UINTN)(*Image), ImageBuffer, *ImageSize); - FreePool (ImageBuffer); - } -#endif - } else { - // Try a raw file, since a PE32 SECTION does not exist - Status = FwVol->ReadFile ( - FwVol, - FvNameGuid, - NULL, - ImageSize, - &FvType, - &Attrib, - &AuthenticationStatus - ); - if (!EFI_ERROR (Status)) { + // We must copy the buffer into a page allocations. Otherwise, the caller could call gBS->FreePages() on the pool allocation Status = gBS->AllocatePages (Type, EfiBootServicesCode, EFI_SIZE_TO_PAGES(*ImageSize), Image); // Try to allocate in any pages if failed to allocate memory at the defined location if ((Status == EFI_OUT_OF_RESOURCES) && (Type != AllocateAnyPages)) { Status = gBS->AllocatePages (AllocateAnyPages, EfiBootServicesCode, EFI_SIZE_TO_PAGES(*ImageSize), Image); } if (!EFI_ERROR (Status)) { - Status = FwVol->ReadFile ( - FwVol, - FvNameGuid, - (VOID*)(UINTN)(*Image), - ImageSize, - &FvType, - &Attrib, - &AuthenticationStatus - ); + CopyMem ((VOID*)(UINTN)(*Image), ImageBuffer, *ImageSize); + FreePool (ImageBuffer); + return Status; + } +#endif + } else { + // Try a raw file, since a PE32 SECTION does not exist + Status = FwVol->ReadFile ( + FwVol, + FvNameGuid, + NULL, + ImageSize, + &FvType, + &Attrib, + &AuthenticationStatus + ); + if (!EFI_ERROR (Status)) { + Status = gBS->AllocatePages (Type, EfiBootServicesCode, EFI_SIZE_TO_PAGES(*ImageSize), Image); + // Try to allocate in any pages if failed to allocate memory at the defined location + if ((Status == EFI_OUT_OF_RESOURCES) && (Type != AllocateAnyPages)) { + Status = gBS->AllocatePages (AllocateAnyPages, EfiBootServicesCode, EFI_SIZE_TO_PAGES(*ImageSize), Image); + } + if (!EFI_ERROR (Status)) { + Status = FwVol->ReadFile ( + FwVol, + FvNameGuid, + (VOID*)(UINTN)(*Image), + ImageSize, + &FvType, + &Attrib, + &AuthenticationStatus + ); + if (!EFI_ERROR (Status)) + return Status; + } } } } From e2d7834210b5f56e044de1aa924311a3a7d727f8 Mon Sep 17 00:00:00 2001 From: Haojian Zhuang Date: Wed, 9 Dec 2015 16:54:38 +0800 Subject: [PATCH 3/6] EmbeddedPkg: add dsc file in AndroidFastbootApp Add AndroidFastbootApp.dsc file. Then it's possible to build AndroidFastbootApp.efi as module. It could be embedded in firmware volume by this way. Signed-off-by: Haojian Zhuang --- .../AndroidFastboot/AndroidFastbootApp.dsc | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 EmbeddedPkg/Application/AndroidFastboot/AndroidFastbootApp.dsc diff --git a/EmbeddedPkg/Application/AndroidFastboot/AndroidFastbootApp.dsc b/EmbeddedPkg/Application/AndroidFastboot/AndroidFastbootApp.dsc new file mode 100644 index 000000000000..9a61376c53e0 --- /dev/null +++ b/EmbeddedPkg/Application/AndroidFastboot/AndroidFastbootApp.dsc @@ -0,0 +1,78 @@ +# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +## + +[Defines] + PLATFORM_NAME = AndroidFastbootApp + PLATFORM_GUID = 5C4690F0-4B99-46B8-9464-D5F6D9FF9DDD + PLATFORM_VERSION = 1.0 + DSC_SPECIFICATION = 0x00010006 + OUTPUT_DIRECTORY = Build/AndroidFastboot + SUPPORTED_ARCHITECTURES = ARM|AARCH64 + BUILD_TARGETS = DEBUG|RELEASE + SKUID_IDENTIFIER = DEFAULT + +[LibraryClasses.common] + UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf + UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf + DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLibOptionalDevicePathProtocol.inf + DebugLib|MdePkg/Library/UefiDebugLibConOut/UefiDebugLibConOut.inf + DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf + UefiLib|MdePkg/Library/UefiLib/UefiLib.inf + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf + BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf + FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf + SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf + UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf + UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf + HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf + NetLib|MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf + + PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf + + ArmGicLib|ArmPkg/Drivers/ArmGic/ArmGicLib.inf + DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf + FdtLib|EmbeddedPkg/Library/FdtLib/FdtLib.inf + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf + PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf + SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf + TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTemplate.inf + +[LibraryClasses.ARM] + # + # It is not possible to prevent the ARM compiler for generic intrinsic functions. + # This library provides the instrinsic functions generate by a given compiler. + # [LibraryClasses.ARM] and NULL mean link this library into all ARM images. + # + NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf + + # Add support for GCC stack protector + NULL|MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf + + ArmLib|ArmPkg/Library/ArmLib/ArmV7/ArmV7Lib.inf + ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf + BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf + +[LibraryClasses.AARCH64] + NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf + + ArmLib|ArmPkg/Library/ArmLib/AArch64/AArch64Lib.inf + ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf + BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf + +[PcdsFixedAtBuild] + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0xFF + gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|16000 + +[Components] + EmbeddedPkg/Application/AndroidFastboot/AndroidFastbootApp.inf From 79886862a672ed52a10397cc64bd962ece60d2b4 Mon Sep 17 00:00:00 2001 From: Haojian Zhuang Date: Wed, 9 Dec 2015 16:58:12 +0800 Subject: [PATCH 4/6] AndroidFastbootBinPkg: create prebuilt image Prebuild AndroidFastbootApp with AArch64 and Arm version. Signed-off-by: Haojian Zhuang --- .../AArch64/AndroidFastbootApp.efi | Bin 0 -> 63680 bytes AndroidFastbootBinPkg/AndroidFastboot.inf | 28 ++++++++++++++++++ .../Arm/AndroidFastbootApp.efi | Bin 0 -> 47424 bytes 3 files changed, 28 insertions(+) create mode 100644 AndroidFastbootBinPkg/AArch64/AndroidFastbootApp.efi create mode 100644 AndroidFastbootBinPkg/AndroidFastboot.inf create mode 100644 AndroidFastbootBinPkg/Arm/AndroidFastbootApp.efi diff --git a/AndroidFastbootBinPkg/AArch64/AndroidFastbootApp.efi b/AndroidFastbootBinPkg/AArch64/AndroidFastbootApp.efi new file mode 100644 index 0000000000000000000000000000000000000000..e681ffc5a136d42e48aaef4d26f74bf139b7f10e GIT binary patch literal 63680 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 Qe-OU$=d1@G+bsI|UoUK4B>(^b literal 0 HcmV?d00001 diff --git a/AndroidFastbootBinPkg/AndroidFastboot.inf b/AndroidFastbootBinPkg/AndroidFastboot.inf new file mode 100644 index 000000000000..1952cc432b87 --- /dev/null +++ b/AndroidFastbootBinPkg/AndroidFastboot.inf @@ -0,0 +1,28 @@ +## @file +# This is the UEFI Shell application binary file. +# +# Copyright (c) 2011, Intel Corporation. All rights reserved.
+# +# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# +## +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = AndroidFastbootApp + FILE_GUID = 9588502a-5370-11e3-8631-d7c5951364c8 + MODULE_TYPE = UEFI_APPLICATION + VERSION_STRING = 1.0 + +[Binaries.ARM] + PE32|Arm/AndroidFastbootApp.efi|* + +[Binaries.AArch64] + PE32|AArch64/AndroidFastbootApp.efi|* diff --git a/AndroidFastbootBinPkg/Arm/AndroidFastbootApp.efi b/AndroidFastbootBinPkg/Arm/AndroidFastbootApp.efi new file mode 100644 index 0000000000000000000000000000000000000000..3067969398a75d1eac5670d103d051a85bdaf29c GIT binary patch literal 47424 zcmb@v30PD|);C_a`}P7f(0~g9;%yqW6_-}j5OuU^;L?DJXg0IV3~H8+NhWAaVzvor z_QVN_i6A=ZXlBMG3vJ^2N)iGYlbOuS>wJwSGYFGOgGq47a!E|?gN3WD&+*?SAQogPToT9FsFxZ0 zOc%@g4W2H9%Ufgb0v;58_~&Yim80~;A7;kit^X$d$C6#Iq8u=bw z9_Xlz)UJ`|g*6DMcEu$L9_SG?3M`)(!g?}jLo^kyR ztM0rh)|Qbr(euJTDtF=g|5rS<%6cfB*+1>_s zi&xiW6A~*7LFQO0@$9t@b45Z$LS_3Yt1Gko9|svrVXW>mJYTzuF%#nNuHbgb-@WnN<7+V@AlAu_Du3;%zE7 zR2em?$@W^k*|%nvpMz}7K|eFdc@XjGr==2?ba(`Y!cscN*asUq9k z;&lY`#QMFQbYtX&19hI9()xYOZp`DArxtS3eo)OEGrR7qFyw9BTmKR-4S!*pYZDjd zC4Y5^z)Sp>cY3CXro7rEoU|?KY_oe!!aB(Ky2_^VbA4;89Ae|XY;QJ30dv^B`kof= zT;aBgF9){n-Rb2dePrvtn<{GxkyO*YiQ zOMm^s>9zWG(hb9NYU*G5NO`e7VeYae4)G&p+ZImxBB~ePQyBBKoxtx^6~r04cb0G^ z==qO{BCb%_TZX75^x&i6QQRZ+-+v@6HUbMtG zZ;@7ep~&r>cnOo9jtJgZ{nM(lym@T}-ciCl)Vz9NVwF>z3rq>6jIX3L!RypoR@TQHSv>{b@xt_qG4Y%NEr*l(hM9v&bL(T{_>A^8Lwh6HekCY) z?OMqK)N*H#bp#+Iq-WUOjEzAc{W2cUi3p@;NEb~<{3(R@5qChgo<&%VcO8`VGk8i! z??yO)_(6o@2qcG2X%e1K;F+=k^BkV*<9u5iVU8JH^)IfiG|r(O zvx8?$`ZoNFDsEp)+Hb28pz(Uai(9JrT$137o;4NYgf);kPFk(C_CM=lZNF7}Yt`OX zSIi3X!m5haPgkKX9(}X`brp22sQP(D&5{`ItE%$6gfYEsjBs5=%coaW@WSQ5drg(i zo9Sgzc$m+v`|7bePMWD<-W0E=2ygcXmQ_%#G>WC6JA+G63(2%O($H31#S8Ar5=};$ z$`@2s#7C~D%7eLpMr~91bwLpjBvW68nPX~KDc-DkvoW#;!VXAhk>IMBrS-Jk%L~qm z8CrZ{6%#m72ae?2suz9WK>rYP%nQWY{~6*=EnZl`NxvDI8k`NR38h|00z-FlRiTilwI%V>`n{_B zczDl_1(<)hfI<33NrskbKP7Eq9aGS^$I!PV2P8uzV>6LPGF5>m$=Lxs*_|=Dx*l4HOLk4U9q>v zRdbM&{zGy2M`Nydd+jL9GY>0V6DM`6{}@QG+UXt>;H2LwF25CVLm&yI-d&r5QtOoD zs+2hG$yLecWl!JgY-b%r6VY-#`1uC}BgQM)9o>i%-Jf32A2g@1{M}WLx7x(#FU_fW z-c#tED?VR&TzS#iRBp;m#T>UwAw4uTu7`fBz1g+5rizMSq1Oh@{leB~Jp@xJz9){r z)oUeF;&4xBZzk>Ssfy`AXm4jWcoeJS7A;qakHhua+o1Ngv0|)NN4=;1JXPtSYPnYC zqd3I1+FN(sJ=)lvkFlGs1T?t2Jcj+T));dMZk|^1-8kH0?d>h??N(@2=qU9+f(2ed zTzal<_HpGYE3>n0+_uNim&t%0tBlwvdFVG9oi&*6nbfNmcp-7MX4_9Iue(KmfHg9^ zuNqAutZSx^uYT1nf`7$aS=p4I}08}Ef2Bfc2V zyAfXS$7J{r;_oAU0ME?(7+Z_Q5ZPBG^JHI(6j@zG<@}IQ90; zip`mc-#q7o_$_j(_`TT4<9EK3*$gd5PbYGnnbgMOLB<_DZQ-tc^%4)8$VqobjXO=^ zJ71gZ{JN5Lc$REhXHPk@j@k8hl-#lDjw5#v)W?}rqHK^EO4e&-*4tC~^+(pfi`0@k z@msR#&Vm%fok#9u!3iSE)4!M@vTbuc^D1=Gr^9or46rp)x|sC)s7I4eCLN6mT5M(o zlOB!E^ppjebYIlxXVcTspD#yaQVAUyjY-qwim8ydb5`kZWz4TzH-qkjG!;?&Q{C^HFx=8aUbK`gH@ z=ka1L>ULtzbV>DftM0YmTXIHc-%Yeh$hIkyt4q!> zVVg3^={lo#Ri81`=mI6VdN&`KM*y41mmcQZ2wBP(8p%&(-$Q z1vU2jSKW_z-k$s2XY}rq^t;N~l2x$L_~^OH zes6Vd$r;YJ=icHo`r?!HyYk7*>5)OKj`A1iPn)0U;@ox2G4iD>%gn~ z5KbWIz)Rw*jMZm~I7);xNw-Iw{xc^2gJe&+Et$qY`tAm#okW`1Vzw@R3MCO^Q~9SAK5me)*&_ydnqZTR^9A7qcZ?%GFxM zapF{wgMR3YB#B(JPF#B(uW%EVpV4ztmms2L?d+GZYhJS+dbri};^hjzK);P`WBJ@R zCK(k2G@RANY3+x+F3lC6uR73b0T<>zm+c+fVA($Bxhai}eCl@o12)Cn!Gy65$w4*+ zJ^2vyf4Im$_PLpD&psL!7{b!VT%$M?aU*Kr*|)HTJpjjpJLg{pJ2q%}=`x$M^EC!4EcNG@+$$ zCKnja8LnW`wHqfE=mUubF6q9FYx*&3BrcUW%TZ;8FMY@8rZJ_2w{QdD)4Qe@ED0oc zPc2vxFm$s5NK~CrP!UKA78H~OrWKS2EWwKljNP*eZap@mU{1hUaD6}@TvD(oaBIQB z!1V>=8=3T2T}Jn1fGn&xb|>P=Z%oGTXZ0!lEAgCKzZ$=#^(zW~5ison;*fK}Y%!rAr907<-o%9x=cl*imS&VT4sq6u>oD@| zqnndlpADq%m}dCxS)Gv$Ub~6vy?h|OX{R{8abDK;KEhNc)g`gu0Wn*$>MYG;yQZM- z952=U$yfoD@m{L=ld)Oxb)yw>JMTA)eS_zi2VvKvys6MGne_TWGdq5om8CZDK}&NN zVrH}`TjEnkbu5(xGiWwvOS;rdycHl;mpZEJFJE`+tXs4E1(J|NJJ=eRd zBwf-CXUhzU_NCHvb4qZ2o0i8+J#3;Om}ti?n$2prZsCIX-I_dje*$aF6Fp)9=I1$` zs(exO@-qhApU$$x5An`-y*bEI&8V3rR*QNYmFX(gOAVh>u0>4nzdfkutu3qlucKT- zAaPK2#!Bg>UutDGmL5h9WOR^Av?2cm!Yv5<6ZUu*^ha31pOJf`1?fOW$ym2DRjXuY&cS&jW z)@^%4pZJ1k>$5aD+ESa79^+@FZpm!~a(=i+fubY zOKs4j7c81ov1v^DN1dQ?2DV_dUKGYN>8)s;=)?2%C@h+WNj6;r%R8#@brbg5@6|W1 zzL#&@bFZQCJLtSJFD5PUpRt*6&wDSUyQZj4RZ;b;0zO z(M`GE(;cTH zcZ+vreWcvKW&V$pCESxW-1*YhI4hRSpoF;9f=)Wo-R+dXKo#Ru5NjDBi~geZWRsZ z*vhnEX3Mqi%tmYQp0>=UEKy&&b%8{B7DUUriX77odNf0=arivibHobCNG?u>ye z>UdxDf5RR;s$AchwI!`FD76SWY8G_TDui>e1@Fi6&(Krd2&WM~MCd`tXdc%R!xqCu^(J*) zg?a@ITTGJpFiDR|BpSyAGFsAhWRzw!QrYCLoBV7m)yw6@X#65%!uo_tab*_Khw zX{B7AD&H1@{im$(uQ4WkFcx$BCqs_5QLsSPt{n}C848oGMD8udg!d`;{$WR3GVuLr zRtj<_C}Ufcth8pm^xhd3G>eH$qqmV?5TBqp)7kRb_5q5=Z;*9rT{^niI9?9x#Xx?^I<8>)`yhRL=ri zDr)Lb_0lt{!<`y<!?J1JL7dyeVt#s&es=v zuRH&)2c}H-s1CBP2zDB1qBET_I1k$5SLNTSF8`|BvnAl#38QD8%?P^gQ0WY0wn!%n zuyPN>>g;$G^%*u1Y|O6Ky^8%jz^=(Xslg_DieS&H@)fEoKcJ<5t)-hh7u(E8uTWoe z8v}wk3l?q+ulcZmv!>a=`7lB|LcP28P~wTiQoXnZyHRNhSH%_T6>fIWp6Xeo(RL?tcg1s`R}12~X3t_<5@2tP>V9Gu z=PJ6H>3+MSD;OHcf_+c~`5>Ak1k1xXQ$n~N!F))SA5=M~i<#SfgDdsp3U+n~MRf;j z%gu*;gHHX9g9%f)?o83#uF7Ak7ZsV?I}cKNLIKy!L0Sb#V8ulShjK!bT^8fzrD)G| zO$!_?CW*_5TEMx2tL^~bt_0r}MT@{U!*K)j#0SMB&q?Pw7o(GS=K$Y|AI1Jnd~M36 zE)J-&pyAF1_mh4O$+)JxAs z9Pz#-KHdY`wth@!a1<3$#{_2CS`^fGrwZL$K^zhVTD@t4&p)@1fa%P~g7ULhK1aRy(ph1sPbBaj=cp^03N91Jf8Z{13Ssll`0Xa#?$y!EInH}MNViQLzTxz0N za!~MZ9m2WYtS0w20g7d2jmYOasN*AqBM0{kuGEd2y0c@?pujp0x_(q5Khq?V^c{_> zjCjopQ1ckn{NS=NsQI5^RW`<{oq-%Hc-p#>c+wRfHN+*Lk5r@h45(1$cT}V-z6-S_ zwK<`W9&v}dw!u!5hn{ zcXok-cacM*`E%r?Bj?R!8OUh}k4WJmtn5h&iDMnhQjoVX%zfpbAZfvsDW*MuAVV}>|OVxF_;?XjIDe=1?pw&8tl zbB7PoNh8LzmU?#@uuc&Z^O$t=Fv>4!8yy1P*^4UExUUQswc0Mqe#-78n8(0KI>$0O(Vp zSla9^Zq6i;O=S6?CJ9m=abhmihkaUW>JHK_0{tH%$|+Yj z%!|YWlCZa;`I%+dl|4SvE}YlJ#tXIWDui#*z6_23{}m!FpWvB_{W4W<3E4MnR*cTo z_%%6qA+}2~G1_mW{VCWBPsG;VG)JiN%Nnf7^J{HZc>uJi^82bm^yR2>KrK7NTr^(3 z53@~!F?&vEbNOlwrW-KAc!Cx3n2kw0ha4qE?IUotm_fN3U!Tyqs(*|dPwVo2=aPr| zth0T6)?(i>R_*K4GhZKX_4U=V_EWj)OgyKbrgVati*f>6-k-K`Q{ODW&vN>f5x)Od zm}P)j_HSS$*Ywkt+RgnJ(&q}U>i;2)LZ`c*=y9fi7GYig7)xE>yj)-3Je_YDZ>)WZT5B@sc7TlR(3)Wp&=Kn7rINV9>?Dt@hRu)e?PrC(m)?C)le5kM0*Qay&IJ8I4 z!wn4aKEzKFJr@Cvu}3~hWWK&6^c^qw`V3BA-xNx>fEO3?12}VPc74JKo?Us8121(x z^dazbz?%;kJ$vL74_pS|N(8PX;2QHk!1YDqkK<}b`VZ+MI+AcS%xX|C>NX>8bou(; z`8ntmd?!06fX)m0qqn#BOOj6-KXnJOH2E!am^TxSdzEw0zeritkuvKX=M7;^d- z&mfC>vSu;95opKsG|TU#%Z2H&EmU%$a={%r0>bC3Xt1-|iDbiDVF;PrtV?sjE zP=Q~sWz9J87MwLQ$GKkCq-iFUql&O1l-sB-;K>|_b^5umU~=Ssjyp(>XR@t!7VxAs#-E>*U)5v`Lz(_;uk zAD!>e*^aTwbcovz9}!??jyF3r%e_fEMF>&37;T?*Siw8cs0w}?EPks?FLfTaw#RY@ zJE-4{uv3v3u=ikXC;y2s%C6bW z*jRXdSPzZ$;2a@-N=|enwobrOwV;Yn-QBtO=%@M-(|Vb(!qVrkcEX#?L&Ythn9 z$J4CZoHqwF<--=e&8A1|^op>7>U8{yv5WT;AE+&K-cDsUp-faBRBL{uj8!Ycdv=0L zQTZd4=FEBFAL5G2Vf1T0xcQn^?k_6MvHw(sQfvE#bw(jmRLCt`cnhSGxZC1q*dbbgxQ=jQ#|opOvyZ&rEn zASm&;l5PHdQ{XGKUhFrq%hZDzp){ z8-eXx*gUFyiR#K0N{iZK{lT9fZ>oInTi^xOY8DZ6wq<(Ql*|q@PW8vNp+1apc z@TnU7yU`TS_0T_2tpBNgYh{||J41es3_DM$@i(nkFqW>zo@Y*c++Fv;VsG*Q!s^FzO639KKkc3n z>~mTjq=){ja*$SbnWBO@%sR83xCo$FQ&lIqF2zQ@0+c~lGw9ejrI?>*FnzuW| zkAq&6`E7KXH!8PBs$X65##+xV+gjB9RKy;P%CAN;--ybs@MN6Z_5Nwyf%i}I9Pr#^ zJ)5X2KAWU}4(qOG-Gr~CD?M|PSXC^D?*Ow-`e$^O$cu#i$>@vj6J4$#;5gv8sSPl# z?&HUS%f5BoeZ|dqZ*c$R*mBQq+hwSEY2@7js)MjnKEb39snqHR2n^C&5SEfrDog z6IY*2N^%lc5BzR`dh(wk>Ph|wJxLz(e~U0dukBpF2e~*0dmwcyW7`p~ZPfNAOW4GZ zl&9(*ZJj0>UltYXPu~{Fx5w}b*%kWz#}!8>e}HWdmXF1)f-zmXmLp#$8M2bN*=)L{ zW3+fh4(%5dhX{rTg!6ka%+cLTIzORO-+WxDb6Uxl%37u=C>`_Iffg;>&AX||1$HFS|koaAzd2ixA+L_4q zLRXk4HtMA7q92}4JYW<*MBk)}M={FG2V5d+Ogz9f8ul6Yn-1uuZJ|2&yUz)Hq#SOz zTH#ZfwNmeSpdn|5f?Zp#_+!$eT zHi+YEriv8`|Irn!T_&y&pS{I| z6JS=?3a|5GP`GC}r6sc_J4mvZ)unGzs95ahm$?2 z!CU?M7JH3DOoZ<_Vfv*8=M;58qldwVk33wYr^zm*J|x-GAtWG>o-~SE&}){m50#=i z>{~`#2U!x$2{>bdf9YP$2Qw<)rM*3`y}svw*bIZp>LyS<11$!BTh``-Xo#Yfed#CZxP~7At^KH}I?t@#10)L$L8vV{o@oTuBF0NJwVR_L(TJR9ljhiSashuQGM;h66n`G(bFkqdTHXY(+_&fio`1_=7ZwD4_#hm z-R}`O8~KVXhmQC-({zCL%T}G{%Q)!+g?d}xvjh}<6M8bZ=vC`0<^wmK)|EK{L;kw& zC}Pzn_%0f|oUjk)i{=BI^t!T1q?1v7j|*@oLMwwGqV`4b?%&}yx9B@ubJ)Z^gRaCK zkU*mHAWqm_2~2>$)+;xkHgXF@Xa-v)us;*8-w8a2LNkIG557E%Ql31-w;P%`=~r5b z^q#9l2g>XTIjW!;xNPrrYZ6F1>#~#BR7*#ecukJ4JOy+lLWfx3-^uI=Ev6m1#-$R@ zzHmDDM09-c7ye8@r)bdTe}PUzo<++u{Y%~oF-;po)ECrO)JN6NFh*nOSv;w~=A$1U zLm<7Y-@wD4+_j-3mn?nka=`9OtjaiK#=dky1+AW2ZX;c7>a}YnYc|Bz1S}ZeeFTne ze!{~Q=(>tG=%<(i)(xD43lOHuHs}k6yK2ib#oF==4ZeEACT&d-t0^WUP2$ugkG2}b z$3-)I4sbtc|Ky52qV>6!+tPkbbr<*Qo0xry$mNm86KmuT1j{Et_l)nddtLC_$yvky zfDa3_eTa#@3%pZAeG`|*dkKnWDShwX{CrDc&Dfw77)EvVVjg6+l=D8`%#qk@XgWeO z;&z9~JzF6z7fYb24yf9E_%!kCHMEy>(tV&sA;j7|R=je_`9O(c`KeLN^FAr+gyj{x#be6eI^%w}b*k72dON?` zR%gIzBa<5HU}J7DwCr-%Nsrg{fNsLj)6$(7c9qumU4yS0^xm-yQbd7((UV<}Nc+a|f$PcfitT2#w&r0Ct z@*3UKyI#HLt9bh4z;3NhO1E_t-m4bm2J-IR;m+>51M$qjD#S;3y^45xU^n8aUB(uw zY~^%MR17%akN%Mom;cf>nb9ZGS+eyKUeLJl~=J zv9^5^t=~7mkF*|b=YP=l$KfM7Mr;z(cYUZVX^6U|Y{ z{^a$>1^$HkoM_+r=mKqo=dSsorYpd_m80qVbj@l>4UEAJC_VNOzbm`Z9n-f|HZ~6! zK#ghNRBs7xB5nc=G|m^`u7zs)Lw1^QI$AHGgX^gz#%t{T6lFo}E-Egd^V zJ^Zc~KtJs*&(ys3le&m|=76Ttz>DSL_%#cVYY^G=F}>t{-gj@2mquyKmwmQ~(Z4c+ z{S31E3;{@14OwDXl|SvE{T_@Z;=w)O0kxZKF&bMmo}O$?g-kVzqjrtn89_gNCs9VU zw;B?ayLKts`;+KLN@;zOcu9qEKdnY$vq|SyPt`dw*9u8GNl-STC)lKf1LkL!iGTE3 z^ERK#WQAhFvqu$k>*4ZNx3iZZi31bX*uAm2^x*lvJzRcKl?n5Hy4L#C0F}jh=iihy ziEQSQUWYfKInNuBAB!eH9*ZL-LCD2{~p?KL$dY`MKLg7rU1oE~HPmJJs4fDb*eX{8T6a6i1^lNv3J$&D$E2kt-8 zwsWad+*z4);9}gYs8ew(skgbxnwQknjN5A%@2&-2ZmVTKdlt8ba=D&up0UBF0nu2Q ztU=tQL2L#@a?{fnK%~SWOg&F}U_&NyQl5H+c$N5k-z)dCneMK9+j!ih9TmAK&w_g} z3k6-?X5}XW?iJcn4{TNz3#0buZ`rIYvX0+3s&V30x|7T2ntJZRy){0t!SgySu;J+4 z@Ofo6(mi}G-?JWh`oJBYKMrt{VU0|-G+ne$ujO@qwX*)A7QVn7xHV48KcZKNYnEKw z$0m>2n`Psq0M5tx{LRV=r_uhB@(XA3;MMHF{mFwrHNT|Px^D4L8J8zUx#ZhQSOjF<88h-fxL4*%!;X5jj;_+Deo+b9`PF)@s*AQkur>i?xHSR!-Ux z9o;u!u0u3F6OliTaL%aQ5yHsC$|a?K3PwOg)~h9z%tou5Nsz_TB(g;(ZFPcE3vEmH zPu|KA&(d7j2{3nVK4oE3VSk!ilkjV4&~#|xyk3lbYx3ZdB+Obu@}MW7Td{PyP=YmF z3n_)pPRysZe;w(F1AdGZX2_dZ5s}+eXIr#(Ph7^D*BL9>}#K(p_s1GIiV zA_A60<-MVdmO{S{o~V>Y`eD$%1A3(zPqL@>;+c-;Kk>XButybZ-BD#!Yo-vDCxT$R)` z8RHLi(7aV!C>}0%(jJl3UYXRwNga{omR^5Ki?FoOKN{X6*sC6al6v%WpP+rUW)p|zTRD%ycgLU;h@ zqR~5I_HYpINL6XB80l;3cj|xYYwB|sWPuY-Ei0H4VDF5!MELH6Bc599hI-c3Y|GV?;`8wjAq>o zbR}Mj{RUt!jIU(Oy@g(kLZr}KM77b*gLd}@^^wg;bkcr9ow#BtyeQ!d^18PBcC&be zCy(}Wye+?=bxC%w-Fv{T@2Wn(qm|yPSxUBvUbX}KUY$v>*~%}a8N`4y(Wq>}-o%N( z>LA69p{6#r%MI$H@JVHk>Mo+Isod4}s`eDxDCdvE2J!O&^lLSn3~%(-*TqGe9XK#7 zyz!u)+kc0*8v9>O<+Caq+!MO6*Ab1SaQmCe$7*Aka5~$16|<9Kj!QHBEI9Gf{USG+ z@NWnHzYVaNC%SANc#JzzdO3{jX?||6O{|1Pd!NdJIUa5YYy)8;)_gQ}Yyq|d7Md_V zND_Xtn5uCF{MESfIrz(LLW~2|Nsuh&IN8H?q;24)eAKmkgMKRAOzIhk?I}6tB4UII7D&(vQ9$TGSQG8f+24zn+0 zwwps-p%of`9BzzY&GqH%n>UJg+`Kzv=JG^yNS{Wjk9@hYY~hK?9^H$a^a^}sY|x)G zL!A95d6$*xkL4>F0#`URkh`BByqxLIR_Yh!W!mgY?X=CO>U3F^B=%jW~pY2cb==O2a?I9-Q z(ujPNb@W4DHeh`1K)4I>7x8=(;bnwl2-8oi<#flfSu}_qKkr@W*X`5q$GIAIHM4qC zmvF&U&zRuliuu+T2F;0&_#IyJ99^@12d#F#4)iFzYk}zS>Y6v7VtV}!AFLJL!^i7x ziuaiw{g!b^_hPBSC)4`uT~!;)n$7rpE3FLb#C25#&rO3yDe``(>}@b?od6x$f%Q$M z|2DMR7)lB*@UDP$c9Cjm(TU@{kHL5OCgcna-{f(eys3(P{@l{l z_Vj;#!laRvg%vvyG^dUOp0BXh zX40{Z5qV%vgkR;90HBmoOQ9iLE3wwvEAZ}owccW z(z&DOdH8}O978yP5Rso%_F{griH}!e2VUBZIo^v_Y>N9EMC4z^{S7v1JS=|ra8<`~*wGLUnDbU+ zuMJ)(TW#VRU`UH&C_ay2NgTuV8U_RUN5@&uCTKG^eGwpr!@}XKOIsb{wZQRZ7-wo| z$At4Zrp9s5o&B(U5G_lFvK~bgDWelSOfLZ zAHpJ1Z_`r6%942M8{w?I*ssMM4{sgpLhy5EB(tGgu_CrTVz!TKV2#9?`IVXA?h6`K zVfggLPEo_~afqFw7HU*A!D}GkBdacXur49x#R}!}&BY?kX&%v{ojN5SpnZTTSnZ7M zN@~eU!fH%kol{bVG3AWN<|v(;Fv(pXgDL(V6mwW{MudAX2}W(^NGwP_0efRkQ)yCD zax;_ucKRXrSI4RLj}%V>&XW@-1`~$$U%9?oc}Iqe6`Tq<`-UJhy4|oD5egARggX&l zxEtrQcs_}+9iat*_UPz5ndA`nXUw#dlXYuDS)KHLU1G?5?&@22d2FRjnuWcwFL08w z@l@y6ro7IB=B?QO1<#*FfBba_rq2bh}m_G590isCBX~o z)|}G!6|1jDDRr6W^e8T8OWFO$MxC~>L|e{YTD#v>nc5hZUmMc3IK*NxXFtwqx;RM; zgU*CeJz@D%Xmf^p>om^8@|SqKH?T(gszuKJu>8B|9YHQnxAhMLH=+e1T2O(p;}BO@ zuByVfn?k8rhujwy4)A#;N@+6kAkRMqm5+w_ASaa*Hxit^4zWVKS{tu_9`d|;6|_Ox zkmHRjD>F7^;7pcbCVMd&8xx7zxT+AVf#Ze{=9Y!#9XJE&!rkVD35X>Isz8VCJRP1& zd|yeb4kZn8Nsc+c90<#gL`$m-JN^!=w3nU{U;mG+y?y0Y?7i27t+05VOT~Ib@5+<`+}gu)~U-#OYNNH2Zc2ZuK`u!g5)(!N2re z9Sh6VQ7_g=W+%OME16cZw)JPZS!|1~A}n*!ZY2k4nXDW0T7tg#jCC2)Z^oBesK4JH z<}el(pZnFzV?9i2Q6K-*rdiJLJ%LRtK|V=dzd_*l#QYwtc#cJwgD@h;MTm@%^7XoSI^tYB z?t2^QTs$3dPKzH5QeE{dmd;tLgJ8-m9orowzfPSkt)E#}x?RrML40*8k7yqsr-f+Z zGJJj1hQ;=cCzCFGpS1C$>B9FZ8&58tw$YCAHrBbeA2_Dk5dYt5!&z0G`tRCtWN~XB zXm_I>dDJEft*+^(k1X}|naP(JzPN9{f_UJP{zUlS^6-I8WI`~}Y76p0UXXX%@mwA> zIFAHbr|)DUs}3ev-$s1%CnY$#9s={W7-vBL%f+DdIq1RO(KF7%V8 z`l%ku*TwOUl)2DvdKAi8*ydAC_&V!_t$oZF^PxTrA7|FNtRHI@41>!~!p|7bD^Kdl zr`qc4YvoX<)ra>-PBH5)(BSJ!hs;wMq-P*K^LO-)JdEy>^8n8a6kmQ4<4MEC$8jYA zcIO57c)(EFosz%q_#^T%iCOB93FVy?`J_bzs%-j2Nkfw944(6iGZhXFN zg0Q-u3vTL9gHON3x%rb>i%<{S^~u7Y`TBC)oBGUb^C#FQIKw-sZI_*NqCU)=s5_1L z5v$v&x9SC78gxj81@&{_$138lb0z5DVstRj0lo^(n*RA{d(M%%K8tnpC+NdZx_w9c zu0$Pa7tlAswYuM$4}WxPuw^=VztGC&aLAjj5B?sz1+{f$SAvE*?T!G+0S8(jUnfbvM(zZRit7Zr3s4Ik z#JOT}1%LaKyZ=vPUmE&U2f6wa`fv9iTl=gvkLc3>;Ol$wY-^w89Uo`L`-`6={(B$C zQ~V3W-}Z4j#HW4P+V@nakK+&@i@J4O#z~TqJ#jo4{|!8ZLvY^MPxxjZd8#k{Q(s>d zaOykZ{~z@Ap|j3B#V+rodFv@xsi1Ri%Cq3zf;e-&+Aj!?^a~h^tn*gLDw{tsbz7ey zes4k$+&UWDR^+4K=jWSR`*@F!vs&wQT+kgfv!BJ%laOADHX~hNEBiUY9h~cWsBiQ# z^b24y2hK-YzlrG(g#J480~>rg$Ry#Uq54qpA=jHh-gT?-kQozzE!8!~XsoJr74 z;yZl?b_ja-g-$0I4;%X1M*N}l|Cco46AS(ldiJw^E9C26 z_$7$oSDcUk!Y}bh`K1TH^sGkXSKS5t;$5!=4eTwn;mz~367T*y>G(!t{|{k^S0imF zeo>p|63?!DSK}G8KHs15X=~q{dA`03@R8nA(3k5cZPel#9|iCca2DtLL5@8iGzh*~ zywf*}@@ic)zk*N5SD|NV&ZId3-WwS-&(jP5q>& zF)yFA+M(m$_4TD-Tw*Rbvpdy?F;&->B5cB(eQS_&mh>M<<$`;@gs$tX339H7`VEl# zjnEZeLm#9-zW}F34?Rcfr@4d1dbg^QdkOel6Qq3Wq4lsR_s3VdVfj#erAxOp!tyT^ zvv$8;{{i{Da?+wVT8y!HSYFXaKDi(7iQTQ|sxrOs3+dq3#e4xRfG)?)h3Rei{zQ29 zCc-Wqt%T*D;Fba1xZqD1;N5FPYNF!64g%c=3Co`!PJe;18xS@l(A^E%JKp;0V{T_4 zjP*F(rWxy5Xd7D@lD|;H@))E{Y)kk2#Fl}SPmq#~8y%~1WB1!F@TX5f`U#|STKdRc z`o-}44arAUC%pDzH$1}f!Nc%+X+Mm5Q+~sk6XD@avAgfIm-z(zY{RmM)nhe$UBYs4 z*eLS&I!-F$3$QXzL_8Vsx#2c=m$sG}yEeOx9S^xVLHiEZqp@F3+VZ+~28-`prlMuz z#SfLtx)A*Ti~O`-#CMr+%fkfP9#oGa2mAVax(5BFSboa zN|`#jY7V~V=xfNvT5$BMbk@Ws=6h+^COyE-4aq+Pon>W~*Kp(iP4~xL`rw=Haa}Apo=%-=pZ4c_xw)@lzda-`R5RNWg6-~ajw=K0xI=Hi z&5uOjGOC=Q`IKwFzeYQs*n)5T;hFH;*j*5O*Niz3x8g~DJ0W=t=%>3JPr&0F{U6P* z5yb0jNG=KfXDA!Hdmoa?A7As4#a9Sc;&y`p-y1Uk<}cA{fLZOmrDlB14K+pW1a~*p zq2d1&XXDr-#&^Y3S;QS;9(#awYxRJ8B}(4qv3d@lFaOsI%F~@=1AGT=P9xg3qr6_@ zl2xn23F9$V$7}dH9__aN6Kye}ybYrQ{g2xLtGw6LY=f1MRr6h4>j4LOg#099H#j6e z15f%%Z4*2twh4f`J{pprg1`RP_@+RXr_`2>v}=$?{`M1b2cS$FIm@DBaR;8e=s{Kl ziM=L5oLq|%`M9}X2|vP+?268Yx6Z}zp29eTkIY=Z!+#4-Ht4is(wX300^lBsI7u$? zjnreHiN1L;elKG#1Ofd+_oPx^GvO8&zdzf%T;Y>Wtl_re`x)_Xu<`i*0`2d_crY6@ zPlHFk>#K{>Xk;>c#R2;t5#B+*XjXXQhvngj(V=t+V!^kV;Y9`t$Qwq7uRkonS2cs!6W7Bp4c^!|bJo0=J8lBLyI*A5 z+MMtjwDFk>ydP^f`LW{u>QxQv!AKImiA|o|-^2RM2-aC5og5QZ!r30jX+9Lf{eQvF zdw!wG>eCUNAvzIencH{Zn+No*){C?|_Jo_;&&XfYksL^Ha61iMY}#ubILVU|nIXtK zKF5iN>SQ?iqHn&&B)robmLCW?O6iUc`C_wt$IW4ReaLW@&&VtdV9yg@Nr=!%3m4$# zNVwBe)IR<6*X1UhwGes#2n7T+rQqwkW$l%4my3%92SG0G{$RbUL*#3FcRP>Xo+ z7;4sO=MMCx1p4xz6+8~&9)lj5jyzXtUHBdX?)A}kPbY-AT)ubY#>MR&R_*=~gE#ht z>8p`Gf{jUI@#STG5APRhNT2ToUj~PrrH0ZRzZdbd!vcJmYteS8oP3hu)w)ZS-^0!e zn>N0eJoKqO-SExw`Rh>rICg@_mu`u=5p+Hkb(N*UGps^%Bkh&2r;YAbNsrzxS$N1E zYNWT={lWd}`vdZ!2{^AAY2|HEwq1{}tT@n8x?f0NO~jq?oopL@XMp)FPC9S-KFnp` zgE^(aD8!qa$&(~3ZyKKLpf7SL?LJU@|1j=gq2D*4#gDqbJ|0BcI{bG4%KOEzqx2E? z>EktsdvS6|dDkOPSQD0OQ2t@}G@R`bCXy&7y+7R9Rs&qihpmp$Cu&gYl3^>pOiQ}z zE!;1!)pARQ(;P`B(uAXf%AaMXF}=pKhJ?1V^zL`hniGk>%;DD|$s5a(yI;>Xo;5Rga%P9*r^7M+-Y)4` zjO#k>N&JX?3+7K6U2kO*wcidoOT+TlLp7_YrC(}qpA7}k`%1fVXf(bPn$Bf&bgSoO z^!A3fJF|V>>0DUu8FB#b??b*Cf;+Cg1pr5P&*)^Cht#x)mS5v5^uu(1RMSi4I))}^ zdLSY9;rxMG_n$-XJciseX%sv~TyF?#Xcs#y9~gQFoW~w=XITEt5Qnndmayy_;+m&I z+j6CtZE#=W2K7Uf*w7}dF`cy-!g9lq3p8yWst|=$ZpcqaP6&UV4J!`bVfJ1h>VI%3 zX;81PF12OaCA}Ws@~L5YmO@ot3(0=0?IN!pJ#^bp5n6u{N_&S6*Q^ldBDQ+STf+sf zzoe+)T*)jcGvq*1nL zXf|?*2XBOmMEWu^_y$aH`^j-gq&gHnXDzX`dJFHpZAJ!dE^ zXAKFf$PS3ja%3aXcXH}Psg1_rmWWAoLMlz@Pq)aJV~!3-oi&1U#`&Ybb#)6l$x5vU`dXtOLqXC>y4xr3Q#}3Ak?O7 zqWcsUX9)fcbXNwN?a`S0B*Rm>iKxW>eknYBr^Nk~FTxG5`8_2$^R+aZ1Fjk3b_tjb zaJNUgd`Mr!IlevN^O^^F@b(eKaF!)amh>k6Y?6__-o)}ugJ#foH@*hg*~X!7)+?n- z5}PyrV)z3HB7adx{y)RZK%)T8pBmPo#A-!ah8=H=R*uDbe?*g#ULF6i4DQiuKW^|;T2StiUmm!4tcyy&Gliq*lN@SLl{F~?QfsRXx!`nL(b6E<-^@}I_6d@H+1w^)^$m0VL;wkS2L$YwEv z?-vKTUz5z}6yu=7{9b8YX?fYKUdWw(mpkE@;cTK2Um7|F?V&q44qq5PVGm9cxfTcb zM7|N5G2_JeaQ$$KCxo*!0V6yl_o_8DX+lW;yIQl-isy0FxAN4@;2W&vqiS#^G$eSX zW3f4mb$lL84%9;bsPgp@1GrAwaWU2gHETlhA$47j9&JhIDE0Da&>Mm;I%(VxzU}2K z4aqN{HkyrKcQ`EnNDf#BlT$4xOjR!TWs1OzRm@@TApd)VCl+*gvJM6I!X+=`yZH!i z1Z}Pa?g!K~ob9D_)qvi+)l`SB8=9C|+kJSyT}^Yy-I^_hl3vw>lBO=AaurU{zUsPN zGNR<|k{Q3$rgZMBnWR@;H`7-WLh@48>M(Wt09&cD8DwW9_He;h#&O5#RxjaMq(18Y z;)Fb)0Eou7G4gBCsn-&elWg|XkCt;+jw zBUwKuU()k)YFIE~B3TkreNryIBCti*Lo1{B|!_Xs<~R zvT2{;J{Grt71(PAdbp;7?|yJ}d>>Byd3`lj2| zO&Vf0>bP6U#1{m=8HnAZrdf=>_cj(eQQV@gX{$l++!sCUPUxoCT~Ql!tP_3rHCEWv zD>{bT)416&5^4{T4MDc^I&Eb=#10?vPUwrVRaGfW4)_IakjFr2P?if7lr#9d_I>4jV)Az%AzRTE z_pfkTT}gEs?IV1oG+jLHhji+aew=^rJolz_H$Lflboxx|Ha}_ z!BIcQ`NTbVuPyI?@vgB!zQNZw&hSLvSY2J;Ebx+RxVnE>RrhnXSM|$y>aZ7{$S&){ z#@nB%UDD5E-z&P1u9U(t{q~>u`e+aC$LPYI_m9%`zU#S9Mriu4TEzbw^nCIIdVU_4 zXQGj0;ya$^d_nKlRLd7yAN_#m)#$fWW8KMW$S1*Y9AqN#lm?^6K64EAIqkhQ)v7(K zQ^&`j$=Y)k(o@YbS)@3@sCs<&?7`Sx9s9q%T@Q2|#d#mVX@p~nDQ=$o!YgB9;ghkX zz17M0|KyWSvIMdubSK*csJ*&fNn4$6kG(xhq7HQk=_9E_NJARJbBdGaM@gRBI*Hqw zlq4o0uOy`{O=xfuzgJV-#7Rk@eI)P*dGz@$WoG>-Rff!fz11bj|07EK`~kMMmR7*F)xp+Yd6}qBGIa&~ zta$el>1*%}UvlOWe)sd2zAVS{vS$uI@5vwGrZ#E(LJvJ$s~^elEc89@S?-(eb(0G(!VfR8!G{TPrTcBYSF$(7jRYJ>NSJ`banH6|asc>i#JGTpytdtYB5)R`RL(b+#YY3RD4kIhbZCJTj} znbjQA$~V-k!-S%pss7%H?VZVzV{JF`9a*-af#NpSSk3KfDw#=oy&hm1bCB?ZAIyNm z)n*nFXGJ{ana)gnPvbcY_#FOe0?JXwK$!xdc~Q0lW%}6y$~$hI4t539F9UQO|3;A_ zC`0X;qBRF~IdB`O!I5Tg$APVcRwi*zR9I{Z-;-<+`P3ejqgpz?=TSC?tA;19tyCS{ zqrMeos_{t522fuE)|qlI3wXBChU^9Pjk8w3Wcd-%b`cb2QHP`V^`$*J`hmscTKh>C(Z`k_C)jOILuGA<;so;H$i^9^K{?`%q6uYQ>+&z+ZuZ zR4pa7B$ZxYJf7*`AW3*5#U7WF;JGfw%M{cR_U8TItR0jSpKLKIQbH8q4hZ~XfRmh( zq|!`T#B~-Bx=P8t1JXm%<+VMK92y?&-@*H=xj8Mb^StG7+sIned9!Hf9gOn(ZQHW> z{EV41xUpblOOBbJ=2=-olwhMbC2tXT9v;WCcuupY4K{5!`!t*FGwdRiizumd1VrJq zHD@?8glyi(JAB@@=yt})^PFYP61-I4&Wyo?mF{qS#X~#Wr z%COnc$iS$~BcLOpLL|xz+5+jIJnC%Tvgfp1ZV{Yt7num39?!HV#*L!kq!){hF~@aN zFoD*r)vRF68#WCMvy3^xR!?5)?mczC%hJsoUW3*gEZHY{a6U+?HBmdcSfpAwJz z+uE471jo70H{PF_7$4b_&LlGvX_Qz9De}Yjb6>Cxr9GM>m{YC}E%NI%9 z_?T@uR@TZzgj9G1maI6I)0`>r{KECjJVaE>VG388U4CsrZU%o-nU9v7LTR~liW)=t zWmVA4BF$$$uQ}Nn-J0f(IcL~Q@}cNp)^W#UoGb?|tV5Gwg(v+K;bS=i(+VmBlNbF? zWiT6^8JZ*{upH_QGZ53@tra1AuCo{DU1NuChvudsM&-dL5Ff_8TL9VmYPKsmJ~A}2 zJ;HnSBISv!0iD#YQ?m1zvSdr8C;IyO)9H@Y?2^k6D`FQ>YErE$&9oKL)mslr+Q0MQ-+P!uII{v;+L&rQkTmOkk)e2 z4zNw1r&x15)s=|}KHomr*nD#vdd3vL+7;;D8VrS#y?v?vfw!!qLwU!r^I8ra-eu~L z=@{<{G2cK=n=YcCcR>v)ekdSZLgJz-;t~S81=rDkuP~Kyhl1~i&Z^2laXCgTmM`UU zyeN2-fW>pgY8OP)G~wP)mrOkY2FLj|+QRzwE)L$6@dZ+sp(6N}}IYM8^3GJp)uIi@H%K@)XZKAhjI;yB0wasbl zo^tMp3#!|e!bO4)rV{6BJJuXax|Gct#Uk6K*?C$rC-Sp-EPs4^Zm}>^hNg_1K`IM| zP02RO;9a)a1S-ko85me;T7JvLu}ndureL|SVXWs|s6{rE--m@j=VO|!!P>$qKanr5 z=ByXxT!b`=j4Y*bO!h^Vk~WD%A}OKe%E*$Hgmr>cB$Za zj{}e*pyWFY-PD-)=Ghr7KMfSr(tuUU>ntf)#8XDz6mUXYfGI@OKx-EYU>wUp@VHfS zL_M(_plmW{6Ri+bED!WNDUGo^6}3Z{ z(WH#ihJ%M)Hpa=YNh1#%`Dv&qQu#av4XG>)xF5h=E$mLU6)y#q=KHL|;;-L+3N8~& zc^Y4jlx5MK7UJ$zSt;{~Z7Fl##MZzS;SV0l+22GBL+oiZW;}5 z*@NOE{Ua7dX|Q@rqdQ(PzGr$YtM3^w7Yse=2p`fO0Cs2#=3HrRB5!6b-H>Qx6{v_Z z7aIht+;DZFCat^l`KpVxbIIp6p5SN@tzmT+oQGPL%f0&yiK?o&g7R_h_Qm5u{MTng zc}*EG?V@K`$T2KuL9bYOU2@M|7ojprIY&&9igj`qmMhGX&9WqJhc_vku-%o@ zO7|zRBb|UbYffV?i6!7-R;lug1|Do^;iHT3t$~X|IqWHkizKbA0au8J%%xszztgbd z;Cw4)$R9y#=TaGHXL^X7c!Thh!ep%9{Y|Gcjj-Ny18gPZK{QF5Cz;Dx@|cEbZ2|+C zv`a6#b0JA`Fh|~1?8_?;l?^%cx0aJN64)f5Cd_KD4KXK|GUB|A!ws|J4%2BBC z5s=sBt)a9@YoMqCZ4f-q!iC!Mv=e!nQvExJ`ug{bB{PG2#>Pi8qkW^pSn|oa7`ta6Nkoo5WWC+#(C_n1)&eiZK2vhM7TYKxB`oq(A(joXkdiM zX@Gje+O!IGt2i$hDCM&x4Gne2jcKz8_hi$|5$wAgYDk2cLXHf;EBY4-vOLsy1?M(0*{*uv)y$C-&tFvf*_f_qh#91ZAK@FK{JLB zT&`R7G;eMWPJ1UT-ac3;sG6yI!^jQ`mSZ1r`56)bo0+&G}CwIada9Us#(JK6=GmAx>uIFU?n1IL-CQDtGoOaD? z#WJyNr&YD3T=0AR+J-u@|P`0-gR}d{0y0-9BKX7z2(r=(L~iCPgI5B>36b z<9b@Xn3Y;yam2Gw?XagC-75b5>6?#ygVD8DLHhe%O_w?$g?(bjgnE_ zfxRq+FU6IG*4@i=Yc^M`w5t(17UyW>-4^~bXf|)_FHX^J!YPT7lWs@XPb5LY`CUxv zx(#Q%YutD>o0X7W85czj>Ki;4rcZ#yhJdVOC|aSsS4I*vcr_Ukp*&w(x*yFdt&DKC zS}aWDAf#xES;5B0>eXxlb3zl+MN%dsNG!x1QEV26lnk;y{Mcjw_cQ}&&RZf*Cnx0O z{Iz#L#s-j3h?2?)X{Sh_JR-A9L~oT)!i%)=Vz@3umzOVNimEYDq>d@D zbKsYeVic1kXVuE6xo|(dm^2yvB)LoxaWqr2pn_u0NSBg+ku!e^ITW8((NaVqMQ>F{ zrPcF=I3_t5gN`k-1Tahq4$tAv9s@gZMKN9BWkGy zib|qLzXc&hSS zm(MK-*{uJ^1eY$>9;8zs+Fimlg}RdNe$2GWMy;(qky$Jlbo5FGxdBfW`83L+;Ls%lZ2G>hU$G2B&`l6eSrcJpr) zG$~942AM~_mUXWakn8YV8>hRJr9)A=6md&js@Q`203%C_tU;g1vtf@?)MlHYxfb^j zdMTqx3ql`C{aUelMvhOJH zBV!?ga2~!CvT-ICxdl7NM!=Mb#HVl$Vl-kQdES`ko7`fXxX-Zdh!~d~#f5Dl zAC0ZI7s)%p8mcvxSrUVRaEd(KO-vWj8+#nAD+u$PZbS-6K^!b%&ZZ$G)%dVcCHc|a zEMg;JLFgL4Rj_=E6p`BzPg*Dy*}GlAY0nzD93Dw2yZ6Z7*1AyPUKY_BVgNR^7CqLX z3^VfNdvB*$U`uC3#Cx}gCNRk1 zbgI#NkHF79`~-b+VmN~cJ`roiM0%praTv6D+$%IrbHcm6zV4Z`s7f0k6~MQ zs>D}p@VTv$xlk2-MysdmuT4-en&-PcZv+NkvG2Z?N{VUGY$CftXw^}fOL4v5O&(1y zk-1XV5!2kWp{;@H;EIbu2<0?u=)>^wLM-UgowrRF^l6KyJ zi%OGnBt^3nSlQsd^v>34NYMMC;s}(|P@af@3m@N9YYXqsLz8cT%+!T9w;@DHh8Hf0 zU<)TSE3Hf9)YSEhu z*^Q+KaTCwC@R~Un!@&=GbdtZDX`w+*c(_jZcA>c zxciLvS?HDEJtL!;fzgSP6!QT6yNA-5bop^)G(DE=>n}g|CR3vW1L=Oa^;`^q&|!b| zGri7KsgfC=80iC`(gv#RNNykMtFE)Ne>^=jI#LZvqh=r8kE)FqZ65BYpt3? zRSdxxY-@UBBcCPXh6bXu7K9YQ|f$_s1eBr83?fB|v ze{tlpmNO53*|`+YkA3IW>q2il5xZ*2d>kM8>Jds_N7 zK4;&xd+h1O(Yr7IR@=2teEQ0(4>0yFBtOz1(jOqrBYg6b{C z-_6+XB3+O4^AKZCz&UqQ7_c73+Hn0nxaDr?XH3KW2XOuHHdg+$Mi`qwdLH$@5ykIy zkW>CQ{8@7eV+YiG)r0B->VxVb^|1PQ;AG&*z*B)2x4yjfm94LBePb&Nt_rpU*96xF z*9F%HuL<(t#-J~_C8z`g!B8+3+!jm)2ZO`GvEc6DZNa@kJvbB01ykX{@Njr6oC)s^ z-xl5**26R5T(}T+!VBU3;RE4&!uN&`hVKtQ5PmRxD1114B>ZUjXgC!aj0{J{BALkU z$Ze6m5j`>!$wgj?ycT&Q!lG-UYoqI;>!a61kHwG2PsAUOpNu~le=7cT{F(T(@l)~B z@iXzW@pJJP<1fcwiN6+qBhC`55-o`}iBsyq!2N*-0w;PN?>X7?WY5z*&-R?^Io)%n z=PX7FpS9ovUHt3(>-`14<6rPU?SIB!P&an_y0>&I-GT0>!cT{v2|pV?6+Rt46FwV0 z7k)H)G-vV+Ui0V#i|VVlT$F#Z&RYI8opv783gt2NL%r zT6)&>tnFFXv%cq8&+#6j2n}<_UcqHd$tb&(+myYEjtH=TKje@3xA{~4LI0!vqyA(5 zF*T#^R!^&E)U)b2^+olbu6w%bTy39k*W3&#YfkA;tiPoOW7*GD7ABF7^qBBvu~B4;Cm(c$P=G!xw&y)C*o z>O}929*RC5JsCX{JsYKdDzQLpZ%mIph<>h%ua92?-k(f7nRqJkbmE!Bvx!rQ(}^>Q zvx#$w7ZWchUP_n_0 z2kR27XBD`QX7S@7jN#{O*@CiPIiTFDgt}r~+qzO+gI&X2V_li9-CehJ?F9{mu7$4s zUF*BA>E_)VAq%1ISogN>RQF)_aQ9eurh9+)f$kT(U+#XT+mn4KcrLkx-FWDR&)9O_yh3=sh<459;#*fCOe3Nv8z%l#<09-1PF{9*^ zg5u!xiYUJav>#ONR~}FvR1PVJl_LuCukyF}*Z4`A_2>*nP;w&>3&mowZLw7B+1ROA z{p=ww1rnizo|s8Im^dUxQjVL`v(U4@=dhSDAY?E84h}9`5T6)u+kaF!su2IrgwBQz zM(>Y45Pc9ba~QK@H%1Kb*ex=vlMUZZk#qv}()sEQg;LuyRjrl!jsh>PhuU^(pmf6^&JWF2()dBJDpR(@3vhsmflS Xx%Hd-p_tm=qQNi7bm(|Bu Date: Wed, 9 Dec 2015 17:10:21 +0800 Subject: [PATCH 5/6] HiKeyPkg: add AndroidFastbootBinPkg Signed-off-by: Haojian Zhuang --- HisiPkg/HiKeyPkg/HiKey.fdf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/HisiPkg/HiKeyPkg/HiKey.fdf b/HisiPkg/HiKeyPkg/HiKey.fdf index 91eb9ba79eb6..16457d1656b0 100644 --- a/HisiPkg/HiKeyPkg/HiKey.fdf +++ b/HisiPkg/HiKeyPkg/HiKey.fdf @@ -151,6 +151,8 @@ READ_LOCK_STATUS = TRUE INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf + INF AndroidFastbootBinPkg/AndroidFastboot.inf + # # UEFI applications # From 865c31b30e641febd76e3dc352fcde704e111710 Mon Sep 17 00:00:00 2001 From: Haojian Zhuang Date: Thu, 24 Dec 2015 21:55:46 +0800 Subject: [PATCH 6/6] HiKeyPkg: use fvfile to reference fastboot app Use FvFile to reference AndroidFastbootApp.efi. It's used when AndroidFastbootApp.efi doesn't exist in ESP. Signed-off-by: Haojian Zhuang --- HisiPkg/HiKeyPkg/Drivers/HiKeyDxe/InstallBootMenu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HisiPkg/HiKeyPkg/Drivers/HiKeyDxe/InstallBootMenu.c b/HisiPkg/HiKeyPkg/Drivers/HiKeyDxe/InstallBootMenu.c index 90507d2bd9f3..8157d35b24ff 100644 --- a/HisiPkg/HiKeyPkg/Drivers/HiKeyDxe/InstallBootMenu.c +++ b/HisiPkg/HiKeyPkg/Drivers/HiKeyDxe/InstallBootMenu.c @@ -61,7 +61,7 @@ STATIC UINT16 mBootIndex = 0; STATIC struct HiKeyBootEntry Entries[] = { [HIKEY_BOOT_ENTRY_FASTBOOT] = { - L"VenHw(B549F005-4BD4-4020-A0CB-06F42BDA68C3)/HD(6,GPT,5C0F213C-17E1-4149-88C8-8B50FB4EC70E,0x7000,0x20000)/\\EFI\\BOOT\\FASTBOOT.EFI", + L"FvFile(9588502a-5370-11e3-8631-d7c5951364c8)", NULL, L"fastboot", LOAD_OPTION_CATEGORY_APP