<div dir="ltr"><div>2016-04-29 18:22 GMT+08:00 Emil Velikov <span dir="ltr"><<a href="mailto:emil.l.velikov@gmail.com" target="_blank">emil.l.velikov@gmail.com</a>></span>:<br></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><span class="">On 28 April 2016 at 08:34, Chih-Wei Huang <<a href="mailto:cwhuang@android-x86.org">cwhuang@android-x86.org</a>> wrote:<br>
> From: WuZhen <<a href="mailto:wuzhen@jidemail.com">wuzhen@jidemail.com</a>><br>
><br>
> Support multilib compilation use runtime feature selection.<br>
><br>
> NO_REF_TASK<br>
> tested: local run<br>
><br>
> Change-Id: Iee7961effdecde09cfbdaf09455bfb0912699ae3<br>
> Signed-off-by: Chih-Wei Huang <<a href="mailto:cwhuang@linux.org.tw">cwhuang@linux.org.tw</a>><br>
> ---<br>
>  <a href="http://Android.common.mk" rel="noreferrer" target="_blank">Android.common.mk</a>                    | 21 ++++++++++++++++++---<br>
>  Android.mk                           |  5 -----<br>
>  src/mapi/Android.mk                  |  3 +++<br>
>  src/mesa/<a href="http://Android.gen.mk" rel="noreferrer" target="_blank">Android.gen.mk</a>              | 25 ++++++++++++++++++-------<br>
>  src/mesa/<a href="http://Android.libmesa_dricore.mk" rel="noreferrer" target="_blank">Android.libmesa_dricore.mk</a>  | 20 +++++++++-----------<br>
>  src/mesa/<a href="http://Android.libmesa_sse41.mk" rel="noreferrer" target="_blank">Android.libmesa_sse41.mk</a>    |  5 ++++-<br>
>  src/mesa/<a href="http://Android.libmesa_st_mesa.mk" rel="noreferrer" target="_blank">Android.libmesa_st_mesa.mk</a>  | 20 +++++++++-----------<br>
>  src/mesa/<a href="http://Android.mesa_gen_matypes.mk" rel="noreferrer" target="_blank">Android.mesa_gen_matypes.mk</a> |  7 +++++--<br>
>  src/mesa/drivers/dri/i965/Android.mk |  5 -----<br>
>  9 files changed, 66 insertions(+), 45 deletions(-)<br>
><br>
<br>
</span>Afact this patch does a few things:<br>
 - Moves -DUSE_SSE41 to the top level - good idea [patch 1]<br>
 - Consolidates -msse41 to <a href="http://libmesa_sse41.mk" rel="noreferrer" target="_blank">libmesa_sse41.mk</a> (effectively adding it to<br>
st_mesa) - good idea/bugfix.<br>
Take a look into <a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a>'s add -mstackrealign (and the commit<br>
that introduced it). You might want the same/similar fix. [patch 2]<br>
<br>
 - Forces SSE4.1 even if there is no support for it. I.e.<br>
ARCH_X86_HAVE_SSE4_1 checks were dropped - very bad idea, please<br>
don't.<br></blockquote><div><br></div><div>mesa seems always check for SSE4.1 support before using any of sse4.1 functions, if you are talking about compiler support for sse4.1, the toolchain used in android should always support this. I only changed that into always generate sse4.1 and rely on those runtion checks to avoid issues on system without sse4.1 support, do you think this is a issue? </div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
 - Adds separate (x86 and x86-64) SSE4.1 flags and libraries - not<br>
needed afaict, drop ?<br></blockquote><div><span style="font-size:14px"><br></span></div><div><span style="font-size:14px">I'm trying to avoid not breaking non-x86 builds.  this </span> is to seems better than to surround them in a if clause. especially if we're to add flags for other architectures. </div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
 - Has some trailing '\' in which should cause build warning/errors -<br>
see comments below<br>
 - Gets "asm" building when host_arch != target_arch - have you guys<br>
tested it. what is the perf. improvement ? [patch 3]<br></blockquote><div> </div><div>No, we have not. We're trying to be in line to other platforms.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<br>
Based on the above this should (ideally) be 3 patches. There are some<br>
further comment below - please take a look.<br>
<span class=""><br>
> diff --git a/<a href="http://Android.common.mk" rel="noreferrer" target="_blank">Android.common.mk</a> b/<a href="http://Android.common.mk" rel="noreferrer" target="_blank">Android.common.mk</a><br>
> index d6bf717..93c1465 100644<br>
> --- a/<a href="http://Android.common.mk" rel="noreferrer" target="_blank">Android.common.mk</a><br>
> +++ b/<a href="http://Android.common.mk" rel="noreferrer" target="_blank">Android.common.mk</a><br>
> @@ -64,13 +64,28 @@ LOCAL_CFLAGS += \<br>
>  LOCAL_CONLYFLAGS += \<br>
>         -std=c99<br>
><br>
> +x86_flags := \<br>
> +       -DUSE_SSE41 \<br>
> +<br>
> +x86_64_flags := \<br>
> +       -DUSE_SSE41 \<br>
> +<br>
</span>No need for separate x86/x86_64 variables here. If one does not force<br>
the define (as currently done) that is.<br>
<span class=""><br>
>  ifeq ($(strip $(MESA_ENABLE_ASM)),true)<br>
> -ifeq ($(TARGET_ARCH),x86)<br>
> -LOCAL_CFLAGS += \<br>
> +x86_flags += \<br>
>         -DUSE_X86_ASM \<br>
> +       -DUSE_MMX_ASM \<br>
> +       -DUSE_3DNOW_ASM \<br>
> +       -DUSE_SSE_ASM \<br>
> +<br>
> +x86_64_flags += \<br>
> +       -DUSE_X86_64_ASM \<br>
><br>
</span>These are unterminated (i.e. trailing \).<br>
<span class=""><br>
>  endif<br>
> -endif<br>
> +<br>
> +LOCAL_ASFLAGS_x86 += $(x86_flags)<br>
> +LOCAL_ASFLAGS_x86_64 += $(x86_64_flags)<br>
> +LOCAL_CFLAGS_x86 += $(x86_flags)<br>
> +LOCAL_CFLAGS_x86_64 += $(x86_64_flags)<br>
><br>
>  ifeq ($(MESA_ENABLE_LLVM),true)<br>
>  LOCAL_CFLAGS += \<br>
> diff --git a/Android.mk b/Android.mk<br>
> index 67d894f..368d02e 100644<br>
> --- a/Android.mk<br>
> +++ b/Android.mk<br>
> @@ -63,12 +63,7 @@ $(warning invalid GPU drivers: $(invalid_drivers))<br>
>  MESA_GPU_DRIVERS := $(filter-out $(invalid_drivers), $(MESA_GPU_DRIVERS))<br>
>  endif<br>
><br>
> -# host and target must be the same arch to generate matypes.h<br>
> -ifeq ($(TARGET_ARCH),$(HOST_ARCH))<br>
>  MESA_ENABLE_ASM := true<br>
</span>Since now it's always enabled one can drop the variable.<br>
<span class=""><br>
> -else<br>
> -MESA_ENABLE_ASM := false<br>
> -endif<br>
><br>
>  ifneq ($(filter $(classic_drivers), $(MESA_GPU_DRIVERS)),)<br>
>  MESA_BUILD_CLASSIC := true<br>
> diff --git a/src/mapi/Android.mk b/src/mapi/Android.mk<br>
> index 4445218..b654c25 100644<br>
> --- a/src/mapi/Android.mk<br>
> +++ b/src/mapi/Android.mk<br>
> @@ -57,6 +57,9 @@ intermediates := $(call local-generated-sources-dir)<br>
>  abi_header := $(intermediates)/$(abi_header)<br>
>  LOCAL_GENERATED_SOURCES := $(abi_header)<br>
><br>
> +# workaround build warning<br>
> +LOCAL_LDFLAGS_x86 += -Wl,--no-warn-shared-textrel<br>
> +<br>
</span>Can you elaborate a bit more here. It might be a genuine bug that we<br>
want to fix.<br>
This is currently hidden amongst many other things which makes it very<br>
easy to miss. If one is to include it with another patch it should be<br>
mentioned in the commit summary.<br>
<div><div class="h5"><br>
>  $(abi_header): PRIVATE_PRINTER := shared-glapi<br>
><br>
>  mapi_abi_headers += $(abi_header)<br>
> diff --git a/src/mesa/<a href="http://Android.gen.mk" rel="noreferrer" target="_blank">Android.gen.mk</a> b/src/mesa/<a href="http://Android.gen.mk" rel="noreferrer" target="_blank">Android.gen.mk</a><br>
> index e567102..e04482b 100644<br>
> --- a/src/mesa/<a href="http://Android.gen.mk" rel="noreferrer" target="_blank">Android.gen.mk</a><br>
> +++ b/src/mesa/<a href="http://Android.gen.mk" rel="noreferrer" target="_blank">Android.gen.mk</a><br>
> @@ -45,10 +45,11 @@ LOCAL_SRC_FILES := $(filter-out $(sources), $(LOCAL_SRC_FILES))<br>
>  LOCAL_C_INCLUDES += $(intermediates)/main<br>
><br>
>  ifeq ($(strip $(MESA_ENABLE_ASM)),true)<br>
> -ifeq ($(TARGET_ARCH),x86)<br>
> -sources += x86/matypes.h<br>
> -LOCAL_C_INCLUDES += $(intermediates)/x86<br>
> -endif<br>
> +LOCAL_GENERATED_SOURCES_x86 += $(addprefix $(intermediates)/, x86/matypes.h)<br>
> +LOCAL_GENERATED_SOURCES_x86_64 += $(addprefix $(intermediates)/, x86_64/matypes.h)<br>
> +<br>
> +LOCAL_C_INCLUDES_x86 += $(intermediates)/x86<br>
> +LOCAL_C_INCLUDES_x86_64 += $(intermediates)/x86_64<br>
>  endif<br>
><br>
>  sources += main/git_sha1.h<br>
> @@ -79,12 +80,22 @@ $(intermediates)/main/git_sha1.h: $(wildcard $(MESA_TOP)/.git/HEAD)<br>
>                         > $@; \<br>
>                 fi<br>
><br>
> -matypes_deps := \<br>
> -       $(BUILD_OUT_EXECUTABLES)/mesa_gen_matypes$(BUILD_EXECUTABLE_SUFFIX) \<br>
> +matypes_deps32 := \<br>
> +       $(BUILD_OUT_EXECUTABLES)/mesa_gen_matypes32$(BUILD_EXECUTABLE_SUFFIX) \<br>
> +       $(LOCAL_PATH)/main/mtypes.h \<br>
> +       $(LOCAL_PATH)/tnl/t_context.h<br>
> +<br>
> +matypes_deps64 := \<br>
> +       $(BUILD_OUT_EXECUTABLES)/mesa_gen_matypes64$(BUILD_EXECUTABLE_SUFFIX) \<br>
>         $(LOCAL_PATH)/main/mtypes.h \<br>
>         $(LOCAL_PATH)/tnl/t_context.h<br>
><br>
> -$(intermediates)/x86/matypes.h: $(matypes_deps)<br>
> +$(intermediates)/x86/matypes.h: $(matypes_deps32)<br>
> +       @mkdir -p $(dir $@)<br>
> +       @echo "MATYPES: $(PRIVATE_MODULE) <= $(notdir $@)"<br>
> +       $(hide) $< > $@<br>
> +<br>
> +$(intermediates)/x86_64/matypes.h: $(matypes_deps64)<br>
>         @mkdir -p $(dir $@)<br>
>         @echo "MATYPES: $(PRIVATE_MODULE) <= $(notdir $@)"<br>
>         $(hide) $< > $@<br>
</div></div>Have you've tried building this on a non x86 based system ? Does the<br>
binaries work properly afterwords ?<br>
<div><div class="h5"><br>
> diff --git a/src/mesa/<a href="http://Android.libmesa_dricore.mk" rel="noreferrer" target="_blank">Android.libmesa_dricore.mk</a> b/src/mesa/<a href="http://Android.libmesa_dricore.mk" rel="noreferrer" target="_blank">Android.libmesa_dricore.mk</a><br>
> index d7647a7..6773b5b 100644<br>
> --- a/src/mesa/<a href="http://Android.libmesa_dricore.mk" rel="noreferrer" target="_blank">Android.libmesa_dricore.mk</a><br>
> +++ b/src/mesa/<a href="http://Android.libmesa_dricore.mk" rel="noreferrer" target="_blank">Android.libmesa_dricore.mk</a><br>
> @@ -31,6 +31,7 @@ LOCAL_PATH := $(call my-dir)<br>
>  # Import the following variables:<br>
>  #     MESA_FILES<br>
>  #     X86_FILES<br>
> +#     X86_64_FILES<br>
>  include $(LOCAL_PATH)/Makefile.sources<br>
><br>
>  include $(CLEAR_VARS)<br>
> @@ -42,19 +43,10 @@ LOCAL_SRC_FILES := \<br>
>         $(MESA_FILES)<br>
><br>
>  ifeq ($(strip $(MESA_ENABLE_ASM)),true)<br>
> -ifeq ($(TARGET_ARCH),x86)<br>
> -       LOCAL_SRC_FILES += $(X86_FILES)<br>
> -endif # x86<br>
> +       LOCAL_SRC_FILES_x86 += $(X86_FILES)<br>
> +       LOCAL_SRC_FILES_x86_64 += $(X86_64_FILES)<br>
>  endif # MESA_ENABLE_ASM<br>
><br>
> -ifeq ($(ARCH_X86_HAVE_SSE4_1),true)<br>
> -LOCAL_WHOLE_STATIC_LIBRARIES := \<br>
> -       libmesa_sse41<br>
> -LOCAL_CFLAGS := \<br>
> -       -msse4.1 \<br>
> -       -DUSE_SSE41<br>
> -endif<br>
> -<br>
>  LOCAL_C_INCLUDES := \<br>
>         $(MESA_TOP)/src/mapi \<br>
>         $(MESA_TOP)/src/mesa/main \<br>
> @@ -65,6 +57,12 @@ LOCAL_C_INCLUDES := \<br>
>  LOCAL_WHOLE_STATIC_LIBRARIES += \<br>
>         libmesa_program<br>
><br>
> +LOCAL_WHOLE_STATIC_LIBRARIES_x86 += \<br>
> +       libmesa_sse41 \<br>
> +<br>
> +LOCAL_WHOLE_STATIC_LIBRARIES_x86_64 += \<br>
> +       libmesa_sse41 \<br>
> +<br>
</div></div>Similar to the defines - one should not need the separate variables<br>
(libraries) and/or hardcoded behaviour.<br>
<span class=""><br>
>  include $(LOCAL_PATH)/<a href="http://Android.gen.mk" rel="noreferrer" target="_blank">Android.gen.mk</a><br>
>  include $(MESA_COMMON_MK)<br>
>  include $(BUILD_STATIC_LIBRARY)<br>
> diff --git a/src/mesa/<a href="http://Android.libmesa_sse41.mk" rel="noreferrer" target="_blank">Android.libmesa_sse41.mk</a> b/src/mesa/<a href="http://Android.libmesa_sse41.mk" rel="noreferrer" target="_blank">Android.libmesa_sse41.mk</a><br>
> index 8562da6..3668785 100644<br>
> --- a/src/mesa/<a href="http://Android.libmesa_sse41.mk" rel="noreferrer" target="_blank">Android.libmesa_sse41.mk</a><br>
> +++ b/src/mesa/<a href="http://Android.libmesa_sse41.mk" rel="noreferrer" target="_blank">Android.libmesa_sse41.mk</a><br>
> @@ -20,7 +20,7 @@<br>
>  # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER<br>
>  # DEALINGS IN THE SOFTWARE.<br>
><br>
> -ifeq ($(ARCH_X86_HAVE_SSE4_1),true)<br>
> +ifneq ($(filter x86 x86_64,$(TARGET_ARCH)),)<br>
><br>
>  LOCAL_PATH := $(call my-dir)<br>
><br>
> @@ -33,6 +33,9 @@ LOCAL_MODULE := libmesa_sse41<br>
>  LOCAL_SRC_FILES += \<br>
>         $(X86_SSE41_FILES)<br>
><br>
> +LOCAL_CFLAGS += \<br>
> +       -msse4.1 \<br>
> +<br>
</span>Trailing \<br>
<div class=""><div class="h5"><br>
>  LOCAL_C_INCLUDES := \<br>
>         $(MESA_TOP)/src/mapi \<br>
>         $(MESA_TOP)/src/gallium/include \<br>
> diff --git a/src/mesa/<a href="http://Android.libmesa_st_mesa.mk" rel="noreferrer" target="_blank">Android.libmesa_st_mesa.mk</a> b/src/mesa/<a href="http://Android.libmesa_st_mesa.mk" rel="noreferrer" target="_blank">Android.libmesa_st_mesa.mk</a><br>
> index bbd3956..fc97a0a 100644<br>
> --- a/src/mesa/<a href="http://Android.libmesa_st_mesa.mk" rel="noreferrer" target="_blank">Android.libmesa_st_mesa.mk</a><br>
> +++ b/src/mesa/<a href="http://Android.libmesa_st_mesa.mk" rel="noreferrer" target="_blank">Android.libmesa_st_mesa.mk</a><br>
> @@ -41,18 +41,10 @@ LOCAL_SRC_FILES := \<br>
>         $(MESA_GALLIUM_FILES)<br>
><br>
>  ifeq ($(strip $(MESA_ENABLE_ASM)),true)<br>
> -ifeq ($(TARGET_ARCH),x86)<br>
> -       LOCAL_SRC_FILES += $(X86_FILES)<br>
> -endif # x86<br>
> +       LOCAL_SRC_FILES_x86 += $(X86_FILES)<br>
> +       LOCAL_SRC_FILES_x86_64 += $(X86_64_FILES)<br>
>  endif # MESA_ENABLE_ASM<br>
><br>
> -ifeq ($(ARCH_X86_HAVE_SSE4_1),true)<br>
> -LOCAL_WHOLE_STATIC_LIBRARIES := \<br>
> -       libmesa_sse41<br>
> -LOCAL_CFLAGS := \<br>
> -       -DUSE_SSE41<br>
> -endif<br>
> -<br>
>  LOCAL_C_INCLUDES := \<br>
>         $(MESA_TOP)/src/mapi \<br>
>         $(MESA_TOP)/src/mesa/main \<br>
> @@ -61,7 +53,13 @@ LOCAL_C_INCLUDES := \<br>
>         $(MESA_TOP)/src/gallium/include<br>
><br>
>  LOCAL_WHOLE_STATIC_LIBRARIES += \<br>
> -       libmesa_program<br>
> +       libmesa_program \<br>
> +<br>
> +LOCAL_WHOLE_STATIC_LIBRARIES_x86 += \<br>
> +       libmesa_sse41 \<br>
> +<br>
> +LOCAL_WHOLE_STATIC_LIBRARIES_x86_64 += \<br>
> +       libmesa_sse41 \<br>
><br>
>  include $(LOCAL_PATH)/<a href="http://Android.gen.mk" rel="noreferrer" target="_blank">Android.gen.mk</a><br>
>  include $(MESA_COMMON_MK)<br>
> diff --git a/src/mesa/<a href="http://Android.mesa_gen_matypes.mk" rel="noreferrer" target="_blank">Android.mesa_gen_matypes.mk</a> b/src/mesa/<a href="http://Android.mesa_gen_matypes.mk" rel="noreferrer" target="_blank">Android.mesa_gen_matypes.mk</a><br>
> index 4fcf73a..163f0e2 100644<br>
> --- a/src/mesa/<a href="http://Android.mesa_gen_matypes.mk" rel="noreferrer" target="_blank">Android.mesa_gen_matypes.mk</a><br>
> +++ b/src/mesa/<a href="http://Android.mesa_gen_matypes.mk" rel="noreferrer" target="_blank">Android.mesa_gen_matypes.mk</a><br>
> @@ -25,13 +25,16 @@<br>
>  # ---------------------------------------------------------------------<br>
><br>
>  ifeq ($(strip $(MESA_ENABLE_ASM)),true)<br>
> -ifeq ($(TARGET_ARCH),x86)<br>
> +ifneq ($(filter x86 x86_64,$(TARGET_ARCH)),)<br>
><br>
>  LOCAL_PATH := $(call my-dir)<br>
><br>
>  include $(CLEAR_VARS)<br>
><br>
>  LOCAL_MODULE := mesa_gen_matypes<br>
> +LOCAL_MULTILIB := both<br>
> +LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32<br>
> +LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64<br>
>  LOCAL_IS_HOST_MODULE := true<br>
><br>
>  LOCAL_C_INCLUDES := \<br>
> @@ -43,5 +46,5 @@ LOCAL_SRC_FILES := \<br>
>  include $(MESA_COMMON_MK)<br>
>  include $(BUILD_HOST_EXECUTABLE)<br>
><br>
> -endif # x86<br>
> +endif # x86 x86_64<br>
>  endif # MESA_ENABLE_ASM<br>
> diff --git a/src/mesa/drivers/dri/i965/Android.mk b/src/mesa/drivers/dri/i965/Android.mk<br>
> index 056b223..a82b69b 100644<br>
> --- a/src/mesa/drivers/dri/i965/Android.mk<br>
> +++ b/src/mesa/drivers/dri/i965/Android.mk<br>
> @@ -39,11 +39,6 @@ include $(LOCAL_PATH)/Makefile.sources<br>
>  LOCAL_CFLAGS := \<br>
>         $(MESA_DRI_CFLAGS)<br>
><br>
> -ifeq ($(ARCH_X86_HAVE_SSE4_1),true)<br>
> -LOCAL_CFLAGS += \<br>
> -       -DUSE_SSE41<br>
> -endif<br>
> -<br>
>  LOCAL_C_INCLUDES := \<br>
>         $(MESA_DRI_C_INCLUDES)<br>
><br>
> --<br>
> 1.9.1<br>
><br>
</div></div><span class=""><font color="#888888">> --<br>
> You received this message because you are subscribed to the Google Groups "Android-x86 development" group.<br>
> To unsubscribe from this group and stop receiving emails from it, send an email to <a href="mailto:android-x86-devel%2Bunsubscribe@googlegroups.com">android-x86-devel+unsubscribe@googlegroups.com</a>.<br>
> To post to this group, send email to <a href="mailto:android-x86-devel@googlegroups.com">android-x86-devel@googlegroups.com</a>.<br>
> To view this discussion on the web visit <a href="https://groups.google.com/d/msgid/android-x86-devel/1461828900-4813-7-git-send-email-cwhuang%40linux.org.tw" rel="noreferrer" target="_blank">https://groups.google.com/d/msgid/android-x86-devel/1461828900-4813-7-git-send-email-cwhuang%40linux.org.tw</a>.<br>
> For more options, visit <a href="https://groups.google.com/d/optout" rel="noreferrer" target="_blank">https://groups.google.com/d/optout</a>.<br>
<br>
--<br>
You received this message because you are subscribed to the Google Groups "Android-x86 development" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an email to <a href="mailto:android-x86-devel%2Bunsubscribe@googlegroups.com">android-x86-devel+unsubscribe@googlegroups.com</a>.<br>
To post to this group, send email to <a href="mailto:android-x86-devel@googlegroups.com">android-x86-devel@googlegroups.com</a>.<br>
To view this discussion on the web visit <a href="https://groups.google.com/d/msgid/android-x86-devel/CACvgo50N29G7vnohOAFZWDWfyNxe2Pu%2BM7LQAprT2Lw8%3D%2BRGhQ%40mail.gmail.com" rel="noreferrer" target="_blank">https://groups.google.com/d/msgid/android-x86-devel/CACvgo50N29G7vnohOAFZWDWfyNxe2Pu%2BM7LQAprT2Lw8%3D%2BRGhQ%40mail.gmail.com</a>.<br>
For more options, visit <a href="https://groups.google.com/d/optout" rel="noreferrer" target="_blank">https://groups.google.com/d/optout</a>.<br>
</font></span></blockquote></div><br></div></div>