From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755518AbaDGOwz (ORCPT ); Mon, 7 Apr 2014 10:52:55 -0400 Received: from mail-qa0-f50.google.com ([209.85.216.50]:57262 "EHLO mail-qa0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754650AbaDGOwv (ORCPT ); Mon, 7 Apr 2014 10:52:51 -0400 MIME-Version: 1.0 In-Reply-To: <1396882237-27608-1-git-send-email-ling.ma@alipay.com> References: <1396882237-27608-1-git-send-email-ling.ma@alipay.com> Date: Mon, 7 Apr 2014 22:52:49 +0800 Message-ID: Subject: Re: [PATCH RFC] x86:Improve memset with general 64bit instruction From: Ling Ma To: mingo@redhat.com Cc: tglx@linutronix.de, hpa@zytor.com, neleai@seznam.cz, linux-kernel@vger.kernel.org, Ling Ma Content-Type: multipart/mixed; boundary=001a11c121e077283704f675054f Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --001a11c121e077283704f675054f Content-Type: text/plain; charset=ISO-8859-1 Append test suit after tar, run ./test command please. thanks 2014-04-07 22:50 GMT+08:00, ling.ma.program@gmail.com : > From: Ling Ma > > In this patch we manage to reduce miss branch prediction by > avoiding using branch instructions and force destination to be aligned > with general 64bit instruction. > Below compared results shows we improve performance up to 1.8x > (We modified test suit from Ondra, send after this patch) > > Bytes: ORG_TIME: NEW_TIME: ORG vs NEW: > 7 0.51 0.48 1.06 > 16 0.55 0.38 1.44 > 18 0.61 0.44 1.38 > 21 0.62 0.47 1.31 > 25 0.64 0.45 1.42 > 30 0.65 0.45 1.44 > 36 0.66 0.44 1.50 > 38 0.67 0.46 1.45 > 62 0.70 0.44 1.59 > 75 0.71 0.44 1.61 > 85 0.73 0.46 1.58 > 120 0.78 0.44 1.77 > 193 0.81 0.46 1.76 > 245 0.84 0.52 1.61 > 256 0.83 0.45 1.84 > 356 0.86 0.55 1.56 > 601 0.98 0.65 1.50 > 958 1.14 0.81 1.40 > 1024 1.19 0.86 1.38 > 2048 1.69 1.34 1.26 > Signed-off-by: Ling Ma > --- > arch/x86/include/asm/alternative-asm.h | 4 +- > arch/x86/lib/memset_64.S | 172 > +++++++++++++++++++++------------ > 2 files changed, 110 insertions(+), 66 deletions(-) > > diff --git a/arch/x86/include/asm/alternative-asm.h > b/arch/x86/include/asm/alternative-asm.h > index 372231c..aaac545 100644 > --- a/arch/x86/include/asm/alternative-asm.h > +++ b/arch/x86/include/asm/alternative-asm.h > @@ -22,8 +22,8 @@ > .long \orig - . > .long \alt - . > .word \feature > - .byte \orig_len > - .byte \alt_len > + .word \orig_len > + .word \alt_len > .endm > > #endif /* __ASSEMBLY__ */ > diff --git a/arch/x86/lib/memset_64.S b/arch/x86/lib/memset_64.S > index 2dcb380..3eca27c 100644 > --- a/arch/x86/lib/memset_64.S > +++ b/arch/x86/lib/memset_64.S > @@ -59,77 +59,121 @@ > ENTRY(memset) > ENTRY(__memset) > CFI_STARTPROC > - movq %rdi,%r10 > - > - /* expand byte value */ > movzbl %sil,%ecx > - movabs $0x0101010101010101,%rax > - imulq %rcx,%rax > - > - /* align dst */ > - movl %edi,%r9d > - andl $7,%r9d > - jnz .Lbad_alignment > - CFI_REMEMBER_STATE > -.Lafter_bad_alignment: > - > - movq %rdx,%rcx > - shrq $6,%rcx > - jz .Lhandle_tail > - > + mov $0x0101010101010101,%rsi > + imulq %rsi,%rcx > + movq %rdi,%rax > + lea (%rdi, %rdx), %r8 > + cmp $128, %rdx > + ja .Lmore128bytes > + cmp $64, %edx > + jb .Lless_64bytes > + /* > + * Move data from 65 bytes to 128 bytes. > + */ > + mov %rcx, 0x00(%rdi) > + mov %rcx, 0x08(%rdi) > + mov %rcx, 0x10(%rdi) > + mov %rcx, 0x18(%rdi) > + mov %rcx, 0x20(%rdi) > + mov %rcx, 0x28(%rdi) > + mov %rcx, 0x30(%rdi) > + mov %rcx, 0x38(%rdi) > + mov %rcx, -0x40(%r8) > + mov %rcx, -0x38(%r8) > + mov %rcx, -0x30(%r8) > + mov %rcx, -0x28(%r8) > + mov %rcx, -0x20(%r8) > + mov %rcx, -0x18(%r8) > + mov %rcx, -0x10(%r8) > + mov %rcx, -0x08(%r8) > + ret > .p2align 4 > -.Lloop_64: > - decq %rcx > - movq %rax,(%rdi) > - movq %rax,8(%rdi) > - movq %rax,16(%rdi) > - movq %rax,24(%rdi) > - movq %rax,32(%rdi) > - movq %rax,40(%rdi) > - movq %rax,48(%rdi) > - movq %rax,56(%rdi) > - leaq 64(%rdi),%rdi > - jnz .Lloop_64 > - > - /* Handle tail in loops. The loops should be faster than hard > - to predict jump tables. */ > +.Lless_64bytes: > + cmp $32, %edx > + jb .Lless_32bytes > + /* > + * Move data from 33 bytes to 64 bytes. > + */ > + mov %rcx, 0x00(%rdi) > + mov %rcx, 0x08(%rdi) > + mov %rcx, 0x10(%rdi) > + mov %rcx, 0x18(%rdi) > + mov %rcx, -0x20(%r8) > + mov %rcx, -0x18(%r8) > + mov %rcx, -0x10(%r8) > + mov %rcx, -0x08(%r8) > + ret > .p2align 4 > -.Lhandle_tail: > - movl %edx,%ecx > - andl $63&(~7),%ecx > - jz .Lhandle_7 > - shrl $3,%ecx > +.Lless_32bytes: > + cmp $16, %edx > + jb .Lless_16bytes > + mov %rcx, 0x00(%rdi) > + mov %rcx, 0x08(%rdi) > + mov %rcx, -0x10(%r8) > + mov %rcx, -0x08(%r8) > + ret > .p2align 4 > -.Lloop_8: > - decl %ecx > - movq %rax,(%rdi) > - leaq 8(%rdi),%rdi > - jnz .Lloop_8 > - > -.Lhandle_7: > - andl $7,%edx > - jz .Lende > +.Lless_16bytes: > + cmp $8, %edx > + jb .Lless_8bytes > + mov %rcx, (%rdi) > + mov %rcx, -0x08(%r8) > + ret > .p2align 4 > -.Lloop_1: > - decl %edx > - movb %al,(%rdi) > - leaq 1(%rdi),%rdi > - jnz .Lloop_1 > - > -.Lende: > - movq %r10,%rax > +.Lless_8bytes: > + cmp $4, %edx > + jb .Lless_4bytes > + mov %ecx, (%rdi) > + mov %ecx, -0x04(%r8) > + .p2align 4 > +.Lless_4bytes: > + cmp $2, %edx > + jb .Lless_2bytes > + mov %cx, (%rdi) > + mov %cx, -0x02(%r8) > + ret > + .p2align 4 > +.Lless_2bytes: > + cmp $1, %edx > + jb .Lless_1bytes > + mov %cl, (%rdi) > +.Lless_1bytes: > ret > > - CFI_RESTORE_STATE > -.Lbad_alignment: > - cmpq $7,%rdx > - jbe .Lhandle_7 > - movq %rax,(%rdi) /* unaligned store */ > - movq $8,%r8 > - subq %r9,%r8 > - addq %r8,%rdi > - subq %r8,%rdx > - jmp .Lafter_bad_alignment > + .p2align 4 > +.Lmore128bytes: > + mov %rcx, (%rdi) > + mov %rdi, %r9 > + and $-0x08, %rdi > + add $0x08, %rdi > + sub %rdi, %r9 > + add %r9, %rdx > + sub $0x40, %rdx > +.Lgobble_64_loop: > + mov %rcx, 0x00(%rdi) > + mov %rcx, 0x08(%rdi) > + mov %rcx, 0x10(%rdi) > + mov %rcx, 0x18(%rdi) > + mov %rcx, 0x20(%rdi) > + mov %rcx, 0x28(%rdi) > + mov %rcx, 0x30(%rdi) > + mov %rcx, 0x38(%rdi) > + lea 0x40(%rdi), %rdi > + sub $0x40, %rdx > + jae .Lgobble_64_loop > + /* > + * Move data from 0 bytes to 63 bytes. > + */ > + mov %rcx, -0x40(%r8) > + mov %rcx, -0x38(%r8) > + mov %rcx, -0x30(%r8) > + mov %rcx, -0x28(%r8) > + mov %rcx, -0x20(%r8) > + mov %rcx, -0x18(%r8) > + mov %rcx, -0x10(%r8) > + mov %rcx, -0x08(%r8) > + ret > .Lfinal: > CFI_ENDPROC > ENDPROC(memset) > -- > 1.8.1.4 > > --001a11c121e077283704f675054f Content-Type: application/x-tar; name="memset_kernel.tar" Content-Disposition: attachment; filename="memset_kernel.tar" Content-Transfer-Encoding: base64 X-Attachment-Id: file0 bWVtc2V0X2tlcm5lbC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA3NTAAMDAwMDAw MAAwMDAwMDAwADAwMDAwMDAwMDAwADEyMzIwNTM0MDcxADAxMjM3NgAgNQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABt ZW1zZXRfa2VybmVsL3Rlc3QuYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0MAAwMDAwMDAw ADAwMDAwMDAAMDAwMDAwMDAzMTIAMTIzMjA1MzM0NTIAMDEzNTIwACAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNp bmNsdWRlIDxzdGRsaWIuaD4KY2hhciBfYXJ5W1NJWkUgKyA2NF07CmludCBtYWluKCl7CiAgaW50 IHNlZWQ9MDsKICBpbnQgaTsKICBmb3IgKGk9MDtpPDI1MDAwMDAwO2krKyl7CiAgICBtZW1zZXQy KF9hcnkgKyAodW5zaWduZWQpcmFuZF9yKCZzZWVkKSU2NCwwLCh1bnNpZ25lZClyYW5kX3IoJnNl ZWQpJVNJWkUpOwogIH0KICByZXR1cm4gMDsKfQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWVt c2V0X2tlcm5lbC9yZXN1bHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDAAMDAwMDAwMAAw MDAwMDAwADAwMDAwMDAxMjUwADEyMzIwNTIxMzIwADAxMzYyNwAgMAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzaXpl OiAzMjAwMAowLjI5CTAuMjkKMC4yOQkwLjI5CjAuMjkJMC4yOQowLjI5CTAuMjkKMC4yOQkwLjI5 CjAuMjkJMC4yOQowLjI5CTAuMjkKMC4yOQkwLjI5CjAuMjkJMC4yOQowLjI5CTAuMjkKc2l6ZTog MjU2MDAwCjAuMzMJMC4zMwowLjMzCTAuMzMKMC4zMwkwLjMzCjAuMzMJMC4zMwowLjMzCTAuMzMK MC4zMwkwLjMzCjAuMzMJMC4zMwowLjMzCTAuMzMKMC4zMwkwLjMzCjAuMzMJMC4zMwpzaXplOiAx MDI0MDAwCjAuMzUJMC4zNgowLjM1CTAuMzYKMC4zNQkwLjM2CjAuMzUJMC4zNgowLjM1CTAuMzYK MC4zNQkwLjM2CjAuMzUJMC4zNgowLjM1CTAuMzYKMC4zNQkwLjM2CjAuMzUJMC4zNgpzaXplOiAy MDQ4MDAKMC4zNAkwLjM1CjAuMzQJMC4zNQowLjM0CTAuMzUKMC4zNAkwLjM1CjAuMzUJMC4zNQow LjM0CTAuMzUKMC4zNAkwLjM1CjAuMzQJMC4zNQowLjM0CTAuMzUKMC4zNAkwLjM1CnNpemU6IDQw NDgwMDAKMC42NwkwLjgxCjAuNjcJMC43OQowLjY3CTAuODAKMC42NwkwLjc5CjAuNjcJMC44MAow LjY3CTAuODAKMC42NwkwLjgxCjAuNjcJMC44MQowLjY4CTAuODEKMC42OAkwLjgwCnNpemU6IDgw OTYwMDAKMS4wMAkxLjMzCjEuMDAJMS4zMwowLjk5CTEuMzMKMC45OQkxLjMzCjAuOTkJMS4zMwow Ljk5CTEuMzMKMS4wMAkxLjM0CjAuOTkJMS4zMwowLjk5CTEuMzMKMC45OQkxLjMzCgAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWVtc2V0 X2tlcm5lbC9tZW1zZXRfa2VybmVsX25ldy5zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDAAMDAwMDAwMAAwMDAw MDAwADAwMDAwMDA0MTYyADEyMzIwNTI3MjQ2ADAxNjI3NwAgMAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIDEgIm1l bXNldDIzLlMiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZC1saW5lPiIKIyAxICJtZW1z ZXQyMy5TIgojIDEgInN5c2RlcC5oIiAxCiMgMiAibWVtc2V0MjMuUyIgMgoudGV4dCA7Lmdsb2Js IG1lbXNldDI7IC50eXBlIG1lbXNldDIsIEBmdW5jdGlvbjttZW1zZXQyOjsgLmNmaV9zdGFydHBy b2MKCW1vdnpibCAlc2lsLCVlY3gKCW1vdiAkMHgwMTAxMDEwMTAxMDEwMTAxLCVyc2kKCWltdWxx ICAlcnNpLCVyY3gKCW1vdnEgJXJkaSwlcmF4CglsZWEJKCVyZGksICVyZHgpLCAlcjgKCWNtcAkk MTI4LCAlcmR4CglqYQkuTG1vcmUxMjhieXRlc29ybW9yZQoJY21wCSQ2NCwgJWVkeAoJamIJLkxs ZXNzXzY0Ynl0ZXMKCW1vdiAlcmN4LCAweDAwKCVyZGkpCgltb3YgJXJjeCwgMHgwOCglcmRpKQoJ bW92ICVyY3gsIDB4MTAoJXJkaSkKCW1vdiAlcmN4LCAweDE4KCVyZGkpCgltb3YgJXJjeCwgMHgy MCglcmRpKQoJbW92ICVyY3gsIDB4MjgoJXJkaSkKCW1vdiAlcmN4LCAweDMwKCVyZGkpCgltb3Yg JXJjeCwgMHgzOCglcmRpKQoJbW92ICVyY3gsIC0weDQwKCVyOCkKCW1vdiAlcmN4LCAtMHgzOCgl cjgpCgltb3YgJXJjeCwgLTB4MzAoJXI4KQoJbW92ICVyY3gsIC0weDI4KCVyOCkKCW1vdiAlcmN4 LCAtMHgyMCglcjgpCgltb3YgJXJjeCwgLTB4MTgoJXI4KQoJbW92ICVyY3gsIC0weDEwKCVyOCkK CW1vdiAlcmN4LCAtMHgwOCglcjgpCglyZXQKCS5wMmFsaWduIDQKLkxsZXNzXzY0Ynl0ZXM6Cglj bXAJJDMyLCAlZWR4CglqYgkuTGxlc3NfMzJieXRlcwoJbW92ICVyY3gsIDB4MDAoJXJkaSkKCW1v diAlcmN4LCAweDA4KCVyZGkpCgltb3YgJXJjeCwgMHgxMCglcmRpKQoJbW92ICVyY3gsIDB4MTgo JXJkaSkKCW1vdiAlcmN4LCAtMHgyMCglcjgpCgltb3YgJXJjeCwgLTB4MTgoJXI4KQoJbW92ICVy Y3gsIC0weDEwKCVyOCkKCW1vdiAlcmN4LCAtMHgwOCglcjgpCglyZXQKCS5wMmFsaWduIDQKLkxs ZXNzXzMyYnl0ZXM6CgljbXAJJDE2LCAlZWR4CglqYgkuTGxlc3NfMTZieXRlcwoJbW92ICVyY3gs IDB4MDAoJXJkaSkKCW1vdiAlcmN4LCAweDA4KCVyZGkpCgltb3YgJXJjeCwgLTB4MTAoJXI4KQoJ bW92ICVyY3gsIC0weDA4KCVyOCkKCXJldAoJLnAyYWxpZ24gNAouTGxlc3NfMTZieXRlczoKCWNt cAkkOCwgJWVkeAoJamIJLkxsZXNzXzhieXRlcwoJbW92ICVyY3gsICglcmRpKQoJbW92ICVyY3gs IC0weDA4KCVyOCkKCXJldAoJLnAyYWxpZ24gNAouTGxlc3NfOGJ5dGVzOgoJY21wCSQ0LCAlZWR4 CglqYgkuTGxlc3NfNGJ5dGVzCgltb3YgJWVjeCwgKCVyZGkpCgltb3YgJWVjeCwgLTB4MDQoJXI4 KQoJLnAyYWxpZ24gNAouTGxlc3NfNGJ5dGVzOgoJY21wCSQyLCAlZWR4CglqYgkuTGxlc3NfMmJ5 dGVzCgltb3YJJWN4LCAoJXJkaSkKCW1vdgklY3gsIC0weDAyKCVyOCkKCXJldAoJLnAyYWxpZ24g NAouTGxlc3NfMmJ5dGVzOgoJY21wCSQxLCAlZWR4CglqYgkuTGxlc3NfMWJ5dGVzCgltb3YJJWNs LCAoJXJkaSkKLkxsZXNzXzFieXRlczoKCXJldAoKCS5wMmFsaWduIDQKLkxtb3JlMTI4Ynl0ZXNv cm1vcmU6Cgltb3YJJXJjeCwgKCVyZGkpCgltb3YJJXJkaSwgJXI5CglhbmQJJC0weDA4LCAlcmRp CglhZGQJJDB4MDgsICVyZGkKCXN1YgklcmRpLCAlcjkKCWFkZAklcjksICVyZHgKCXN1YgkkMHg0 MCwgJXJkeAouTGdvYmJsZV82NF9sb29wOgoJbW92CQklcmN4LCAweDAwKCVyZGkpCgltb3YJCSVy Y3gsIDB4MDgoJXJkaSkKCW1vdgkJJXJjeCwgMHgxMCglcmRpKQoJbW92CQklcmN4LCAweDE4KCVy ZGkpCgltb3YJCSVyY3gsIDB4MjAoJXJkaSkKCW1vdgkJJXJjeCwgMHgyOCglcmRpKQoJbW92CQkl cmN4LCAweDMwKCVyZGkpCgltb3YJCSVyY3gsIDB4MzgoJXJkaSkKCWxlYQkweDQwKCVyZGkpLCAl cmRpCglzdWIJJDB4NDAsICVyZHgKCWphZQkuTGdvYmJsZV82NF9sb29wCgltb3YJCSVyY3gsIC0w eDQwKCVyOCkKCW1vdgkJJXJjeCwgLTB4MzgoJXI4KQoJbW92CQklcmN4LCAtMHgzMCglcjgpCglt b3YJCSVyY3gsIC0weDI4KCVyOCkKCW1vdgkJJXJjeCwgLTB4MjAoJXI4KQoJbW92CQklcmN4LCAt MHgxOCglcjgpCgltb3YJCSVyY3gsIC0weDEwKCVyOCkKCW1vdgkJJXJjeCwgLTB4MDgoJXI4KQoJ cmV0CgoKLmNmaV9lbmRwcm9jIDsgLnNpemUgbWVtc2V0MiwgLi1tZW1zZXQyCgAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWVtc2V0X2tlcm5l bC90ZXN0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA3NTAAMDAwMDAwMAAwMDAwMDAwADAw MDAwMDAxMjQ0ADEyMzIwNTMzMzAxADAxMzI3NwAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA cm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZWNobyAtZSAiQnl0 ZXM6IE9SR19USU1FOiBORVdfVElNRTogT1JHIHZzIE5FVzoiCmZvciBTSVpFIGluIDcgMTYgMTgg MjEgMjUgMzAgMzYgMzggNjIgNzUgODUgMTIwIDE5MyAyNDUgMjU2IDM1NiA2MDEgOTU4IDEwMjQg MjA0ODsgZG8KICBnY2MgLURTSVpFPSRTSVpFIC1jIC1PMiAgdGVzdC5jCiAgZ2NjIHRlc3QubyBt ZW1zZXRfa2VybmVsX29yZy5zIC1vIG1lbXNldF9rZXJuZWxfb3JnCiAgZ2NjIHRlc3QubyBtZW1z ZXRfa2VybmVsX25ldy5zIC1vIG1lbXNldF9rZXJuZWxfbmV3CiNkcnkgcnVuIAogICBORVdfVElN RT1gIC91c3IvYmluL3RpbWUgLWYgIiVVIiAuL21lbXNldF9rZXJuZWxfbmV3IDI+JjFgCiAgIE9S R19USU1FPWAgL3Vzci9iaW4vdGltZSAtZiAiJVUiIC4vbWVtc2V0X2tlcm5lbF9vcmcgMj4mMWAK ICBmb3IgSSBpbiBgc2VxIDEgMWA7IGRvCiAgICBPUkdfVElNRT1gIC91c3IvYmluL3RpbWUgLWYg IiVVIiAuL21lbXNldF9rZXJuZWxfb3JnIDI+JjFgCiAgICBORVdfVElNRT1gIC91c3IvYmluL3Rp bWUgLWYgIiVVIiAuL21lbXNldF9rZXJuZWxfbmV3IDI+JjFgCglQRVJDRU5UPWBlY2hvICJzY2Fs ZT0yOyRPUkdfVElNRS8kTkVXX1RJTUUifGJjYAogICAgZWNobyAtZSAiJFNJWkVcdCRPUkdfVElN RVx0JE5FV19USU1FXHQkUEVSQ0VOVCIKICBkb25lCmRvbmUKAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWVtc2V0X2tlcm5lbC9t ZW1zZXRfa2VybmVsX29yZy5zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDAAMDAwMDAwMAAwMDAwMDAwADAwMDAw MDAyMjM1ADEyMzIwNTIxMzIwADAxNjI1NwAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9v dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIDEgIm1lbXNldDIzLlMi CiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZC1saW5lPiIKIyAxICJtZW1zZXQyMy5TIgoj IDEgInN5c2RlcC5oIiAxCiMgMiAibWVtc2V0MjMuUyIgMgoudGV4dCA7Lmdsb2JsIG1lbXNldDI7 IC50eXBlIG1lbXNldDIsIEBmdW5jdGlvbjttZW1zZXQyOjsgLmNmaV9zdGFydHByb2MKCW1vdnEg JXJkaSwlcjEwCgoJbW92emJsICVzaWwsJWVjeAoJbW92YWJzICQweDAxMDEwMTAxMDEwMTAxMDEs JXJheAoJaW11bHEgICVyY3gsJXJheAoKCW1vdmwgICVlZGksJXI5ZAoJYW5kbCAgJDcsJXI5ZAoJ am56ICAuTGJhZF9hbGlnbm1lbnQKLkxhZnRlcl9iYWRfYWxpZ25tZW50OgoKCW1vdnEgICVyZHgs JXJjeAoJc2hycSAgJDYsJXJjeAoJanoJIC5MaGFuZGxlX3RhaWwKCgkucDJhbGlnbiA0Ci5MbG9v cF82NDoKCWRlY3EgICVyY3gKCW1vdnEgICVyYXgsKCVyZGkpCgltb3ZxICAlcmF4LDgoJXJkaSkK CW1vdnEgICVyYXgsMTYoJXJkaSkKCW1vdnEgICVyYXgsMjQoJXJkaSkKCW1vdnEgICVyYXgsMzIo JXJkaSkKCW1vdnEgICVyYXgsNDAoJXJkaSkKCW1vdnEgICVyYXgsNDgoJXJkaSkKCW1vdnEgICVy YXgsNTYoJXJkaSkKCWxlYXEgIDY0KCVyZGkpLCVyZGkKCWpueiAgICAuTGxvb3BfNjQKCgkucDJh bGlnbiA0Ci5MaGFuZGxlX3RhaWw6Cgltb3ZsCSVlZHgsJWVjeAoJYW5kbCAgICAkNjMmKH43KSwl ZWN4CglqeiAJCS5MaGFuZGxlXzcKCXNocmwJJDMsJWVjeAoJLnAyYWxpZ24gNAouTGxvb3BfODoK CWRlY2wgICAlZWN4Cgltb3ZxICAlcmF4LCglcmRpKQoJbGVhcSAgOCglcmRpKSwlcmRpCglqbnog ICAgLkxsb29wXzgKCi5MaGFuZGxlXzc6CglhbmRsCSQ3LCVlZHgKCWp6ICAgICAgLkxlbmRlCgku cDJhbGlnbiA0Ci5MbG9vcF8xOgoJZGVjbCAgICAlZWR4Cgltb3ZiIAklYWwsKCVyZGkpCglsZWFx CTEoJXJkaSksJXJkaQoJam56ICAgICAuTGxvb3BfMQoKLkxlbmRlOgoJbW92cQklcjEwLCVyYXgK CXJldAoKLkxiYWRfYWxpZ25tZW50OgoJY21wcSAkNywlcmR4CglqYmUJLkxoYW5kbGVfNwoJbW92 cSAlcmF4LCglcmRpKQoJbW92cSAkOCwlcjgKCXN1YnEgJXI5LCVyOAoJYWRkcSAlcjgsJXJkaQoJ c3VicSAlcjgsJXJkeAoJam1wIC5MYWZ0ZXJfYmFkX2FsaWdubWVudAoKLmNmaV9lbmRwcm9jIDsg LnNpemUgbWVtc2V0MiwgLi1tZW1zZXQyCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAA= --001a11c121e077283704f675054f--